主要针对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 显著领先

四、选型建议

  1. 新项目、高并发、追求极致性能Caffeine
  2. 老项目已用 Guava、无性能瓶颈 → 继续用 Guava
  3. 需要持久化 / 大数据量 / 堆外缓存Ehcache
  4. 极简场景、无过期、零依赖ConcurrentHashMap
  5. 极致轻量 + 高性能、可接受小众生态Cache2k

更多推荐