Redis的八种内存淘汰策略及其描述
Redis的八种内存淘汰策略及其描述
- noeviction:当内存使用达到最大限制时,不淘汰任何数据,拒绝写入操作并返回错误,此时Redis只响应读操作(默认策略,≥v3.0)
- allkeys-LRU:从所有键中使用LRU(最近最少使用)算法进行淘汰。适用于热点数据较多的场景,能够保留最近被访问过的数据。
- allkeys-LFU:从所有key中使用LFU(最不经常使用)算法进行淘汰。LFU算法根据键的访问频率来淘汰数据,访问次数最少的键优先被淘汰(≥ v4.0)。
- volatile-LRU:从设置了ttl key中使用LRU算法进行淘汰。这种策略只针对设置了过期时间的键,适用于部分数据有时效性要求的场景。
- volatile-LFU:从设置了ttl key中使用LFU算法进行淘汰。同样只针对设置了过期时间的键,但淘汰依据是访问频率(≥ v4.0)。
- allkeys-random:随机从所有key中淘汰数据。适用于对数据淘汰无特定要求的场景。
- volatile-random:随机从设置了ttl key中淘汰数据。
- volatile-ttl:根据键的剩余过期时间进行淘汰,越早过期的键越先被淘汰。适用于缓存数据时效性要求严格的场景。
🔔 Redis的LRU算法
和传统的LRU算法一样,若redis有key-A,key-B,key-C 3个键,key-A 10min前访问操作过,key-B 5min前访问操作过,key-C 2min前访问操作过,那么因为key-A的空闲时间最久一定是淘汰key-A
🔔 Redis的LFU算法
假设一个场景:1年前设置的key-A到目前访问操作量1200次,10天前设置的key-B,到目前访问操作量700次,按传统LFU算法应淘汰key-B,可key-A 7个月前访问操作就不再增加,而key-B每天均被访问操作,那么淘汰key-B显然是不适用的,于是redis引入了随时间延续递减访问量的机制,若redis设置为1天key没被访问操作便减5次,那么实际key-A值为1200-7×30×5=150,keyB值为700-0×5=700,key-A 150 < key-B700,淘汰key-A。这是redis真正使用的LFU算法。
🔔 Redis random算法
既不以访问次数做评判,也不以最长空闲时间做评判,在key中随机取样
Redis allkeys-LFU,allkeys-LRU,volatile-LRU,volatile-LFU 淘汰策略流程图

本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18322768

浙公网安备 33010602011771号