Redis的过期键的过期时间都保存在过期字典中,过期键的删除策略有三种,分别是定时删除、惰性删除和定期删除。

定时删除

定时删除策略,是指在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间到的时候,立即执行对键的删除操作。

定时删除策略的优点

对内存友好,通过定时器可以保证过期键能尽可能快地被删除,并释放过期键占用的空间。

定时删除策略的缺点

1.对CPU不友好。在过期键较多的情况下,删除过期键可能会占用相当一部分的CPU执行时间。在内存不紧张而CPU紧张的情况下,将CPU资源用在删除和当前任务无关的过期键上,无疑也会对服务器的响应时间和吞吐量造成影响。

2.创建定时器需要Redis服务器中的时间事件,而现在时间事件的实现方式是无序链表,查找一个事件的事件复杂度为O(N),并不能高效地处理大量时间事件。

惰性删除

惰性删除策略,是指放任键过期不管,每次从键空间获取键的时候才去检查取得的键是否过期,如果过期的话,就删除该键,如果不过期,就返回该键。

惰性删除策略的优点

对CPU友好,程序只在取出键时才对键进行过期检查,删除的目标进行预当前处理的键。

惰性删除策略的缺点

惰性删除策略对内存不友好,当数据库中有大量的过期键,而这些键又没有被访问到,那么它们可能因为永远都不会被进行过期检查而被删除。

定期删除

定期删除策略,是指每隔一段时间,程序就会对数据库进行一次检查,删除里面的过期键。至于删除多少过期键,以及检查多少数据库,都由算法来决定。这种策略是前面两种删除策略(定时删除、惰性删除)的一种折衷,它会通过限制操作执行的时长和频率来减少删除操作对CPU执行时间的影响,而确定删除策略的时长和频率就是主要难点。

定期删除策略的难点

1.如果删除操作太频繁,或者执行时间过长,定期删除策略就会退化成定时删除策略。

2.如果删除操作执行得太少,或者执行时间太短,定期删除策略又会和惰性删除策略一样,出现内存浪费的现象。

总结

这三种策略,第一种策略(定时删除)和第三种策略(定期删除)可以归类为主动删除策略,第二种策略(惰性删除)则是被动删除策略。Redis服务器实际使用的是惰性删除+定期删除两种策略的一个配合使用。通过这两种策略的配合使用,服务器就可以很好地在【合理使用CPU时间】和【避免浪费内存空间】之间取得平衡。

"第一次遇见你其实没什么特别,也不会想到后来会那么喜欢你。"

最新文章

  1. 简述ES5 ES6
  2. linux下samba的安装与使用
  3. JS实现HTML静态页传值的方法
  4. 关于string的练习题目
  5. 解决 Eclipse build workspace 慢,validation javascript 更慢的问题
  6. Application和Session的例子
  7. C#中float的取值范围和精度
  8. oracle-使用数据泵对不同用户和不同表空间的数据迁移
  9. canvas基础语法
  10. .13-Vue源码之patch(3)(终于完事)
  11. listview下拉刷新上拉加载扩展(二)-仿美团外卖
  12. PHP-max_execution_time与fpm.request_terminate_timeout介绍
  13. 第一册:lesson sixty one.
  14. 安装SQL Server For Linux(Install SQL Server)
  15. “javac”不是内部或外部命令的解决办法(JDK1.5 ~ JDK10)
  16. Redis源码笔记-初步
  17. 《OpenGL® ES™ 3.0 Programming Guide》读书笔记1 ----总览
  18. mybatis异常:Error instantiating class com.psc.bean.User with invalid types () or values ().
  19. 树莓派3b添加python时间同步脚本
  20. git/github 代码托管图文教程

热门文章

  1. Bag of Tricks for Image Classification with Convolutional Neural Networks
  2. MongoDB for OPS 02:复制集 RS 配置
  3. shell 命名管道,进程间通信, ncat作http server
  4. vue-基本动画
  5. java基础第十四篇之Map
  6. PHP代码篇(五)--如何将图片文件上传到另外一台服务上
  7. 10.JavaCC官方入门指南-例5
  8. Linux—文件上传和下载
  9. undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
  10. Python自动化运维之高级函数