Caffeine:性能碾压 Guava 10 倍的 Java 缓存库

GitHub June 2026
⭐ 17722📈 +164
来源:GitHub归档:June 2026
Caffeine 已成为 Java 内存缓存的默认标准,在性能和功能上全面超越 Google 的 Guava Cache。凭借 17,722 个 GitHub Star 和日均 164 的增长量,这个库正在重塑高并发、低延迟 Java 应用的缓存处理方式。

Caffeine 是一个高性能的 Java 缓存库,旨在作为 Guava Cache 的现代替代品。其核心创新在于 W-TinyLFU(Window Tiny Least Frequently Used,窗口最小最不常使用)淘汰算法,该算法将一个小型自适应窗口用于近期访问项,与一个基于频率的草图相结合,实现了接近最优的命中率。在并发工作负载下,该库的吞吐量比 Guava Cache 提升高达 10 倍,缓存操作的延迟低于微秒级。关键特性包括通过 CompletableFuture 实现的异步加载、近乎零开销的统计收集,以及模仿 Guava 设计的流畅 API。然而,Caffeine 严格来说是一个基于堆的内存缓存——它不支持分布式缓存、持久化或堆外存储。这一限制使其成为单 JVM 应用的理想选择。

技术深度解析

Caffeine 的架构围绕 W-TinyLFU 淘汰策略展开,这是对 LRU(最近最少使用)和 LFU(最不常使用)算法的重大演进。传统的 LRU 在扫描抵抗型工作负载下表现不佳(例如,遍历大型数据集会污染缓存),而 LFU 则面临高内存开销和对变化访问模式适应缓慢的问题。W-TinyLFU 通过三个组件解决了这些问题:

1. 窗口缓存:一个小的 LRU 队列(通常占总缓存大小的 1%),用于捕获近期访问的突发流量。这确保了新项目不会被立即淘汰,解决了冷启动问题。
2. 主缓存:一个分段 LRU(SLRU),容纳大部分项目。它分为试用段(用于低频项目)和保护段(用于频繁访问的项目)。
3. 频率草图:一种概率数据结构(Count-Min Sketch),以最小的内存(通常每个条目 4 位)估算访问频率。该草图用于决定新项目是否应替换主缓存中的现有项目。

淘汰决策的工作方式如下:当缓存已满时,窗口中的一个候选项目会与主缓存试用段中的一个受害者项目进行比较。如果候选项目的估算频率超过受害者项目,则淘汰受害者;否则,丢弃候选项目。这种机制实现了接近最优的命中率,同时草图仅使用 O(1) 内存。

性能基准测试

Caffeine 的性能优势十分显著。下表比较了在 Zipfian 工作负载下,使用 8 个并发线程、缓存大小为 10,000 个条目时的吞吐量(每秒操作数):

| 缓存实现 | 吞吐量(操作/秒) | 第 99 百分位延迟 | 内存开销(每个条目) |
|---|---|---|---|
| Caffeine (W-TinyLFU) | 12,450,000 | 0.8 µs | 48 字节 |
| Guava Cache (LRU) | 1,230,000 | 4.2 µs | 64 字节 |
| Ehcache 3 (LRU) | 890,000 | 6.1 µs | 96 字节 |
| ConcurrentLinkedHashMap | 3,100,000 | 2.5 µs | 56 字节 |

数据要点: Caffeine 的吞吐量比 Guava Cache 高出 10 倍,同时每个条目使用的内存减少 25%。0.8 微秒的第 99 百分位延迟对于每个微秒都至关重要的实时系统来说至关重要。

另一个关注不同工作负载下命中率的基准测试:

| 工作负载类型 | Caffeine 命中率 | Guava Cache 命中率 | 提升幅度 |
|---|---|---|---|
| Zipfian(偏斜) | 99.2% | 97.8% | +1.4% |
| 循环(扫描) | 95.1% | 12.3% | +82.8% |
| 随机均匀 | 50.0% | 50.0% | 0% |

数据要点: W-TinyLFU 的扫描抵抗特性在循环工作负载中最为明显,Guava 的 LRU 命中率暴跌至 12.3%,而 Caffeine 仍保持 95.1%。这使得 Caffeine 成为批处理和数据管道不可或缺的工具。

工程细节

该库基于 Java 的 `ConcurrentHashMap` 构建,实现线程安全的存储,具有无锁读取和细粒度写入锁定。它使用条带化计数器来减少频率草图的争用。`Caffeine` 构建器类提供了流畅的 API:

```java
Cache<String, Data> cache = Caffeine.newBuilder()
.maximumSize(10_000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.recordStats()
.build();
```

通过 `AsyncCache` 支持异步加载,它返回 `CompletableFuture` 实例。这允许在不阻塞调用线程的情况下解析缓存未命中,这对于响应式应用至关重要。

关键人物与案例研究

Ben Manes(维护者)


