一、 数据淘汰策略
redis.conf 中 展示如下
config
# The default is:
# maxmemory-policy noeviction
数据的淘汰策略
: 当Redis中的内存不够用
时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉
,这种数据的删除规则被称之为内存的淘汰策略
。Redis支持
8种
不同策略来选择要删除的key
:noeviction
: 不淘汰任何key,但是内存满时不允许写入新数据
,默认就是这种策略
。volatile-ttl
: 对设置了TTL的key
,比较key的剩余TTL值
,TTL越小越先被淘汰
。allkeys-random
: 对全体key
,随机进行淘汰
。volatile-random
: 对设置了TTL的key
,随机进行淘汰
。allkeys-lru
: 对全体key
,基于LRU算法进行淘汰
。volatile-lru
: 对设置了TTL的key
,基于LRU算法进行淘汰
。allkeys-lfu
: 对全体key
,基于LFU算法进行淘汰
。volatile-lfu
: 对设置了TTL的key
,基于LFU算法进行淘汰
。
allkeys/volatile-lru (访问时间) 策略
例如: key1是在
3s
之前访问的, key2是在9s
之前访问的,删除的就是key2
LRU(Least Recently Used)
:最近最少
使用,用当前时间
减去最后一次访问时间
,这个值越大
则淘汰优先级越高
allkeys/volatile-lfu (访问频率) 策略
例如: key1最近5s访问了
4次
, key2最近5s访问了9次
,删除的就是key1
LFU(Least Frequently Used)
:最少频率
使用。会统计每个key自访问频率
,值越小
则淘汰优先级越高
。
二、不同场景的使用
- 使用
allkeys-lru
策略
- 使用
allkeys-random
策略: 随机选择淘汰。
- 可以使用
volatile-lru
策略, 同时置顶数据不设置过期时间
,这些数据就一直不被删除, 会淘汰其他设置过期时间的数据。
- 可以使用
allkeys-lfu
或volatile-lfu
策略