业务缓存
# 一、JetCache缓存
JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。 当前有四个实现,RedisCache、TairCache(此部分未在github开源)、CaffeineCache(in memory)和一个简易的LinkedHashMapCache(in memory),要添加新的实现也是非常简单的。
支持二级缓存,本项目使用了redis + caffeine
# 二、JetCache特性
- 通过统一的API访问Cache系统
- 通过注解实现声明式的方法缓存,支持TTL和两级缓存
- 通过注解创建并配置Cache实例
- 针对所有Cache实例和方法缓存的自动统计
- Key的生成策略和Value的序列化策略是可以配置的
- 分布式缓存自动刷新,分布式锁 (2.2+)
- 异步Cache API (2.2+,使用Redis的lettuce客户端时)
- Spring Boot支持
# 三、工具类封装
# 3.1 引入依赖
<dependency>
<groupId>vip.mate</groupId>
<artifactId>mate-starter-jetcache</artifactId>
</dependency>
2
3
4
# 3.2 yaml配置
jetcache:
statIntervalMinutes: 1 #统计间隔分钟
areaInCacheName: false
local:
default: #默认area
type: caffeine
keyConvertor: fastjson
remote:
default:
type: redis.springdata # type由 redis.lettuce 变为了redis.springdata
keyConvertor: fastjson
2
3
4
5
6
7
8
9
10
11
# 四、使用方法
# 4.1 注解方式实现方式级缓存
JetCache方法缓存和SpringCache比较类似,它原生提供了TTL支持,以保证最终一致,并且支持二级缓存。JetCache2.4以后支持基于注解的缓存更新和删除。
在spring环境下,使用@Cached注解可以为一个方法添加缓存,@CacheUpdate用于更新缓存,@CacheInvalidate用于移除缓存元素。注解可以加在接口上也可以加在类上,加注解的类必须是一个spring bean,例如:
public interface UserService {
@Cached(name="userCache.", key="#userId", expire = 3600)
User getUserById(long userId);
@CacheUpdate(name="userCache.", key="#user.userId", value="#user")
void updateUser(User user);
@CacheInvalidate(name="userCache.", key="#userId")
void deleteUser(long userId);
}
2
3
4
5
6
7
8
9
10
key使用Spring的SpEL
脚本来指定。如果要使用参数名(比如这里的key="#userId"
),项目编译设置target必须为1.8格式,并且指定javac的-parameters参数,否则就要使用key="args[0]"
这样按下标访问的形式。
@CacheUpdate和@CacheInvalidate的name和area属性必须和@Cached相同,name属性还会用做cache的key前缀。
@Cached注解和@CreateCache的属性非常类似,但是多几个
详见:https://github.com/alibaba/jetcache/wiki/MethodCache_CN (opens new window)