项目配置
1. 依赖
首先搭建一个标准的SpringBoot项目工程,相关版本以及依赖如下
本项目借助SpringBoot 2.2.1.RELEASE
+ maven 3.5.3
+ IDEA
进行开发
<dependencies>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
</dependencies>
复制代码
使用实例
引入上面的jar包之后,就可以进入caffeine的使用环节了;我们主要依照官方wiki来进行演练
caffeine提供了四种缓存策略,主要是基于手动添加/自动添加,同步/异步来进行区分
其基本使用姿势于Guava差不多
1. 手动加载
private LoadingCache<String, Integer> autoCache;
private AtomicInteger idGen;
public CacheService() {
// 手动缓存加载方式
idGen = new AtomicInteger(100);
uidCache = Caffeine.newBuilder()
// 设置写入后五分钟失效
.expireAfterWrite(5, TimeUnit.MINUTES)
// 设置最多的缓存数量
.maximumSize(100)
.build();
}
复制代码
1.1 三种失效策略
注意参数设置,我们先看一下失效策略,共有下面几种
权重:
- maximumSize: 基于容量策略,当缓存内元素个数超过时,通过基于就近度和频率的算法来驱逐掉不会再被使用到的元素
- maximumWeight: 基于权重的容量策略,主要应用于缓存中的元素存在不同的权重场景
时间:
- expireAfterAccess: 基于访问时间
- expireAfterWrite: 基于写入时间
- expireAfter: 可以根据读更新写入来调整有效期
引用:
- weakKeys: 保存的key为弱引用
- weakValues: 保存的value会使用弱引用
- softValues: 保存的value使用软引用
弱引用:这允许在GC的过程中,当没有被任何强引用指向的时候去将缓存元素回收
软引用:在GC过程中被软引用的对象将会被通过LRU算法回收
1.2 缓存增删查姿势</