可以通过TTL命令和PTTL命令接受一个带有生存时间或则过期时间的键,返回这个键的剩余生存时间,也就是返回距离这个键被服务器自动删除还有多长时间
Redis总共有4个不同的命令来为键设置过期时间
ttl是指生存时间,pttl是指过期时间,用时间戳表示
-
expire key seconds 用于将键key的生存时间设置为ttl秒,ttl即seconds
-
pexpire key milliseconds 用于将新键的生存时间设置为ttl毫秒
-
expireat key timestamp 用于将新键的过期时间设置为pttl秒时间戳,即timestamp所指定的秒数时间戳
-
pexpireat key milliseconds-timestamp 用于将新键key的过期时间设为pttl毫秒时间戳,即timestamp所指定的毫秒数时间戳
虽然有多种命令去实现设置过期时间,但实际上都是基于pexpireat命令来实现的,也就是说,无论客户端执行的是上面4条命令的哪一条命令,最终都会转换成执行pexpireat命令,实现其实就是根据命令的不同,将ttl改为pttl,或将秒改为毫秒,然后再用改变好的参数去执行expireat操作
redisDB结构(数据库)的expires字典保存了数据库所有键的过期时间(使用字典去实现保存过期时间),称这个字典为过期字典
-
过期字典的键其实是一个指针,保存的是键空间里面的键值对对象
-
过期字典的值其实是一个Long long类型的整数,这个整数保存了过期时间(一个毫秒精度的unix时间戳)
typedef struct redisDB(
//键空间
dict *keyspace;
//过期字典
dict *expires;
)redisDB;
可以使用命令来移除指定键的过期时间
//移除指定键的过期时间
persist key
PERSIST其实就是PEXPIREAT的反向操作,PERISIST在过期字典中查找给定的键,然后解除键和值在过期字典中的关联,也就是在过期字典中删除这个键值对
前面提到过,可以使用TTL命令以秒为单位返回键的剩余生存时间,而PTTL命令则以毫秒为单位返回键的剩余生存时间
ttl key
pttl key
TTL和PTTL这两个命令都是通过计算键的过期时间和当前时间之间的差来实现的
PTTL的实现原理
前面已经说过,设置过期时间的命令最终都会变成pexpireat,使用的参数是毫秒级别的unix时间戳,所以只要通过设置的unix时间戳减去当前时间的时间戳,就可以得到剩余的生存时间(都要转换成毫秒级别)
TTL的实现原理
前面与PTTL一样,只不过返回的时候将毫秒转换成秒而已。
特殊返回值
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip1024b 备注Java获取(资料价值较高,非无偿)
最后
小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。
关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。
这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!
册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。
关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。
[外链图片转存中…(img-r4mX975V-1711577300678)]
这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!