Caffeine是否为分布式缓存

Caffeine是否为分布式缓存

目录

结论先说

一、核心区分定义

1. 本地缓存(进程内缓存)

2. 分布式缓存

二、Caffeine 详细特点(本地缓存典型)

三、分布式缓存 Redis 对比

四、常见组合:多级缓存(Caffeine + Redis)

五、快速记忆区分表

补充拓展


结论先说

Caffeine、Guava Cache、ConcurrentHashMap 都属于本地缓存,不是分布式缓存,二者完全两类。

一、核心区分定义

1. 本地缓存(进程内缓存)

代表:Caffeine、Guava Cache、HashMap

  • 数据存在当前应用进程内存里,只对这一台服务实例可见
  • 每台服务器缓存互相隔离,互不共享
  • 不跨机器、不跨进程,无网络开销

2. 分布式缓存

代表:Redis、Memcached、Tair、Redisson

  • 独立中间件服务,所有应用实例共享同一套缓存数据
  • 应用通过网络 TCP 读写缓存,多机器数据统一
  • 天然解决集群多实例数据一致性问题

二、Caffeine 详细特点(本地缓存典型)

  1. 存储位置JVM 堆内存,当前 SpringBoot/Java 进程私有,另一台服务器看不到这份缓存。
  2. 无网络 IO读写纯内存操作,性能远高于 Redis,微秒级。
  3. 集群下数据割裂问题服务部署多实例(集群)时:
    • A 实例更新 Caffeine,B 实例缓存还是旧数据 会出现数据不一致,这是本地缓存最大短板。
  4. 容量限制受 JVM 堆内存大小制约,不能存超大热数据。
  5. 无持久化(默认)进程重启缓存全部丢失。

三、分布式缓存 Redis 对比

  1. 独立服务,所有节点共用一份数据;
  2. 存在网络往返,性能比 Caffeine 差一个量级;
  3. 支持持久化、集群、过期淘汰、分布式锁;
  4. 天然适配多实例集群场景。

四、常见组合:多级缓存(Caffeine + Redis)

生产标准架构:

  1. 先查Caffeine(本地一级缓存),命中直接返回,无网络;
  2. 本地未命中,再查Redis(分布式二级缓存)
  3. Redis 也无则查数据库,回填两级缓存。

五、快速记忆区分表

特性Caffeine(本地缓存)Redis(分布式缓存)
数据存放应用 JVM 内存独立缓存服务进程
多服务实例是否共享不共享,互相隔离全局共享
是否跨机器访问是,走网络
读写性能极高(内存无网络)中等(有网络开销)
集群数据一致性差,会脏读统一一致
分布式锁 / 限流能力不支持原生支持

补充拓展

有些框架会混淆概念:

  • Spring Cache 只是缓存抽象,底层可以切换 Caffeine(本地)或 Redis(分布式);
  • Caffeine 本身永远是本地缓存,不会因为套了 Spring Cache 就变成分布式。