Caffeine
Caffeine 介绍
Caffeine 是一个高性能、轻量级的 Java 缓存库,旨在提供简单易用的 API 和强大的功能集合。它由 Google 的工程师 Ben Manes 开发,并在多个 Google 内部项目中广泛使用。Caffeine 作为 Java 应用程序中的缓存解决方案,旨在提高应用程序的性能和响应速度,通过减少对外部系统的依赖来加快数据访问的速度。
Caffeine 的特性如下:
高性能:Caffeine 优化了内部结构,使得缓存操作非常快速。它使用了高效的数据结构和算法,如哈希表和跳表,以及并发友好的实现策略。
内存效率:Caffeine 采用了一种称为 Window TinyLFU (W-TinyLFU) 的淘汰策略,它综合了 LRU 和 LFU 的优点,能够更智能地管理缓存中的条目。这种策略可以有效地利用有限的内存资源,同时保持较高的缓存命中率。
易于使用:Caffeine 提供了一个简洁的 API,允许开发者轻松地集成缓存逻辑到现有的应用程序中。它还支持多种配置选项,可以根据具体需求进行定制。
丰富的功能:除了基本的缓存功能外,Caffeine 还提供了许多高级特性,如定时清理、异步加载、统计报告等。
高度可配置:用户可以通过多种方式来调整缓存的行为,包括设置最大容量、TTL(Time To Live,存活时间)、TID(Time To Idle,空闲时间)等参数。
添加依赖
1 | |
初始化缓存
1 | |
代码解释:
initialCapacity: 指定缓存的初始容量。这里初始容量设置为 10000。这意味着缓存最初会预留足够的空间来容纳大约 10000 个条目。这有助于减少缓存扩容的次数,提高性能。maximumSize: 指定缓存的最大容量。这里最大容量同样设置为 10000。当缓存中的条目数量超过这个限制时,缓存将开始根据淘汰策略来移除旧条目。这里使用的是 W-TinyLFU 淘汰策略。expireAfterWrite: 这个配置指定了缓存条目写入后多久过期。在上面代码中,设置为 1 小时。这意味着一旦一个条目被写入缓存,它将在 1 小时后自动过期并被清除。这有助于防止缓存中存放过时的数据。
再通过 Jmeter 压测一波,看看对比上小节,引入了二级缓存后,性能提升了多少:

如上图所示,吞吐量提升了 2000/s 左右,接口响应耗时平均减少了 1ms。