Redis内存淘汰策略
Contents
Redis内存淘汰策略
在 Redis 中 过期策略 和 内存淘汰策略 是两个完全不同的概念。Redis 过期策略指的是 Redis 使用那种策略,来删除已经过期的键值对;而内存淘汰机制指的是当 Redis 运行内存已经超过设置的最大内存之后,将采用什么策略来删除符合条件的键值对,以此来保障 Redis 高效的运行。
查询最大运行内存
|
|
0表示不限制内存使用。
内存淘汰策略
|
|
使用的是 noeviction 类型的内存淘汰机制
内存淘汰策略分类:
-
noeviction:不淘汰任何数据,当内存不足时,新增操作会报错,Redis 默认内存淘汰策略;
-
allkeys-lru:淘汰整个键值中最久未使用的键值;
-
allkeys-random:随机淘汰任意键值;
-
volatile-lru:淘汰所有设置了过期时间的键值中最久未使用的键值;
-
volatile-random:随机淘汰设置了过期时间的任意键值;
-
volatile-ttl:优先淘汰更早过期的键值。
-
volatile-lfu:淘汰所有设置了过期时间的键值中,最少使用的键值;
-
allkeys-lfu:淘汰整个键值中最少使用的键值。
修改内存淘汰策略
-
在启动的配置文件中设置,“maxmemory-policy 策略”,设置后启动生效。
-
在运行中设置,通过
config set maxmemory-policy <策略>
命令设置
内存淘汰算法
主要有两种淘汰算法:LRU 算法和 LFU 算法。
LRU 算法
LRU 全称是 Least Recently Used 译为最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。
LRU 算法基于链表结构实现,链表中的元素按照操作顺序从前往后排列,最新操作的键会被移动到表头,当需要内存淘汰时,只需要删除链表尾部的元素即可。
LFU 算法
LFU 全称是 Least Frequently Used 翻译为最不常用的,最不常用的算法是根据总访问次数来淘汰数据的,它的核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。
LRU 算法有一个缺点,比如说很久没有使用的一个键值,如果最近被访问了一次,那么它就不会被淘汰,即使它是使用次数最少的缓存,那它也不会被淘汰,这种情况就可以用LFU算法来优化。