Prompts-MCP 686 skills · ai / design / design-pattern / framework / fundamentals / habit / lang / tech-selection /mcp/sse
tech-selection tech-selection/cache/caffeine-vs-redis-vs-memcached.md medium

tech-selection-cache-comparison

Caffeine(本地)/ Redis / Memcached 缓存对比 + 多级缓存(Caffeine L1 微秒级 + Redis L2 分布式一致)组合与失效广播。Use when 选缓存方案 / 对比本地与分布式缓存 / 设计多级缓存时。

缓存选型多级缓存本地缓存caffeineredismemcached
paths
  • *.java
  • *.yml
  • *.xml

缓存 · Caffeine vs Redis vs Memcached

本条管「缓存放哪、要不要多级」。Redis 当主存储而非缓存的边界见 ../database/redis-as-store.md。 延迟为量级参考,落地前按真实负载压测。

对比

维度 Caffeine(本地) Memcached Redis
位置 JVM 进程内,无网络 独立服务 独立服务
延迟 纳秒~微秒(最快) 亚毫秒 亚毫秒
数据结构 任意 Java 对象 仅字符串 KV 丰富(Hash/ZSet/Stream/Geo…)
持久化 有(RDB+AOF)
跨节点一致 无(需失效广播) 共享一致 共享一致 + pub/sub

怎么选

场景 选谁
单节点 / 可容忍节点间不一致 / 极致延迟 只用 Caffeine
简单字符串 KV + 纯缓存 + 想多线程吃满核 Memcached(新项目要结构化直接 Redis)
需要分布式一致 + 丰富结构 Redis
既要扛热点又要分布式一致 多级缓存(见下)

多级缓存(Caffeine L1 + Redis L2)

  • L1 Caffeine:进程内微秒级,扛热点 key,挡住大部分请求。
  • L2 Redis:分布式一致兜底,L1 未命中回源到它。
  • 关键:数据更新时需 L2 → L1 失效广播(Redis pub/sub),否则各节点 L1 脏读。
  • Spring 生态常用 Caffeine + Redisson 组合。

反例

  • ❌ 多节点服务只用 Caffeine 又要求强一致 —— 各节点本地副本不同步会脏读。
  • ❌ 新项目要存结构化数据还选 Memcached —— 只有字符串 KV,应直接上 Redis。

自检

  • [ ] 单节点还是多节点?多节点 + 需一致 → 至少 Redis,热点再叠 Caffeine。
  • [ ] 上了多级缓存就配了 L1 失效广播(pub/sub)?
  • [ ] 没为「只存字符串的纯缓存」过度选了重型方案?

相关