首页/数据/Redis 进阶速查/淘汰策略怎么选
内存与管理99 条

淘汰策略怎么选

纯缓存实例用 allkeys-lru 或 allkeys-lfu;带持久数据与缓存混部用 volatile 系并确保缓存键都有 TTL;不允许丢数据的实例用 noeviction 并配套告警。

Redis 进阶速查数据更新于 2026-10-13

淘汰策略怎么挑

淘汰策略决定内存达到上限时删谁、以及允不允许删。纯缓存实例用 allkeys 系最直接,LRU 与 LFU 二选一即可;缓存与持久数据混部时用 volatile 系,前提是缓存键必须都带过期时间;不允许丢数据的实例用不淘汰策略并配套容量告警,把溢出变成明确的写入报错,而不是悄悄丢数据。

基本信息

纯缓存allkeys 系,全部键都可能被淘汰
混部场景volatile 系,仅淘汰带过期时间的键
不允许淘汰不淘汰策略,内存满时写命令直接报错
选择依据键是否都带过期时间、数据能否重建
验证方式结合键数量与淘汰计数观察实际效果

典型使用场景

  • 新建缓存实例时确定淘汰策略作为容量保护的兜底
  • 缓存与业务数据混部在同一实例,需要防止业务数据被淘汰
  • 热点集中且访问频次分化明显,用 LFU 提升命中率
  • 核心账务类数据不允许丢失,用不淘汰策略加告警
  • 排查集中淘汰把业务数据删掉的问题,回到策略选择本身

查看与设置

查看与设置
redis-cli CONFIG GET maxmemory-policy maxmemory
redis-cli CONFIG SET maxmemory-policy allkeys-lfu      # 纯缓存,热点集中
redis-cli CONFIG SET maxmemory-policy noeviction       # 不允许丢数据,改为报错
redis-cli INFO stats | grep -E 'evicted_keys|expired_keys'   # 观察实际淘汰活动
redis-cli CONFIG REWRITE

策略速查

策略淘汰范围适用场景
allkeys-lru全部键,按最近使用通用缓存,实现简单效果稳定
allkeys-lfu全部键,按访问频率热点集中、频次分化明显的缓存
volatile-lru 等仅带过期时间的键缓存与持久数据混部
noeviction不淘汰,写请求报错不允许丢数据的核心数据
热点集中且访问频次差异明显时 LFU 的命中率通常更好,其余场景 LRU 已经足够稳,切换前最好用真实流量验证。
选择混部策略的前提是缓存键全部带过期时间:一旦有缓存键忘了设过期时间,它就不会被淘汰,内存仍会被占满。

易错点

  • 混部实例使用 allkeys 系策略,业务数据与缓存一起被淘汰,出现难以复现的数据丢失
  • 缓存键忘记设置过期时间,volatile 系策略无键可淘汰,内存满后写入全部报错
  • 用不淘汰策略却没有任何容量告警,内存打满后业务表现为大量写失败
  • 切换策略前不评估当前键分布,切换瞬间触发大批淘汰,业务命中率骤降

数据来源与参考

  • Redis 官方文档:淘汰策略选择建议
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