redis学习(五) redis过期时间

栏目: 数据库 · 发布时间: 5年前

内容简介:有时候我们并不希望redis的key一直存在。例如缓存,验证码等数据,我们希望它们能在一定时间内自动的被销毁。redis提供了一些命令,能够让我们对key设置过期时间,并且让key过期之后被自动删除。EXPIRE接口定义:EXPIRE key "seconds"接口描述:设置一个key在当前时间"seconds"(秒)之后过期。返回1代表设置成功,返回0代表key不存在或者无法设置过期时间。

redis过期时间

1.redis过期时间介绍

有时候我们并不希望 redis 的key一直存在。例如缓存,验证码等数据,我们希望它们能在一定时间内自动的被销毁。redis提供了一些命令,能够让我们对key设置过期时间,并且让key过期之后被自动删除。

2.redis过期时间相关命令

1.EXPIRE PEXPIRE

EXPIRE接口定义:EXPIRE key "seconds"

接口描述:设置一个key在当前时间"seconds"(秒)之后过期。返回1代表设置成功,返回0代表key不存在或者无法设置过期时间。

PEXPIRE接口定义:PEXPIRE key "milliseconds"

接口描述:设置一个key在当前时间"milliseconds"(毫秒)之后过期。返回1代表设置成功,返回0代表key不存在或者无法设置过期时间。

redis学习(五) redis过期时间

2.EXPIREAT PEXPIREAT

EXPIREAT接口定义:EXPIREAT key "timestamp"

接口描述:设置一个key在"timestamp"(时间戳(秒))之后过期。返回1代表设置成功,返回0代表key不存在或者无法设置过期时间。

PEXPIREAT接口定义:PEXPIREAT key "milliseconds-timestamp"

接口描述:设置一个key在"milliseconds-timestamp"(时间戳(毫秒))之后过期。返回1代表设置成功,返回0代表key不存在或者无法设置过期时间

redis学习(五) redis过期时间

3.TTL PTTL

TTL接口定义:TTL key

接口描述:获取key的过期时间。如果key存在过期时间,返回剩余生存时间(秒);如果key是永久的,返回-1;如果key不存在或者已过期,返回-2。

PTTL接口定义:PTTL key

接口描述:获取key的过期时间。如果key存在过期时间,返回剩余生存时间(毫秒);如果key是永久的,返回-1;如果key不存在或者已过期,返回-2。

redis学习(五) redis过期时间

4.PERSIST

PERSIST接口定义:PERSIST key

接口描述:移除key的过期时间,将其转换为永久状态。如果返回1,代表转换成功。如果返回0,代表key不存在或者之前就已经是永久状态。

redis学习(五) redis过期时间

5.SETEX

SETEX接口定义:SETEX key "seconds" "value"

接口描述:SETEX在逻辑上等价于SET和EXPIRE合并的操作,区别之处在于SETEX是一条命令,而命令的执行是原子性的,所以不会出现并发问题。

redis学习(五) redis过期时间

3.redis如何清理过期key

redis出于性能上的考虑,无法做到对每一个过期的key进行即时的过期监听和删除。但是redis提供了其它的方法来清理过期的key。

1.被动清理

当用户主动访问一个过期的key时,redis会将其直接从内存中删除。

2.主动清理

在redis的持久化中,我们知道redis为了保持系统的稳定性,健壮性,会周期性的执行一个函数。在这个过程中,会进行之前已经提到过的自动的持久化操作,同时也会进行内存的主动清理。

在内存主动清理的过程中,redis采用了一个随机算法来进行这个过程:简单来说,redis会随机的抽取N(默认100)个被设置了过期时间的key,检查这其中已经过期的key,将其清楚。同时,如果其中已经过期的key超过了一定的百分比M(默认是25),则将继续执行一次主动清理,直至过期key的百分比在概率上降低到M一下。

3.内存不足时触发主动清理

在redis的内存不足时,也会触发主动清理。

4.redis内存不足时的策略

redis是一个基于内存的数据库,如果存储的数据量很大,达到了内存限制的最大值,将会出现内存不足的问题。redis允许用户通过配置maxmemory-policy参数,指定redis在内存不足时的解决策略。

redis学习(五) redis过期时间

1. volatile-lru 使用LRU算法删除一个键(只针对设置了过期时间的key

2. allkeys-lru 使用LRU算法删除一个键

3. volatile-lfu 使用LFU算法删除一个键(只针对设置了过期时间的键)

4. allkeys-lfu 使用LFU算法删除一个键

5. volatile-random 随机删除一个键(只针对设置了过期时间的键)

6. allkeys-random 随机删除一个键

7. volatile-ttl 删除最早过期的一个键

8. noeviction 不删除键,返回错误信息(redis默认选项)

对于只针对设置了过期时间的键进行删除的策略,在所有的可被删除的键(非永久的键)都被删除时内存依然不足,将会抛出错误。

其中,LRU算法--->最近最少使用算法,较为注重于时间;LFU算法--->最近最不常用算法,较为注重于被访问频率。redis的内存置换算法和操作系统中的内存置换算法类似,就不在这里展开了。

5.redis过期时间总结

redis的过期时间还有许多的细节值得去深入了解,例如持久化时对过期时间的处理,redis周期性的常规操作等等,只有这样才能更准确的定位问题,解决问题。而想进一步的理解这些知识,除了仔细的思考外,最好的办法就是通过阅读源代码,理解redis的底层运行原理。但是这一目标对于现在的我来说难度过大,希望通过不断的学习,将来的我能够做到这一点。


以上所述就是小编给大家介绍的《redis学习(五) redis过期时间》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

MATLAB高效编程技巧与应用

MATLAB高效编程技巧与应用

吴鹏 / 北京航空航天大学 / 2010-6 / 39.00元

《MATLAB高效编程技巧与应用:25个案例分析》是作者八年MATLAB使用经验的总结,精心设计的所有案例均来自于国内各大MATLAB技术论坛网友的切身需求,其中不少案例涉及的内容和求解方法在国内现已出版的MATLAB书籍中鲜有介绍。 《MATLAB高效编程技巧与应用:25个案例分析》首先针对MATLAB新版本特有的一些编程思想、高效的编程方法、新技术进行了较为详细的讨论,在此基础上,以大量......一起来看看 《MATLAB高效编程技巧与应用》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具