【Spring专栏】内存缓存Caffeine基本使用姿势

Caffeine作为当下本地缓存的王者被大量的应用再实际的项目中,可以有效的提高服务吞吐率、qps,降低rt
本文将简单介绍下Caffeine的使用姿势
项目配置
1. 依赖
首先搭建一个标准的SpringBoot项目工程,相关版本以及依赖如下
本项目借助SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发
com.github.ben-manes.caffeine
caffeine
使用实例
引入上面的jar包之后,就可以进入caffeine的使用环节了;我们主要依照官方wiki来进行演练
caffeine提供了四种缓存策略,主要是基于手动添加/自动添加,同步/异步来进行区分
其基本使用姿势于Guava差不多
1. 手动加载
private LoadingCache 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(...
已加入星球,可直接知识星球授权登录
二哥编程星球目前包含:
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
热门评论
9 条评论
回复