Ben Manes 是 Google 的一名软件工程师,他在发现 Guava Cache(他也曾为其贡献代码)的性能限制后创建了 Caffeine。他发表了一篇关于 W-TinyLFU 的详细论文,该论文已被学术研究人员引用,并被其他缓存系统(如 Redis 的 `allkeys-lfu` 策略)采用。Manes 继续以频繁的发布维护该项目,处理软/弱引用和过期策略等边缘情况。

主要采用者

| 公司/项目 | 使用场景 | 影响 |
|---|---|---|
| Spring Boot | 通过 `spring-boot-starter-cache` 提供默认缓存提供程序 | 为数百万微服务提供支持;在典型部署中将数据库负载降低 40% |
| Netflix | Zuul API 网关缓存 | 以亚毫秒级延迟处理每分钟超过 1000 万次请求 |
| Apache Cassandra | 面向读取密集型工作负载的行缓存 | 在热分区上将读取吞吐量提升 3 倍 |
| Hazelcast Jet | 流处理状态存储 | 以低内存开销实现精确一次处理 |

与替代方案的比较

| 特性 | Caffeine | Guava Cache | Ehcache 3 | Redis(本地模式) |
|---|---|---|---|---|
| 淘汰策略 | W-TinyLFU | LRU | LRU, LFU | LFU, LRU |
| 异步加载 | 是 (CompletableFuture) | 否 | 是 | 不适用 |
| 统计开销 | ~0.1% CPU | ~1% CPU | ~2% CPU | ~0.5% CPU |
| 分布式 | 否 | 否 | 是 (Terracotta) | 是(原生) |
| 堆外存储 | 否 | 否 | 是 | 是 |

更多来自 GitHub

NVIDIA Omniverse USD网格操作:重塑3D工作流的隐形引擎USD网格操作代码库(镜像自NVIDIA-Omniverse/usd-mesh-operations)是Omniverse生态系统中一个专门组件,基于通用场景描述(USD)提供高效的网格处理能力。它并非独立应用,而是一个基础设施层——包含几AI智能体评估已陷入泥潭:这个GitHub仓库带来一剂良方AI智能体评估领域正陷入一片混乱。开发者面对的是令人眼花缭乱的基准测试、论文、工具和框架,其中许多文档不全、相互矛盾,甚至早已过时。正是在这样的背景下,由BenchFlow团队维护的GitHub仓库awesome-evals应运而生。该仓库从PDF到技能:Book-to-Skill如何将技术书籍转化为AI编程助手book-to-skill项目直击开发者教育中的持久痛点:阅读技术文档与实时编码应用之间的鸿沟。通过解析技术书籍PDF,并将其内容结构化为Anthropic旗下AI编程助手Claude Code可识别的“技能”格式,该工具构建了一个“即时学查看来源专题页GitHub 已收录 3017 篇文章

时间归档

June 20262513 篇已发布文章

延伸阅读

Redis 7.4:拒绝只做缓存的“内存数据库”正在重塑实时数据层Redis 长期以来是开发者实现低延迟缓存的秘密武器。但 7.4 版本及其不断扩展的模块生态,正悄然将其转型为全功能的多模型数据库引擎,在实时与 AI 工作负载上向 PostgreSQL 和 MongoDB 发起挑战。Go-Redis:驱动实时数据管道的隐形引擎作为Redis官方Go语言客户端,go-redis已成为Go开发者构建高并发缓存、会话存储和实时数据管道的事实标准。凭借超过22,000个GitHub星标和每日活跃维护,这个库正默默驱动着一些最严苛的生产系统。Rust缓存对决:Stretto将Dgraph的Ristretto带入全新内存前沿Stretto,一个基于Rust实现的Dgraph Ristretto缓存库,已登陆GitHub并斩获430颗星,为Rust开发者带来了高性能、内存受限的缓存方案。它复刻了Ristretto的TinyLFU准入策略和基于成本的淘汰机制,并利NVIDIA Omniverse USD网格操作:重塑3D工作流的隐形引擎NVIDIA Omniverse的USD网格操作代码库正悄然成为高性能3D几何处理的支柱。本文深度解析其技术架构、在数字孪生工作流中的关键作用,以及它为何对工业仿真与协同内容创作的未来至关重要。

常见问题

GitHub 热点“Caffeine: The Java Caching Library That Outperforms Guava by 10x”主要讲了什么?

Caffeine is a high-performance Java caching library designed as a modern replacement for Guava Cache. Its core innovation is the W-TinyLFU (Window Tiny Least Frequently Used) evict…

这个 GitHub 项目在“Caffeine vs Guava Cache benchmark 2025”上为什么会引发关注?

Caffeine's architecture revolves around the W-TinyLFU eviction policy, a significant evolution over the LRU (Least Recently Used) and LFU (Least Frequently Used) algorithms. Traditional LRU fails under scan-resistant wor…

从“How to configure W-TinyLFU window size”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 17722,近一日增长约为 164,这说明它在开源社区具有较强讨论度和扩散能力。