Redis 没有设置过期时间的key被redis主动删除了 8种内存淘汰策略及LRU和LFU算法

redis下载:Download | Redis

首先了解什么情况下会发生这种redis主动清理key的动作发生。

Redis中有一个设置maxmemory(最大内存),当已使用内存超出限制时会触发Redis的主动清理策略。

目前版本的Redis有8种内存淘汰策略:

1.volatile-ttl:针对设置了过期时间的数据,根据过期时间的先后顺序,越早过期的越先删除;

2.volatile-random:针对设置了过期时间的数据,在过期的键值对中随机删除;

3.volatile-lru:针对设置了过期时间的数据,根据LRU算法删除;

4.volatile-lfu:针对设置了过期时间的数据,根据LFU算法删除;

5.allkeys-random:针对所有数据,随机删除;

6.allkeys-lru:针对所有数据,根据LRU算法删除;

7.allkeys-lfu:针对所有数据,根据LFU算法删除;

8.noeviction:不删除数据,拒绝所有写入操作,返回客户端错误信息“(error) OOM command not allowed when used memory”,只响应读操作。

总结:1、2、3、4方案针对设置了过期时间的数据,5、6、7方案针对所有数据,8方案不处理内存。

LRU和LFU算法:

LRU:Least Recently Used 最近最少算法,淘汰很久未访问的数据,根据最近一次访问时间作为参考。

LFU:Least Frequently Used 最不经常使用算法,淘汰最近一段时间访问最少的数据,以访问次数作为依据。

LRU和LFU运用在不同的使用场景下,通常采用LRU,但形似热点新闻,热卖单品这种数据则采用LFU更合理。

你可能感兴趣的:(Redis,redis)