java开发中常见本地缓存对比和选型建议
·
主要针对Guava Cache、Caffeine、Ehcache、ConcurrentHashMap、Cache2k 做一次清晰对比(只讲本地缓存,不含 Redis/Memcached 分布式)
一、主流本地缓存一览
1)Guava Cache(Google)
- 类型:堆内本地缓存
- 算法:LRU(最近最少使用)
- 特点:
- 大小限制、TTL(写入 / 访问过期)
- 自动加载、异步加载、移除监听
- 命中率统计、权重淘汰
- 优点:稳定、易用、集成广
- 缺点:性能一般,LRU 不如现代算法;官方不再大版本演进
- 适用:中小读多写少、简单缓存场景
2)Caffeine(推荐新一代)
- 类型:堆内本地缓存
- 算法:W-TinyLFU(LRU+LFU 窗口融合,理论最优)
- 特点:Guava 所有功能 + 更强并发 / 性能
- 优点:
- 性能:Guava 的 5~10 倍,高并发碾压
- 无锁设计、分段、异步加载、内存利用率高
- Spring 5+ 默认本地缓存
- 缺点:纯内存、无持久化
- 适用:新项目首选、高频高并发本地缓存
3)Ehcache(老牌全能)
- 类型:堆内 / 堆外 / 磁盘缓存(可本地可分布式)
- 算法:LRU、LFU、FIFO
- 特点:
- 支持持久化、堆外内存、磁盘溢出
- 支持 JSR-107、集群、事务
- 优点:容量不受堆限制、可落地、功能全
- 缺点:配置重、性能低于 Caffeine
- 适用:大数据量、需持久化、多级缓存
4)ConcurrentHashMap(JDK 原生)
- 类型:纯内存 Map,非缓存框架
- 特点:线程安全、无过期 / 淘汰 / 统计
- 优点:零依赖、最快简单读写
- 缺点:无过期、无容量管控、无监控
- 适用:极简单、短生命周期、无过期需求
5)Cache2k(小众高性能)
- 类型:堆内本地缓存
- 算法:高级 LRU/LFU
- 特点:性能接近 Caffeine、低内存、轻量
- 优点:更小包、更低 GC、高吞吐
- 缺点:国内资料少、生态弱
- 适用:极致性能 + 极小依赖场景
二、核心特性对比表(本地缓存)
表格
| 特性 | Guava Cache | Caffeine | Ehcache | ConcurrentHashMap | Cache2k |
|---|---|---|---|---|---|
| 淘汰算法 | LRU | W-TinyLFU | LRU/LFU/FIFO | 无 | 高级 LRU/LFU |
| 性能 | 中 | 极高 | 中高 | 高 | 极高 |
| 过期策略 | TTL/TTI | TTL/TTI | TTL/TTI | 无 | TTL/TTI |
| 自动加载 | ✅ | ✅ | ✅ | ❌ | ✅ |
| 异步加载 | ✅ | ✅ | ✅ | ❌ | ✅ |
| 移除监听 | ✅ | ✅ | ✅ | ❌ | ✅ |
| 命中率统计 | ✅ | ✅ | ✅ | ❌ | ✅ |
| 持久化 | ❌ | ❌ | ✅(磁盘) | ❌ | ❌ |
| 堆外 / 磁盘 | ❌ | ❌ | ✅ | ❌ | ❌ |
| 依赖 | Guava | 轻量 | 较重 | 无 | 轻量 |
| 生态 | 成熟 | 主流(Spring) | 企业级 | JDK 原生 | 小众 |
三、性能结论(业界共识)
- 吞吐量 / 延迟:Caffeine ≈ Cache2k > Guava > Ehcache > ConcurrentHashMap(功能受限)
- 高并发(16 + 线程):Caffeine 显著领先
四、选型建议
- 新项目、高并发、追求极致性能 → Caffeine
- 老项目已用 Guava、无性能瓶颈 → 继续用 Guava
- 需要持久化 / 大数据量 / 堆外缓存 → Ehcache
- 极简场景、无过期、零依赖 → ConcurrentHashMap
- 极致轻量 + 高性能、可接受小众生态 → Cache2k
更多推荐
所有评论(0)