springboot中的缓存注解支持Spel表达式,因此这里展示常用的SpEL表达式
SpEL运算符
类型 | 运算符 |
---|---|
关系运算符 | < ,> , <= ,>=,==,!=,lt,gt,le,ge,eq,ne |
算数运算符 | +,-,*,/ ,%,^ |
逻辑运算符 | &&,||,and,or,not,between,instanceof |
条件运算符 | ? : (ternary),? : (elvis) |
正则表达式 | matches |
其他类型 | ?. ,?[…] ,![…] ,^[…],$[…] |
在一个springboot项目中通过在入口main方法得类上标注@EnableCaching注解开启springboot的缓存功能
名称 | 描述 | 位置 | 示例 |
---|---|---|---|
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 | 当前方法调用使用的缓存列表@Cacheable(value={"cache1","cache1"}) | root object | #root.cache[0].name |
argument name | 方法参数的名字,可以直接#参数名,也可以使用#p0 或#a0 的形式,0 表示索引下标。 | evluation context | #iban 、#a0 、#p0 、#root.args[0] |
result | 方法执行后的放回值 (仅当执行之后的判断有效,如 unless ,cache put 的表达式‘cache evict的表达式beforeInvocation=false ) | evluation context | #result |
1、开启缓存
示例
@EnableCaching
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cache.annotation.EnableCaching;@SpringBootApplication@EnableCachingpublicclassDemoApplication{publicstaticvoidmain(String[] args){
SpringApplication.run(DemoApplication.class, args);}}
2、使用缓存
@Cacheable
该注解的作用是将方法的返回结果做缓存在需要缓存的地方使用@Cacheable注解,例如在service中使用
默认情况 key就是参数名,key可以指定哪个参数名作为缓存的键
使用方式是#a0 #p0 #参数名 #root.args[0]
都是指定同一个参数,后面的数字就是选择哪个参数作为键@Cacheable中的方法
使用方式都是@Cacheable(key=xxx, cacheNames={"name1","name2"} ...)
,根据需要添加
//与cacheNames相同,@AliasFor是取别名@AliasFor("cacheNames")
String[]value()default{};@AliasFor("value")//缓存组件名,数据存在缓存组件中以key:value的形式存储
String[]cacheNames()default{};//与keyGenerator 2选1只能用一个,就是缓存的key
Stringkey()default"";//key的生成器;可以自己指定key的组件id 与上面的key二选一使用
StringkeyGenerator()default"";//指定缓存管理器;或者cacheResolver指定获取解析器
StringcacheManager()default"";//
StringcacheResolver()default"";//指定符合条件的情况才缓存,例如condition="#id>0"
Stringcondition()default"";/*
否定缓存,当unless指定条件为true,方法返回值就不会被缓存;
可以获取到结果进行判断。 unless="#result==null"
*/
Stringunless()default"";//是否使用异步模式booleansync()defaultfalse;