SpringBoot2.x 缓存—注解方式、整合RedisCluster
やめてよ、やめてよ 、優しくしないでよ、どうしても僕には、理解ができないよ
《心做し》真是太好听啦 ❤️❤️❤️
前言:
最近重构项目,再次使用了一下spring缓存,在这里记录一下。在spring 3.1的时候,引入了对Cache的支持,和事务一样,其实就是做了一个方法aop。spring cache默认将传入参数作为key,将返回值作为value进行保存,如果调用方法有相应的key则不执行方法之间使用aop中的逻辑,即返回缓存结果。
spring cache支持xml和注解的方式,这里我们只谈注解方式
注解说明:
注解 |
说明 |
@EnableCaching |
开启缓存功能,放在相应配置类或启动类上 |
@CacheConfig |
缓存配置,设置缓存名称 |
@Cacheable |
执行方法前先查询缓存,有则直接返回缓存数据,否则查询数据再将数据放入缓存;也可以放类上,表示该类所有方法都支持缓存 |
@CachePut |
执行新增或更新方法后,将数据放入缓存中(每次都会执行,保持缓存和数据始终一致) |
@CacheEvict |
清除缓存 |
@Caching |
组合多个缓存操作 |
注解参数:
参数 |
类型 |
说明 |
proxyTargetClass |
boolean |
是否要基于cglib生成代理去实现缓存 |
mode |
AdviceMode |
选择缓存模式、默认是AdviceMode.PROXY 可以切换为 AdviceMode#ASPECTJ |
order |
int |
设置缓存管理器执行的顺序 |
参数 |
类型 |
说明 |
cacheNames |
String[] |
缓存的名称,别名value |
keyGenerator |
String |
缓存key的生成器 |
cacheManager |
String |
配置使用那个缓存管理器、和cacheResolver排斥 |
cacheResolver |
String |
定义使用那个拦截器、和cacheManager互斥 |
参数 |
类型 |
说明 |
value |
String[] |
缓存的名称,别名cacheNames |
cacheNames |
String[] |
缓存的名称,别名value |
key |
String |
缓存key的值、默认是以所有的参数作为key、也可以直接配置keyGenerator或者spel表达式 |
keyGenerator |
String |
缓存key的生成器 |
cacheManager |
String |
配置使用那个缓存管理器、和cacheResolver排斥 |
cacheResolver |
String |
定义使用那个拦截器、和cacheManager互斥 |
condition |
String |
根据spel表达式来可以配置什么条件下进行缓存 默认全部缓存 |
unless |
String |
和condition相反 |
sync |
boolean |
是否开启同步功能、默认不开启 |
参数 |
类型 |
说明 |
value |
String[] |
缓存的名称,别名cacheNames |
cacheNames |
String[] |
缓存的名称,别名value |
key |
String |
缓存key的值、默认是以所有的参数作为key、也可以直接配置keyGenerator或者spel表达式 |
keyGenerator |