- 首页 >
- 问答 >
-
云计算 >
- centos redis配置中的数据淘汰策略怎么选
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 1gb、config set maxmemory-policy allkeys-lru
- 持久到配置文件:
config rewrite
- 重启与验证:
- 重启:
systemctl restart redis
- 验证:
redis-cli info memory,检查 maxmemory 与 maxmemory_policy 是否与设定一致。
四、关键注意事项
- 一定要设置 maxmemory,否则 maxmemory-policy 不生效;maxmemory=0 表示不限制内存(不建议生产使用)。
- 有从节点时,淘汰触发的删除会同步到从节点,可能造成写放大;需评估复制与回收压力。
- 频繁回收会带来查找与删除开销;建议结合监控(如
info memory 的命中/未命中)与业务容忍度做灰度与压测。
- 若启用 RDB 快照,为避免 fork 与写时复制导致的内存峰值,可将 maxmemory 设为系统可用内存的约 45%;未启用快照时可更高(如 ~95%),但需充分压测并留足余量。