首页主机资讯Redis数据淘汰机制是什么

Redis数据淘汰机制是什么

时间2025-12-05 02:52:03发布访客分类主机资讯浏览905
导读:Redis 数据淘汰机制概览 当 Redis 使用内存达到配置的 maxmemory 上限时,会根据 maxmemory-policy 执行淘汰,以腾出空间给新写入。该机制用于缓存场景在内存紧张时自动取舍数据,避免进程因 OOM 而异常。R...

Redis 数据淘汰机制概览 当 Redis 使用内存达到配置的 maxmemory 上限时,会根据 maxmemory-policy 执行淘汰,以腾出空间给新写入。该机制用于缓存场景在内存紧张时自动取舍数据,避免进程因 OOM 而异常。Redis 提供 8 种策略,核心权衡维度是:淘汰范围(仅限设置了 TTL 的键,还是全量键)与淘汰依据(LRULFU、随机、TTL 剩余最短)。

策略一览

策略 淘汰范围 依据 典型场景
noeviction 不淘汰,直接拒绝写入 数据不可丢、可接受写入失败
allkeys-lru 全量键 最近最少使用 访问呈幂律分布、希望保留热点
allkeys-lfu 全量键 最不常用(访问频次) 访问频次差异明显
volatile-lru 仅设 TTL 的键 最近最少使用 明确哪些数据可被淘汰
volatile-lfu 仅设 TTL 的键 最不常用 TTL 数据且关注访问频次
allkeys-random 全量键 随机 访问分布均匀、实现简单
volatile-random 仅设 TTL 的键 随机 TTL 数据且不在意命中分布
volatile-ttl 仅设 TTL 的键 剩余 TTL 最短 希望尽快释放即将过期的数据
说明:volatile-* 策略仅在存在可淘汰键时生效;若没有可淘汰键,行为等同于 noeviction

触发时机与执行流程

  • 每次执行命令前,Redis 会检查是否超过 maxmemory;若超过,则调用 freeMemoryIfNeeded 尝试释放内存(先尝试回收过期键,再按策略淘汰)。
  • 若策略为 noeviction 或没有可淘汰键,写入命令将被拒绝并返回 OOM command not allowed when used memory 错误。
  • 淘汰只影响内存占用,不会主动触发持久化;但被淘汰键的删除会按持久化配置(如 AOF)记录并传播到从节点。

如何选择策略

  • 大多数缓存场景优先用 allkeys-lru(热点数据更可能保留)。
  • 访问频次差异显著时用 allkeys-lfu
  • 数据天然具备 TTL 且希望由 Redis 自动清理时,用 volatile-lru / volatile-lfu / volatile-ttl;若没有设置 TTL,这些策略将退化为不淘汰。
  • 访问非常均匀或实现简单优先时,用 allkeys-random / volatile-random
  • 对数据完整性要求极高、宁可写入失败也不淘汰时,用 noeviction
    运行时可结合 INFOkeyspace_hits / keyspace_misses 观察命中率并动态调参。

配置方法与注意事项

  • 配置方式
    • 配置文件:设置
      maxmemory 100mb
      maxmemory-policy allkeys-lru
    • 动态命令:
      CONFIG SET maxmemory 100mb
      CONFIG SET maxmemory-policy allkeys-lru
  • 注意事项
    • 使用 volatile-* 策略前务必为需要可被淘汰的键设置 TTL,否则这些键永远不会被该策略选中。
    • noeviction 下,超过内存上限将返回 OOM 错误,需评估对业务可用性的影响。
    • 淘汰是“尽力而为”的取舍,并非严格意义上的全局最优;结合监控持续调优更可靠。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Redis数据淘汰机制是什么
本文地址: https://pptw.com/jishu/764284.html
Redis Lua脚本怎么用 Redis事务处理如何实现

游客 回复需填写必要信息