redis 数据删除策略

        Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态,Redis 的数据删除策略,就是在内存和CPU中找一个平衡点,避免redis性能下降,甚至服务器宕机或者内存泄漏。

Redis 的数据删除策略有以下三种:

1、定时删除:创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作。

        优点:节约内存,到时间就删除,快速释放掉不必要的内存占用

        缺点:CPU压力大,无论CPU此时负载量多高,均占用CPU,会影响redis服务器响应时间和指令吞吐量

2、定期删除:redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。

Redis启动服务器初始化时,读取配置server.hz的值,默认为10

每秒钟执行server.hz次

activeExpireCycle()对每个expires[*]逐一进行检测,每次执行250ms/server.hz

对某个expires[*]检测时,随机挑选W个key检测

​ 如果key超时,删除key

​ 如果一轮中删除的key的数量>W*25%,循环该过程

​ 如果一轮中删除的key的数量≤W25%,检查下一个expires[*],0-15循环

​ W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值

参数current_db用于记录activeExpireCycle() 进入哪个expires[*] 执行

如果activeExpireCycle()执行时间到期,下次从current_db继续向下执行

周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度

        优点:① CPU性能占用设置有峰值,检测频度可自定义设置

                   ② 内存压力不是很大,长期占用内存的冷数据会被持续清理

 3、惰性删除:定期删除可能会导致很多过期key到了时间并没有被删除掉,因此就有了惰性删除。加入过期key,靠定期删除没有被删除,还停留再内存里,除非系统去查一下那个key,才会被redis删除掉。这就是惰性删除。expirelfNeeded()检查数据是否执行 get 的时候调用。

        优点:节约CPU性能,发现必须删除的时候才删除

        缺点:内存压力大,出现长期占用内存的数据

总结

定时删除节约内存,无占用 部分时段占用CPU资源,频度高

拿时间换空间

定期删除内存定期随机清理每秒花费固定的CPU资源维护内存随机抽查,重点抽查
惰性删除内存占用严重延时执行,CPU利用效率高拿空间换时间

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值