温馨提示×

centos redis配置中的数据淘汰策略怎么选

小樊
42
2025-11-29 17:58:54
栏目: 云计算

Redis 数据淘汰策略选择指南(CentOS)

一、策略速览与默认行为

  • 可选策略共 8 种noeviction、allkeys-lru、allkeys-lfu、allkeys-random、volatile-lru、volatile-lfu、volatile-random、volatile-ttl。含义要点:
    • noeviction:内存满时拒绝写入,只响应读/删;默认策略。
    • allkeys-*:面向所有 key 进行淘汰(无论是否设置 TTL)。
    • volatile-*:仅面向设置了 TTL 的 key 进行淘汰。
    • LRU(最近最少使用)与 LFU(最不经常使用):LRU 偏向“最近访问时间”,LFU 偏向“历史访问频次”,LFU 更能抵御偶发热点干扰。
  • 版本提示:LFU 系策略需 Redis 4.0+

二、如何选择策略

  • 作为纯缓存(绝大多数场景):优先选 allkeys-lru(热点数据更可能保留);若访问分布近似均匀,可选 allkeys-random;若希望按访问频次更精确保留热点,选 allkeys-lfu(Redis≥4.0)
  • 半缓存半持久化(少数 key 需要长期保存):选 volatile-lru/volatile-lfu,并确保需要长期保留的数据不要设置 TTL;更推荐的做法是拆分为“缓存实例 + 持久化实例”。
  • 大部分 key 已设置 TTL,且希望优先清理“即将过期”的数据:选 volatile-ttl
  • 明确不允许淘汰(宁愿写入报错):选 noeviction(需确保监控与降级,避免 OOM)。

三、在 CentOS 上的配置步骤

  • 编辑配置文件:通常位于 /etc/redis/redis.conf
    • 设置最大内存(示例为 1GB):maxmemory 1gb
    • 设置淘汰策略(示例为 allkeys-lru):maxmemory-policy allkeys-lru
  • 动态生效与持久化:
    • 动态设置:config set maxmemory 1gbconfig set maxmemory-policy allkeys-lru
    • 持久到配置文件:config rewrite
  • 重启与验证:
    • 重启:systemctl restart redis
    • 验证:redis-cli info memory,检查 maxmemorymaxmemory_policy 是否与设定一致。

四、关键注意事项

  • 一定要设置 maxmemory,否则 maxmemory-policy 不生效;maxmemory=0 表示不限制内存(不建议生产使用)。
  • 有从节点时,淘汰触发的删除会同步到从节点,可能造成写放大;需评估复制与回收压力。
  • 频繁回收会带来查找与删除开销;建议结合监控(如 info memory 的命中/未命中)与业务容忍度做灰度与压测。
  • 若启用 RDB 快照,为避免 fork 与写时复制导致的内存峰值,可将 maxmemory 设为系统可用内存的约 45%;未启用快照时可更高(如 ~95%),但需充分压测并留足余量。

0