redis的3种过期键删除策略
Redis的过期键的过期时间都保存在过期字典中,过期键的删除策略有三种,分别是定时删除、惰性删除和定期删除。
定时删除
定时删除策略,是指在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间到的时候,立即执行对键的删除操作。
定时删除策略的优点
对内存友好,通过定时器可以保证过期键能尽可能快地被删除,并释放过期键占用的空间。
定时删除策略的缺点
1.对CPU不友好。在过期键较多的情况下,删除过期键可能会占用相当一部分的CPU执行时间。在内存不紧张而CPU紧张的情况下,将CPU资源用在删除和当前任务无关的过期键上,无疑也会对服务器的响应时间和吞吐量造成影响。
2.创建定时器需要Redis服务器中的时间事件,而现在时间事件的实现方式是无序链表,查找一个事件的事件复杂度为O(N),并不能高效地处理大量时间事件。
惰性删除
惰性删除策略,是指放任键过期不管,每次从键空间获取键的时候才去检查取得的键是否过期,如果过期的话,就删除该键,如果不过期,就返回该键。
惰性删除策略的优点
对CPU友好,程序只在取出键时才对键进行过期检查,删除的目标进行预当前处理的键。
惰性删除策略的缺点
惰性删除策略对内存不友好,当数据库中有大量的过期键,而这些键又没有被访问到,那么它们可能因为永远都不会被进行过期检查而被删除。
定期删除
定期删除策略,是指每隔一段时间,程序就会对数据库进行一次检查,删除里面的过期键。至于删除多少过期键,以及检查多少数据库,都由算法来决定。这种策略是前面两种删除策略(定时删除、惰性删除)的一种折衷,它会通过限制操作执行的时长和频率来减少删除操作对CPU执行时间的影响,而确定删除策略的时长和频率就是主要难点。
定期删除策略的难点
1.如果删除操作太频繁,或者执行时间过长,定期删除策略就会退化成定时删除策略。
2.如果删除操作执行得太少,或者执行时间太短,定期删除策略又会和惰性删除策略一样,出现内存浪费的现象。
总结
这三种策略,第一种策略(定时删除)和第三种策略(定期删除)可以归类为主动删除策略,第二种策略(惰性删除)则是被动删除策略。Redis服务器实际使用的是惰性删除+定期删除两种策略的一个配合使用。通过这两种策略的配合使用,服务器就可以很好地在【合理使用CPU时间】和【避免浪费内存空间】之间取得平衡。
"第一次遇见你其实没什么特别,也不会想到后来会那么喜欢你。"
最新文章
- 简述ES5 ES6
- linux下samba的安装与使用
- JS实现HTML静态页传值的方法
- 关于string的练习题目
- 解决 Eclipse build workspace 慢,validation javascript 更慢的问题
- Application和Session的例子
- C#中float的取值范围和精度
- oracle-使用数据泵对不同用户和不同表空间的数据迁移
- canvas基础语法
- .13-Vue源码之patch(3)(终于完事)
- listview下拉刷新上拉加载扩展(二)-仿美团外卖
- PHP-max_execution_time与fpm.request_terminate_timeout介绍
- 第一册:lesson sixty one.
- 安装SQL Server For Linux(Install SQL Server)
- “javac”不是内部或外部命令的解决办法(JDK1.5 ~ JDK10)
- Redis源码笔记-初步
- 《OpenGL® ES™ 3.0 Programming Guide》读书笔记1 ----总览
- mybatis异常:Error instantiating class com.psc.bean.User with invalid types () or values ().
- 树莓派3b添加python时间同步脚本
- git/github 代码托管图文教程
热门文章
- Bag of Tricks for Image Classification with Convolutional Neural Networks
- MongoDB for OPS 02:复制集 RS 配置
- shell 命名管道,进程间通信, ncat作http server
- vue-基本动画
- java基础第十四篇之Map
- PHP代码篇(五)--如何将图片文件上传到另外一台服务上
- 10.JavaCC官方入门指南-例5
- Linux—文件上传和下载
- undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
- Python自动化运维之高级函数