Redis 的 maxmemory-policy
用于配置当内存达到 maxmemory
限制时,Redis 选择淘汰哪些键以释放内存。除了 allkeys-lru
,Redis 还支持多种内存淘汰策略,具体如下:
1. noeviction
作用:当内存不足时,新写入操作会返回错误(如
OOM command not allowed when used memory > 'maxmemory'
),不淘汰任何键。适用场景:数据不允许丢失的场景(如持久化存储的核心数据)。
注意:这是 Redis 的默认策略。
2. volatile-lru
作用:对设置了过期时间(TTL)的键,使用 LRU 算法(Least Recently Used,最近最少使用)淘汰最近最少访问的键。
适用场景:部分数据允许淘汰(如缓存),但需要优先保留热点数据。
3. allkeys-lru
作用:对所有键(无论是否设置过期时间)使用 LRU 算法淘汰最近最少访问的键。
适用场景:所有数据均可淘汰,希望基于访问频率保留热点数据(如纯缓存场景)。
4. volatile-lfu
(Redis 4.0+)
作用:对设置了过期时间的键,使用 LFU 算法(Least Frequently Used,最不经常使用)淘汰访问频率最低的键。
适用场景:需要更精准识别冷门数据,避免偶发访问影响淘汰结果。
5. allkeys-lfu
(Redis 4.0+)
作用:对所有键使用 LFU 算法淘汰访问频率最低的键。
适用场景:所有数据均可淘汰,且希望基于访问频率优化淘汰策略。
6. volatile-ttl
作用:对设置了过期时间的键,优先淘汰剩余生存时间(TTL)最短的键。
适用场景:需要优先淘汰即将过期的键(如短期缓存)。
7. volatile-random
作用:从设置了过期时间的键中随机选择淘汰。
适用场景:对淘汰精度要求不高,但需要快速决策。
8. allkeys-random
作用:从所有键中随机选择淘汰。
适用场景:所有数据均可淘汰,且对淘汰策略无特殊要求。
如何选择策略?
数据是否允许淘汰:
若所有数据都可淘汰,优先选择
allkeys-*
策略。若部分数据重要不可淘汰,选择
volatile-*
策略,并为可淘汰数据设置 TTL。数据访问模式:
有明显热点数据:
allkeys-lru
或allkeys-lfu
。需要精准淘汰冷门数据:
allkeys-lfu
或volatile-lfu
。数据短期有效:
volatile-ttl
。版本兼容性:
LFU 策略(
volatile-lfu
/allkeys-lfu
)需 Redis 4.0+。
配置示例
解释# 在 redis.conf 中设置(或通过 CONFIG SET 命令动态调整)maxmemory 2gb maxmemory-policy a
根据业务需求选择合适策略,可显著优化 Redis 的内存效率和性能。
以上内容仅代表作者观点,甚至可能并非原创,如遇未经考证信息需持审慎态度。若有疑问,可联系本站处理。