先决定什么可以消失
淘汰策略就是数据丢失策略。缓存响应、渲染片段和限流计数器可以重建;队列、锁和会话记录可能不行。把两者放在同一实例会迫使它们共享一种策略。应使用独立实例或至少独立数据库并记录归属,然后为每个实例设置 maxmemory。
redis-cli CONFIG SET maxmemory 512mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli INFO memory
allkeys-lru 为腾出空间会淘汰任意键;volatile-lru 只淘汰带 TTL 的键;noeviction 在内存满时返回错误,对持久数据更安全,但会把内存问题变成写失败。要有意识地选择并记录决策。
留出余量
上限应低于容器或主机限制,使碎片、复制缓冲和客户端连接不会触发 OOM killer。监控 used_memory、mem_fragmentation_ratio 和 evicted_keys。淘汰量突增说明缓存容量不足或负载变化。碎片率持续上升可能需要重启或更换分配器,而不是单纯调大上限。
让淘汰可见
缓存实例淘汰超过阈值时告警,持久实例写失败时也告警。启动时记录策略和上限,使环境漂移可见。通过填满非生产实例测试行为;确认缓存键会被淘汰,持久键要么保留,要么产生预期错误。只写在文档里、从未演练的策略只是猜测。