Redis过期键

250 阅读2分钟

这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

Redis过期键

设置键的生存时间或过期时间

通过EXPIRE命令或者PEXPIRE命令,客户端可以以秒或毫秒来读取某个键的生存时间TTL(Time To Live),过期后服务器自动删除生存时间为0的键

设置过期时间

EXPIRE:生存时间设置为多少秒

PEXPIRE:生存时间设置为多少毫秒

EXPIREAT:key的过期时间设置为timestamp所指定的秒数时间戳

PEXPIREAT:key的过期时间设置为timestamp所指定的毫秒数时间戳

通过EXPIRE PEXPIRE EXPIREAT PEXPIREAT来设置键的过期时间,EXPIRE可以转换成PEXPIRE,PEXPIRE和EXPIREAT都可以转换成PEXPIREAT,所以EXPIRE PEXPIRE EXPIREAT 都是使用PEXPIREAT命令实现的

保存过期时间

redisDb结构的expires字典保存了数据库中所有键的过期时间,这个字典就是过期字典。

过期字典的键是个指针,指向键空间的键对象,值是long long类型的整数,就是过期时间

移除过期时间

PERSIST命令就是PEXPIREAT命令的反操作:PERSIST命令在过期字典中查找给定的键,并解除键和值在过期字典中的关联

计算并返回剩余生存时间

TTL命令以秒为单位返回键的剩余生存时间,PTTL命令以毫秒为单位返回键的剩余生存时间,都是通过计算键的过期时间和当前时间之差来实现的

过期键

检查给定键是否存在于过期字典中,如果存在取得键的过期时间,如果当前UNIX时间戳大于键的过期时间,则已经过期,否则未过期

也可以通过TTL命令或PTTL命令,如果命令返回的值大于等于0,说明键未过期

实际使用的是第一种方法,因为直接访问字典比执行TTL命令要快。

总结

好了,今天主要给大家介绍了一下什么是过期键,过期键的如何进行设定,过期键保存在了过期字典中,移除过期键就是在过期字典中解除键和值的关联,我们可以同ttl或者pttl命令查看指定键什么时候过期,对于过期键的判定,redis使用检查给定键是否存在于过期字典中,如果存在取得键的过期时间,如果当前UNIX时间戳大于键的过期时间,则已经过期,否则未过期。

了解并掌握好了redis的过期键,我们可以对过期键进行操作,后边的文章我们将对redis的过期键的删除策略进行探讨,这也是在我们工作中或者面试中经常用到的。