文章目录
redis 回收策略
当内存使用达到了设置的maxmemory 会触发回收策略
lru
最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的
volatile-lru
尝试回收最长时间未被使用(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
allkeys-lru
尝试回收最长时间未被使用(LRU),作用范围是所有的key。
lfu
最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的!
volatile-lfu
尝试回收一定时间内使用次数最少(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
allkeys-lfu
尝试回收一定时间内使用次数最少(LRU),作用范围是所有的key。
其他
volatile-random
从已过期的数据中随机删除
allkeys-random
从所有数据中随机删除
volatile-ttl
从已设置过期时间的数据集中任意挑选数据淘汰
noeviction
不回收
在redis配置文件中配置策略
maxmemory-policy noeviction #配置策略
maxmemory <bytes> #配置内存大小 阈值
主动回收
当一些客户端尝试访问它时,key会被发现并主动的过期
被动回收
Redis keys过期有两种方式:被动和主动方式。
当一些客户端尝试访问它时,key会被发现并主动的过期。
当然,这样是不够的,因为有些过期的keys,永远不会访问他们。 无论如何,这些keys应该过期,所以定时随机测试设置keys的过期时间。所有这些过期的keys将会从密钥空间删除。
具体就是Redis每秒10次做的事情:
测试随机的20个keys进行相关过期检测。
删除所有已经过期的keys。
如果有多于25%的keys过期,重复步奏1.
这是一个平凡的概率算法,基本上的假设是,我们的样本是这个密钥控件,并且我们不断重复过期检测,直到过期的keys的百分百低于25%,这意味着,在任何给定的时刻,最多会清除1/4的过期keys