Caffeine是否为分布式缓存
目录
结论先说
一、核心区分定义
1. 本地缓存(进程内缓存)
2. 分布式缓存
二、Caffeine 详细特点(本地缓存典型)
三、分布式缓存 Redis 对比
四、常见组合:多级缓存(Caffeine + Redis)
五、快速记忆区分表
补充拓展
结论先说
Caffeine、Guava Cache、ConcurrentHashMap 都属于本地缓存,不是分布式缓存,二者完全两类。
一、核心区分定义
1. 本地缓存(进程内缓存)
代表:Caffeine、Guava Cache、HashMap
- 数据存在当前应用进程内存里,只对这一台服务实例可见
- 每台服务器缓存互相隔离,互不共享
- 不跨机器、不跨进程,无网络开销
2. 分布式缓存
代表:Redis、Memcached、Tair、Redisson
- 独立中间件服务,所有应用实例共享同一套缓存数据
- 应用通过网络 TCP 读写缓存,多机器数据统一
- 天然解决集群多实例数据一致性问题
二、Caffeine 详细特点(本地缓存典型)
- 存储位置JVM 堆内存,当前 SpringBoot/Java 进程私有,另一台服务器看不到这份缓存。
- 无网络 IO读写纯内存操作,性能远高于 Redis,微秒级。
- 集群下数据割裂问题服务部署多实例(集群)时:
- A 实例更新 Caffeine,B 实例缓存还是旧数据 会出现数据不一致,这是本地缓存最大短板。
- 容量限制受 JVM 堆内存大小制约,不能存超大热数据。
- 无持久化(默认)进程重启缓存全部丢失。
三、分布式缓存 Redis 对比
- 独立服务,所有节点共用一份数据;
- 存在网络往返,性能比 Caffeine 差一个量级;
- 支持持久化、集群、过期淘汰、分布式锁;
- 天然适配多实例集群场景。
四、常见组合:多级缓存(Caffeine + Redis)
生产标准架构:
- 先查Caffeine(本地一级缓存),命中直接返回,无网络;
- 本地未命中,再查Redis(分布式二级缓存);
- Redis 也无则查数据库,回填两级缓存。
五、快速记忆区分表
| 特性 | Caffeine(本地缓存) | Redis(分布式缓存) |
|---|---|---|
| 数据存放 | 应用 JVM 内存 | 独立缓存服务进程 |
| 多服务实例是否共享 | 不共享,互相隔离 | 全局共享 |
| 是否跨机器访问 | 否 | 是,走网络 |
| 读写性能 | 极高(内存无网络) | 中等(有网络开销) |
| 集群数据一致性 | 差,会脏读 | 统一一致 |
| 分布式锁 / 限流能力 | 不支持 | 原生支持 |
补充拓展
有些框架会混淆概念:
- Spring Cache 只是缓存抽象,底层可以切换 Caffeine(本地)或 Redis(分布式);
- Caffeine 本身永远是本地缓存,不会因为套了 Spring Cache 就变成分布式。
