背景
Spring5已经将guava的cached放弃掉,使用Caffeine,为什么呢?即使spring组织放弃guava使用caffeine 是有道理的,那我们看看caffeine有什么优点,到底比guava的cache好在哪里?
定义
Caffeine(咖啡因) Caffeine 是基于 Java 8 的高性能,接近最佳的缓存库.
了解更多
提供了内存缓存受到了guava Api缓存的启发,是在guava的缓存和ConcurrentLinkedHashMap基础上改进的
此外,咖啡因还提供了以下的扩展:
- JCache
- guava缓存的适配器
- Simulator
特性
- 咖啡因缓存具有以下特性的:
- 自动加载实体到缓存,可选异步
- 以大小为基础逐出,当超过最大值基于频率和近因
- 以时间为基础的条目过期
- 异步刷新
- 在弱引用中自动封装的键
- 在弱引用中或软引用中自动封装的键
- 通知被驱逐(其他方式删除)的条目
- 传播到外部资源的写入
- 统计缓存访问数据
性能测试
号称性能最好
https://github.com/ben-manes/caffeine/wiki/Benchmarks
如何使用
maven 引用配置
<!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine -->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.6.0</version>
</dependency>
LoadingCache<Key, Graph> graphs = Caffeine.newBuilder()
.maximumSize(10_000)
.expireAfterWrite(5, TimeUnit.MINUTES)
.refreshAfterWrite(1, TimeUnit.MINUTES)
.build(key -> createExpensiveGraph(key));
功能
加载策略
三种类型的填充策略: 手动、同步加载和异步加载
驱除策略
三种类型的驱逐:基于规模的驱逐,基于时间的驱逐和基于引用的驱逐
原理
问题
那么caffeine是如何实现的,性能这么高
未完待续。。。
网友评论