📅  最后修改于: 2023-12-03 14:47:03.066000             🧑  作者: Mango
Redis是一种高性能的key-value存储数据库,是当前最流行的NoSQL之一。为了防止Redis中的数据因为存放太久而占用过多的存储空间,我们可以设置过期时间节点来自动清除过期数据。
Redis设置过期时间主要用到的指令是EXPIRE
和TTL
。
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
用于查看key的剩余时间,语法为:
TTL key
其中key
为要查看的key。如果key不存在,返回-2;如果key存在但没有设置过期时间,返回-1;如果key存在且设置了过期时间,返回key的剩余时间(单位为秒)。
在Node.js中,我们可以使用redis
包连接Redis,并使用EXPIRE
和TTL
设置和查看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()
函数直接设置一个有过期时间的键值对,可以在使用时考虑。