【Spring专栏】内存缓存Caffeine基本使用姿势
Caffeine作为当下本地缓存的王者被大量的应用再实际的项目中,可以有效的提高服务吞吐率、qps,降低rt
本文将简单介绍下Caffeine的使用姿势
项目配置
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 缓存增删查姿势
接下来我们看一下手动方式的使用
public void getUid(String session) {
// 重新再取一次,这次应该就不是重新初始化了
Integer uid = uidCache.getIfPresent(session);
System.out.println("查看缓存! 当没有的时候返回的是 uid: " + uid);
// 第二个参数表示当不存在时,初始化一个,并写入缓存中
uid = uidCache.get(session, (key) -> 10);
System.out.println("初始化一个之后,返回的是: " + uid);
// 移除缓存
uidCache.invalidate(session);
// 手动添加一个缓存
uidCache.put(session + "_2", 11);
// 查看所有的额缓存
Map map = uidCache.asMap();
System.out.println("total: " + map);
// 干掉所有的缓存
uidCache.invalidateAll();
}
查询缓存&添加缓存
getIfPresent(key)
: 不存在时,返回nullget(key, (key) -> {value初始化策略})
: 不存在时,会根据第二个lambda表达式来写入数据,这个就表示的是手动加载缓存asMap
: 获取缓存所有数据
添加缓存
put(key, val)
: 主动添加缓存
清空缓存
inv
2 条评论
回复