Redis内存淘汰策略

346 阅读1分钟

概念:当redis的内存超过最大的允许内存时,redis会触发内存淘汰策略,这种是非正常情况下为了保证redis正常允许的一种保护策略;redis内存不够时,redis服务器会根据服务器设置的淘汰策略删除一些不常用的数据,以保证redis的正常运行。查询当前redis服务使用的内存淘汰策略命令如下:

config get maxmemory-policy

阿里云的查看如下图-适合没有执行命令权限的开发人员查看

image.png

内存淘汰策略的种类如下

  • no eviction 不淘汰任何数据,当内存不足时,新增缓存会报错。
  • allkey-lru 淘汰整个键值中最久未使用的键值。
  • allkey-random 随机淘汰任意键。
  • volatile-lru 淘汰所有设置过期时间的键值中最久未使用的键值,是redis默认的内存淘汰策略。
  • volatile-random 随机淘汰设置过期时间的任意键值
  • volatile-ttl 优先淘汰更早过期的键值

redis4.0版本之后新增了以下两种策略

  • volatile-lfu - 淘汰所有设置了过期时间的键值中最少使用的键值
  • allkeys-lfu - 淘汰整个键值中最少使用的键值

内存淘汰算法有如下两种

  • LRU淘汰算法 - Least Recently Used 淘汰最久没有使用的键值 基于链表实现:链表中的元素按照操作顺序从链表头往链表尾排,最新的操作都会放到表头,当redis就进行这种算法的内存淘汰时,只需要删除表尾的元素即可。
  • LFU淘汰算法 - Least Frequently used 淘汰最少使用的键值

参考资料

1.docs.redis.com/latest/rc/d…