标准答案

  1. 先给缓存设置明确的 maxmemory 和监控阈值,避免操作系统 OOM 或与其他进程争抢内存后出现不可预测的崩溃。
  2. allkeys-lru、allkeys-lfu 等策略在所有 Key 中选择较少使用的数据;volatile 类策略只在设置 TTL 的 Key 中淘汰,前提是业务确实给可淘汰数据设置了过期时间。
  3. 策略选择应看访问分布:热点稳定时 LFU 往往保留热点更好,近期访问更重要时 LRU 更合适;不能只根据名字猜命中率。
  4. 被淘汰会造成缓存未命中而非数据丢失。若回源成本高,应通过容量规划、Key 拆分、预热和降级保护数据库,而不是让写路径依赖缓存永不淘汰。

题目解析

命中率只是结果指标。内存临界时还要看淘汰速率、回源 QPS、P99、CPU 和热点 Key 是否集中,否则可能出现命中率看似正常但单个库被打满的情况。

可删除与可失效是两回事。某些临时锁、会话或队列状态被淘汰会改变业务行为,需要独立容量、持久化或重新计算规则。

常见误区

  • 把缓存淘汰当作数据库数据丢失,或反过来把关键状态放进可随时淘汰的缓存。
  • 只增大 maxmemory,不评估碎片率、容器限制和节点故障后的容量余量。

作者信息