目录
- Redis 内存管理(淘汰策略/删除策略)
- 一、淘汰算法
- 二、Redis 8种淘汰策略
- 三、删除策略
Redis 内存管理(淘汰策略/删除策略)
一、淘汰算法
1、LRU算法
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
时间T:数据自上一次到现在的时间.
2、LFU算法
说明:LFU算法是redis5以后才提出的.
LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。
使用次数越少越先被删除.
二、Redis 8种淘汰策略
- volatile-lru: 将设定了超时时间的数据,采用LRU算法将数据提前删除.
- allkeys-lru -> 对所有的数据采用LRU算法进行删除
- volatile-lfu -> 设定超时时间的数据采用LFU算法删除
- allkeys-lfu -> 对所有数据采用LFU算法删除
- volatile-random 设定了超时时间的数据随机删除
- allkeys-random 所有数据随机删除
- volatile-ttl 设定了超时时间的数据根据剩余时间少的删除数据
- noeviction 不删除内存数据,如果内存溢出报错返回.
修改redis配置文件600行.
# The default is:
# maxmemory-policy volatile-lru
三、删除策略
-
定时删除
- 创建一个定时器,定时的执行对key的删除操作
- 优点:CPU来说并不是友好的
- 缺点:程序需要维护一个定时器,这就会占用 CPU的资源
-
惰性删除
- 每次只有再次访问 key 的时候,才会检查 key 的过期时间,若是已经过期了就执行删除
- 优点:CPU来说是友好的
- 缺点:内存来说是不友好的
-
定期删除
- 每隔一段时间,就会检查删除掉过期的 key
- 定期删除是上述两种方案的折中方案,每隔一段时间删除过期的 key,也就是根据具体的业务,合理的取一个时间定期的删除 key