📜  redis设置过期时间节点js - Javascript(1)

📅  最后修改于: 2023-12-03 14:47:03.066000             🧑  作者: Mango

Redis设置过期时间节点

Redis是一种高性能的key-value存储数据库,是当前最流行的NoSQL之一。为了防止Redis中的数据因为存放太久而占用过多的存储空间,我们可以设置过期时间节点来自动清除过期数据。

Redis设置过期时间

Redis设置过期时间主要用到的指令是EXPIRETTL

EXPIRE

EXPIRE用于设置key的过期时间,语法为:

EXPIRE key seconds

其中key为要设置的key,seconds为过期时间(单位为秒)。设置后,Redis会自动在指定的时间后删除该key。例如:

> SET mykey "Hello World!"
OK
> EXPIRE mykey 10   # 设置mykey的过期时间为10秒
(integer) 1
> TTL mykey   # 查看mykey的剩余时间
(integer) 9   # 相当于还有9秒过期
> GET mykey
"Hello World!"
> TTL mykey
(integer) -2  # 过期了,返回-2
> GET mykey
(nil)   # 访问不到该key了

需要注意的是,如果对已经存在过期时间的key再次设置过期时间,其过期时间会被覆盖。

TTL

TTL用于查看key的剩余时间,语法为:

TTL key

其中key为要查看的key。如果key不存在,返回-2;如果key存在但没有设置过期时间,返回-1;如果key存在且设置了过期时间,返回key的剩余时间(单位为秒)。

Node.js中使用Redis设置过期时间

在Node.js中,我们可以使用redis包连接Redis,并使用EXPIRETTL设置和查看key的过期时间。以下是具体示例代码:

const redis = require('redis')
const client = redis.createClient()

// 设置key的过期时间为10秒
client.set('mykey', 'Hello World!', (err, res) => {
  if (err) throw err
  client.expire('mykey', 10, (err2, res2) => {
    if (err2) throw err2
    console.log(res2)  // 输出1,表示设置成功
  })
})

// 查看key的剩余时间
client.ttl('mykey', (err, res) => {
  if (err) throw err
  console.log(res)  // 输出9,即还有9秒过期
})

// 模拟过期后的情况
setTimeout(() => {
  client.ttl('mykey', (err, res) => {
    if (err) throw err
    console.log(res)  // 输出-2,表示已过期
    client.get('mykey', (err2, res2) => {
      if (err2) throw err2
      console.log(res2)  // 输出null,即访问不到该key了
    })
  })
}, 11000)

以上代码会在Redis中设置一个key为mykey、值为Hello World!的键值对,并将其过期时间设置为10秒。然后再查看该key的剩余时间,最后模拟过期后再次查看该key的状态和值。

需要注意的是,redis包提供了许多更便捷的函数,如setex()函数直接设置一个有过期时间的键值对,可以在使用时考虑。