1.导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
2.在主启动类上加上开启缓存注解 @EnableCaching
3.将方法的结果进行缓存,需要在方法上加上 @Cacheable 注解
注意:
@Cacheable先查询缓存里是否有结果,后调用方法
@CachePut先调用方法,后将方法的返回值写入缓存(更新操作时注意key一致)
@Cacheable/@CachePut/@CacheEvict主要参数
value | 缓存的名称,必须至少指定一个,也可用cacheName | @Cacheable(value="")或@Cacheable(value={"",""} |
key | 缓存的key,可以为空,如果指定要按照SpEL表达式编写,如不指定,则缺省按照方法的所有参数进行组合 | @Cacheable(value="",key="#xx") |
condition |
缓存的条件,可以为空,使用SpEL编写,返回true或者false,只有为true才进行缓存/清除缓存,在调用方法之前之后都能判断 |
@Cacheable(value="",condition="#xx判断") |
allEntries (@CacheEvict) |
是否清空所有缓存内容,缺省为false,如果指定为true,, 则方法调用后将立即清空所有缓存 |
@Cacheable(value="",allEntries=true) |
beforelnvocation (@CacheEvict) |
是否在方法执行前就清空,缺省为false,如果指定为true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存 |
@Cacheable(value="",beforelnvocation=true) |
unless (@CachePut) (@Cacheable) |
用于否决缓存的,不像condition, 该表达式只在方法执行之后判断,此时可以拿到返回值result进行判断。条件为true不会缓存,fasle才缓存 |
@Cacheable(value="",unless="") |
keyGenerator |
:key的生成器,可以指定key的生成器组件id,和key二者选其一使用 |
SpEL表达式
名字 | 位置 | 描述 | 示例 |
methodName | root object | 当前被调用的方法名 | #root.methodName |
method | root object | 当前被调用的方法 | #root.method.name |
target | root object | 当前被调用的目标对象 | #root.target |
targetClass | root object | 当前被调用的目标对象类 | #root.targetClass |
args | root object | 当前被调用的方法的参数列表 | #root.args[0] |
caches | root object | 当前方法调用使用的缓存列表(如@Cacheable(value={"cache1",#root.caches[0].name"cache2"}),则有 两个cache | #root.caches[0].name |
argument name | evaluation context | 方法参 数的名字.可以直接#参数名,也可以使用#p0或#a0 的#iban 、#a0 、#p0形式,0代表参数的索引; | #iban 、#a0 、#p0 |
result | evaluation context | evaluation context方法执行 后的返回值(仅当方法执行之后的判断有效,如unless','cache put'的表达式'cache evict' 的表达式 | #result |