redis过期键删除策略
2016-05-25 00:38
681 查看
一、过期键删除三种策略简介
1、定时删除策略
在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。
优点:对内存是最友好的,保证过期键会尽可能快地被删除,并释放过期键所占用的内存。
缺点:对cpu时间是最不友好的,过期键比较多的情况下,删除键会占用相当一部分的cpu时间,无疑会对服务器的响应时间和吞吐量造成影响。
2、惰性删除策略
程序只会在取出键时才对键进行过期检查。
优点:对cpu时间来说是最友好的,可以保证过期键的删除操作只会在非做不可的情况下进行,并且删除目标仅限于当前处理的键。
缺点:对内存是最不友好的,如果一个键已经过期,而这个键又仍然保留在数据库中,只要过期键不被删除,占用的内存就不会被释放。
3、定期删除策略
每隔一段时间执行一次删除过期键的操作,通过限制删除操作执行时长和频率来减少删除操作对cpu时间的影响,是对定时删除策略和惰性删除策略的整合和折中。
难点是确定删除操作执行的时长和频率,如果删除太频繁或执行时间过长,就会退化称定时删除策略;如果删除操作执行的太少或者执行时间太短,又会退化为惰性删除策略,出现浪费内存的情况。
二、redis的过期删除策略
使用惰性删除和定期删除两种策略,通过两种策略的配合,可以很好地在合理使用cpu时间和避免浪费内存之间取得平衡。
1、惰性删除策略的实现
2、定期删除策略的实现
每当redis服务器的服务器周期性操作serverCron函数执行时,activeExpireCycle函数被调用,分多次遍历服务器
中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键。
activeExpireCycle函数的工作模式:
a、函数每次运行时,都从一定数量的数据库中取出一定数量的随机键进行检查,并删除其中的过期键。
b、全局变量current_db会记录当前activeExpireCycle函数检查的进度,并在下一次activeExpireCycle函数调用时,
接着上一次的进度进行处理。
c、随着activeExpireCycle函数的不断执行,服务器中的所有数据库都会被检查一遍,这时函数将current_db变量
重置为0,然后再次开始新一轮的检查工作。
1、定时删除策略
在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。
优点:对内存是最友好的,保证过期键会尽可能快地被删除,并释放过期键所占用的内存。
缺点:对cpu时间是最不友好的,过期键比较多的情况下,删除键会占用相当一部分的cpu时间,无疑会对服务器的响应时间和吞吐量造成影响。
2、惰性删除策略
程序只会在取出键时才对键进行过期检查。
优点:对cpu时间来说是最友好的,可以保证过期键的删除操作只会在非做不可的情况下进行,并且删除目标仅限于当前处理的键。
缺点:对内存是最不友好的,如果一个键已经过期,而这个键又仍然保留在数据库中,只要过期键不被删除,占用的内存就不会被释放。
3、定期删除策略
每隔一段时间执行一次删除过期键的操作,通过限制删除操作执行时长和频率来减少删除操作对cpu时间的影响,是对定时删除策略和惰性删除策略的整合和折中。
难点是确定删除操作执行的时长和频率,如果删除太频繁或执行时间过长,就会退化称定时删除策略;如果删除操作执行的太少或者执行时间太短,又会退化为惰性删除策略,出现浪费内存的情况。
二、redis的过期删除策略
使用惰性删除和定期删除两种策略,通过两种策略的配合,可以很好地在合理使用cpu时间和避免浪费内存之间取得平衡。
1、惰性删除策略的实现
2、定期删除策略的实现
每当redis服务器的服务器周期性操作serverCron函数执行时,activeExpireCycle函数被调用,分多次遍历服务器
中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键。
activeExpireCycle函数的工作模式:
a、函数每次运行时,都从一定数量的数据库中取出一定数量的随机键进行检查,并删除其中的过期键。
b、全局变量current_db会记录当前activeExpireCycle函数检查的进度,并在下一次activeExpireCycle函数调用时,
接着上一次的进度进行处理。
c、随着activeExpireCycle函数的不断执行,服务器中的所有数据库都会被检查一遍,这时函数将current_db变量
重置为0,然后再次开始新一轮的检查工作。
相关文章推荐
- redis命令中文手册
- the little redis ch2
- 使用Spring Data Redis操作Redis(一) 很全面
- Linux 系列(四)——Redis 集群运维及java整合
- Redis安装整理(windows) +php扩展redis
- Linux下redis的安装
- Linux 系列(三)——Redis 分布式集群搭建
- 工具类系列-StringSimpleRedisUtil
- TCMalloc优化MySQL、Nginx、Redis内存管理
- Redis系列学习笔记21 集群
- redis学习教程地址
- nginx-tomcat负载均衡redis-session共享,静态资源分离
- 利用redis + lua解决抢红包高并发的问题
- redis常见 错误和处理办法
- redis如何清除所有的key
- ubuntu+php5.6+redis+mysql5.5+nginx
- Redis 有序集合(sorted set)
- 《Redis设计与实现》资源总结
- salt-stack安装redis
- CentOS6.5安装Redis2.8.19 和php redis扩展