登录

redis 的过期删除和淘汰机制

php
0 1521
1)定时删除

通过定时器在过期的时候立即删除

内存释放及时但是消耗更多的CPU,大并发的时候需要消耗CPU资源影响处理请求的速度

内存友好,CPU不友好

2)惰性删除

放任键过期不管,到下次需要去取出的时候检查是否过期并删除

可能存在大量过期键,且不会使用,导致内存溢出

内存不友好,CPU友好

3)定期删除

每隔一段时间检查,删除过期的键

删除多少和检查多少有算法决定

2、redis采用的 惰性删除 + 定期删除

周期性随机测试一些设置了过期时间的键进行检查,到期则删除

每次清理的时间不超过CPU的25%,达到时间则退出检查

定期没有删除到的键,且以后不会使用的键还是会存在内存中,所以需要配合淘汰策略

3、淘汰策略(内存不足以写入新数据的时候执行)

volatile-lru :设置了过期时间且最近使用越少越优先淘汰

volatile-ttl :设置了过期时间且过期时间越早越优先淘汰

volatile-random :设置了过期时间中随机删除

allkeys-lru :所有键中过期时间越早越优先淘汰

allkeys-random :所有键中过期随机淘汰

no-enviction :不允许淘汰,内存不足报错


发表评论

0 个回复