上文中我们学习了springboot中缓存的基本使用。缓存分为本地caffeine缓存和远程redis缓存。现在有一个小小的问题,我想使用本地caffeine缓存和远程redis缓存组成二级缓存。还想保证他们的一致性,这个事情该怎么办呢?
Jetcache框架为我们解决了这个问题。
JetCache是一个由阿里巴巴开发的基于Java的缓存系统封装,旨在通过统一的API和注解简化缓存的使用。JetCache提供了比SpringCache更强大的功能,包括支持TTL(Time To Live,生存时间)、两级缓存、分布式自动刷新等特性。它支持多种缓存实现,如RedisCache、CaffeineCache(内存缓存)和LinkedHashMapCache(内存缓存),并且可以轻松添加新的缓存实现。
简单讲:jetcache不是缓存,他是保证缓存的一致性的框架。
JetCache支持的本地缓存类型包括LinkedHashMapCache和CaffeineCache。
JetCache支持的远程缓存类型包括redis、Tair等。
放一下官方文档:
jetcache/docs/CN/Readme.md at master · alibaba/jetcache · GitHub
官方文档中有部分配置是有bug的,都是坑。后边我们会说到。
下面我们在Springboot项目中集成jatcache。
一:添加pom依赖:
这里需要注意一下,jetcache支持不同的springboot-redis客户端。分别是:jedis和lettuce
Jedis和Lettuce的区别是什么呢?
Jedis 和 Lettuce 都是用于 Java 语言连接 Redis 的客户端,Jedis主要是同步方法,Lettuce主要是异步高性能,基于Netty。
具体请移步《【SpringBoot】Jedis和Lettuce的区别》
扯远了,回到主题:
如果你使用的是Lettuce客户端,那就引入:
<!-- https://mvnrepository.com/artifact/com.alicp.jetcache/jetcache-starter-redis-lettuce -->
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis-lettuce</artifactId>
<version>2.7.5</version>
</dependency>
如果你使用的是Jedis客户端,那就引入:
<!-- https://mvnrepository.com/artifact/com.alicp.jetcache/jetcache-starter-redis -->
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis </artifactId>
<version>2.7.5</version>
</dependency>
我这里使用的是lettuce
二:配置yml文件
这部分也是一样的,是根据你是用的redis客户端来选择的。这部分上边已经说过了,这里不再赘述,我这里是用的是lettuce。官方文档如下图所示:
这里得配置写法要参考一下官方文档中内容。
Application.yml内容如下:
jetcache:
## 统计间隔,0表示不统计,开启后定期在控制台输出缓存信息
statIntervalMinutes: 15
## 是否把cacheName作为远程缓存key前缀
areaInCacheName: false
## 本地缓存配置
local:
default: ## default表示全部生效,也可以指定某个cacheName
## 本地缓存类型,其他可选:caffeine/linkedhashmap
type: caffeine
keyConvertor: jackson
#expireAfterWrite: 1800s # 缓存写入后10分钟过期
# lettuce远程