Redis缓存淘汰策略
以下配置均为合法:
maxmemory 1000KB
maxmemory 100MB
maxmemory 1GB
maxmemory 0 # 表示不做限制,一般不会用
当实际内存超出了 maxmemory 时,redis(5.0.8) 提供了八种淘汰策略(maxmemory-policy)供我们选择。
noeviction
写请求会报错 (DEL 请求可以继续服务),读请求可以继续进行。这样可以保证不会丢失数据,但是会让线上的业务不能持续进行。这是默认的淘汰策略。
volatile-lru
淘汰范围:设置了过期时间的 key。(没有设置过期时间的 key 不会被淘汰,这样可以保证需要持久化的数据库不会突然丢失)
淘汰策略:优先删除最近最少使用的 key。(LRU算法实现:Least recently used,最近最少使用。)
volatile-lfu
淘汰范围:设置了过期时间的 key。
淘汰策略:优先删除使用频率最少的 key。(LFU算法实现:Least frequently used,最不经常使用。)
volatile-ttl
淘汰范围:设置了过期时间的 key。
淘汰策略:优先删除剩余时间(ttl,time to live)短的 key。
volatile-random
淘汰范围:设置了过期时间的 key。
淘汰策略:随机删除淘汰范围内的 key。
allkeys-lru
淘汰范围:全体 key。
淘汰策略:优先删除最近最少使用的 key。(LRU算法实现:Least recently used,最近最少使用。)
allkeys-lfu
淘汰范围:全体 key。
淘汰策略:优先删除使用频率最少的 key。(LFU算法实现:Least frequently used,最不经常使用。)
allkeys-random
淘汰范围:全体 key。
淘汰策略:随机删除淘汰范围内的 key。
关于用哪个?
LRU算法淘汰的是最近最少使用的;
LFU算法淘汰的是一直以来使用频率最少的。
还是得结合业务场景去考虑。
一般还是volatile-lru
会偏多一点吧。
具体配置:
maxmemory-policy volatile-lru