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更合理。