开启缓存@EnableCaching 和 使用缓存@Cacheable

2023-09-21 08:11:37
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方法执行后的放回值
(仅当执行之后的判断有效,如unlesscache 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;
  • 作者:诗水人间
  • 原文链接:https://yumbo.blog.csdn.net/article/details/106568372
    更新时间:2023-09-21 08:11:37