Redis 键过期时间设置及相关知识点详解

配资网 阅读: 2024-10-21
后台-插件-广告管理-内容页头部广告(手机)

Redis里头跟键的存活和过期时间有关的操作,那可是一门学问,得好好研究研究。这里面藏着不少转换的奥秘,还有好几种删除方法,每种方法都有它的长处和短处。

EXPIRE   :表示将键 key 的生存时间设置为 ttl 秒。
PEXPIRE   :表示将键 key 的生存时间设置为 ttl 毫秒。
EXPIREAT   :表示将键 key 的生存时间设置为 timestamp 所指定的秒数时间戳。
PEXPIREAT   :表示将键 key 的生存时间设置为 timestamp 所指定的毫秒数时间戳。

Redis命令转换

Redis里头有四个指令是用来设置数据生存或过期时间的,前三个到最后都会变成PEXPIREAT这个指令来执行。这可不是随便设置一下那么简单,它背后涉及到Redis自己对这些指令的处理方式。比如,在电商搞促销活动的时候,系统得存好多限时优惠的商品信息,这时候用这些指令就得小心,因为它们会这样转换。还有,在数据迁移的时候,这种转换也会改变我们操作的方式。

技术上讲,这种转换展现了Redis的强大,用一个统一的命令就能搞定各种设置操作。这样做能有效地防止代码变得庞大,逻辑也变得更简单。

过期字典存储

在Redis里,当你设置一个键的过期时间,它会自动把这个键和它的过期时间一起存进一个专门的过期字典里。这种方式简单易懂,但非常重要。就拿数据监控系统来说,要记录一些关键数据的有效期,这些数据就像是按照名单被存放在了过期字典里。

掘金策略_策略掘金拼音怎么写_策略掘金2024

这种存储方式方便后续的查找,一旦我们要找某个键,Redis会先检查这个键是否存在于过期字典中。如果找到了,就能迅速得到它的过期时间。这就像是在一个大仓库里,根据清单快速找到货物的存放位置和相关信息。

定时删除优点

定时删除这招儿挺高明,对内存来说那是相当友好。一到时间点,它就能把内存里的那些键给清理掉,这可大大提高了内存的利用率。就拿那些占用数据空间很大的多媒体应用来说,它们存储了超多临时缓存键值对。这种情况下,定时删除就像个救星,能及时帮着腾出空间来。

定时删东西对CPU挺友好,就只在用键的时候才检查过期,那些不用的键就别浪费CPU资源了。就像快递,只有取了快递才会看有效期,没取的快递就不管它了。

但是定时删除也有点不好。它对内存不是很友好,比如一个键虽然过期了,但还没被用到,就会一直占用内存。像是在测试环境里,如果有很多这种过期的键,内存就永远释放不出来了。

定时执行不够,那就跟懒散地删除一样,过期的键占用的内存不能及时被释放。更糟糕的是,要是我们去访问一个键,它过期了但定时删除没启动,那系统就会给出错误信息,这对我们的业务来说可是无法容忍的。

惰性删除实现

策略掘金拼音怎么写_掘金策略_策略掘金2024

Redis里头,惰性删除这事儿是通过db.c里的expireIfNeeded函数来实现的。这函数在咱们执行所有键的读写命令前都会被调用,看看键有没有过期,过期了就直接删掉,操作时就当它不存在。比如在金融交易系统里,读取关键账户信息之前,得先看看这个键是不是还活着。这方法挺懒的,就是用的时候才去检查过期,挺省事儿。不过,虽然好处不少,但也有一些潜在的风险。

定期删除操作

定期执行的任务,是由redis.c/activeExpireCycle函数负责的。这个任务会按照设定的频率,从多个数据库中随机选取键,检查这些键是否过期,并予以删除。比如说,在社交平台上存储用户动态的时候,就可以用这种方式来定期清理那些过期的动态。

要是内存里存了好多永远都不用的键,就算你老是把它们删掉,它们还是赖在那儿。要是这些键堆得太多,Redis的内存都快要不够用了,那咱们就得想个办法,得用上内存淘汰的招数了。

最后,咱们得问大家一个问题:在实际操作里,你们碰到Redis键过期这类难题,都是怎么处理的?快来评论区聊聊!顺便也请大家给这篇文章点个赞,分享出去!

本文 融资融券杠杆炒股 原创,转载保留链接!网址:http://www.wjjxb.com/zmt/391.html

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索