标准答案

  1. 本地缓存适合极热点、体积小、可短暂陈旧的数据,访问无需网络;分布式缓存适合多实例共享和较大的缓存容量。
  2. 通常读取顺序是本地缓存、分布式缓存、数据库,回填时本地 TTL 应比共享缓存更短或受版本控制,避免实例长期保留旧值。
  3. 数据库更新后可删除共享缓存并发布失效事件,让各实例删除本地副本;失效消息需要允许重复和丢失后的 TTL 兜底,不能假定所有实例都会实时收到。
  4. 对热点数据要防止每个实例同时回源,可在共享层做请求合并或互斥刷新,并限制本地缓存的容量和淘汰策略。

题目解析

两级缓存并不是自动更快。实例数量增加后,失效广播、版本同步和冷热不均都会增加复杂度;只有网络往返确实是瓶颈且数据允许短时陈旧时才值得引入。

强一致读取可以绕过本地缓存,或携带最小版本号检查。用很长的本地 TTL 掩盖共享缓存压力,常会把一致性问题推给用户。

常见误区

  • 本地缓存和 Redis 使用相同长 TTL,却没有任何失效通知。
  • 把 Pub/Sub 当可靠消息队列,断线实例永远收不到失效事件。

作者信息