cacheable 表达式_springboot @Cacheable 基本使用

cacheable 表达式_springboot @Cacheable 基本使用加入依赖 org springframew bootspring boot starter cache 开启注解缓存 在启动类上加入 EnableCachin 缓存注解 Cacheable 对方法结果进行缓存 主要用于 GET 方法 cacheNames value 指定缓存主键 Cache 的名字 key 缓存数据使用 key 支持 spEl 语法 keyGenerator key 的生成器 与 key 属

加入依赖:

org.springframework.boot

spring-boot-starter-cache

开启注解缓存:

在启动类上加入 @EnableCaching

缓存注解

@Cacheable :

对方法结果进行缓存(主要用于GET方法)

cacheNames/value:指定缓存主键(Cache)的名字

key:缓存数据使用key,支持spEl语法

keyGenerator:key的生成器。与key属性冲突,自定义 keyGenerator 必须实现

org.springframework.cache.interceptor.KeyGenerator,default使用默认的参数值生成器

cacheManager:指定缓存管理器,或者cacheResolver指定获取解析器cacheResolver:与

CacheManager冲突condition:指定条件满足才缓存,与unless相反。可以使用spEL语法

unless:否定缓存,当满足条件时,结果不被缓存。可以获取到结果(#result)进行判断。支持spEL语法

sync:是否异步模式。在该模式下unless不被支持。default=false

@CachePut:先调用方法,在对结果进行缓存。(主要用于PUT方法),需要注意key的设置@CacheEvict:默认先调用方法,在删除缓存(主要用于DELETE方法)allEntries: 删除缓存组件中(cacheNames/value指定)所有的值beforeInvocation:在方法执行之前删除值,default=false@Caching:组合注解。针对复杂情况@CacheConfig:加载类上,用于设置缓存的共有属性

几个属性:

cacheNames/values:指定缓存组件的名字,将方法的返回结果放在哪个缓存中,是数组的方式,可以指定多个缓存

key:缓存数据使用的key;可以用它来指定。默认是使用方法参数的值

可以用spEL表达式来表示;#id-如(getEmp[1]); 参数id的值:  #a0  #p0  #root.args[0]

keyGenerator:key的生成器;可以自己指定key的生成器的组件id

key/keyGenerator:二选一使用(自己配置类)

cacheManager:指定使用哪个缓存管理器;或者cacheResolver指定获取解析器

condition:指定符合条件的情况下才缓存; 如:condition = “#a0>1”  即第一个参数值大于1时才进行缓存

unless:否定缓存;当unless指定的条件为true,方法的返回值就不会被缓存;可以获取到的结果进行判断

如: unless = “#a0”:如果第一个参数值是2,则结果不缓存                unless = “#result == null”  结果为null不缓存结合写法:

@Cacheable(cacheNames = {“emp”},keyGenerator = “myKeyGenerator”,condition = “#a0>1”,unless =  “#a0==2”)  意思为 放在的缓存名称为emp中,key的生成方式为配置的myKeyGenerator类,当第一个参数大于1时候缓存,当第一个参数等于2时不缓存

sync:是否使用异步模式(异步模式情况下unless不支持)

//@Cacheable(cacheNames = {“emp”},key = “#root.methodName+'[‘+#id+’]'”)

public Employee getEmp(Integer id){

System.out.println(“查询”+id+”号员工”);

Employee emp =  employeeMapper.getEmpById(id);

return  emp;

}

此时当id为1时,key的值为 getEmp[1]

@Configuration

public class MyCacheConfig {

@Bean(“myKeyGenerator”)

public KeyGenerator keyGenerator (){

return  new KeyGenerator(){

@Override

public Object generate(Object o, Method method, Object… objects) {

return method.getName()+”[“+ Arrays.asList(objects).toString()+”]”;

}

};

};

}

这里返回的key的值为getEmp[[1]]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229638.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午4:14
下一篇 2026年3月16日 下午4:15


相关推荐

  • Kali Linux渗透测试技术详解_渗透测试入门

    Kali Linux渗透测试技术详解_渗透测试入门开始研究web渗透测试,本文是第一篇:KaliLinux工具安装,后面会更新实战类的一系列文章,感兴趣的童鞋可以关注我,一起学习吧!

    2022年8月12日
    11
  • Unwind 栈回溯详解

    Unwind 栈回溯详解1 历史背景 1 1framepointe 在调试的时候经常需要进行堆栈回溯 最简单的方式是使用一个独立的寄存器 ebp 来保存每层函数调用的堆栈栈顶 framepointer pushl ebpmovl esp ebp popl ebpretx86 64 的 framepoint 模式 arm64 的 framepoint 模式这种方式在堆栈回溯时非常方便快捷 但是这种方法也有自己的不足 需要一个专门寄存器 ebp 来保存 frameponiter 保存 e

    2026年3月20日
    4
  • 【目标检测】SPPNet算法详解

    【目标检测】SPPNet算法详解转载自http://blog.csdn.net/u011534057/article/details/51219959SpatialPyramidPoolinginDeepConvolutionalNetworksforVisualRecognition(SPP-net)1基础框架  CNN网络需要固定尺寸的图像输入,SPPNet将任意大小的图像池化生成固定长度的图像表示

    2022年6月3日
    49
  • 修改PyCharm默认源

    修改PyCharm默认源国内 pip 源 清华大学 https pypi tuna tsinghua edu cn simple 在使用 pycharm 时 打开 avaiablepack 点击 ManageReposi 点右上方的绿色加号 添加清华源即可 图中三个源 原始 清华 阿里 也可以只使用清华源 在添加包页面进行刷新 看到下载地址改变即可如果想使用命令行

    2026年3月27日
    2
  • mysql dnslog_DNSlog盲注

    mysql dnslog_DNSlog盲注前言在渗透测试中 经常遇到如下情景 1 sql 盲注 2 blind 型 ssrf 以及 xxe3 无回显命令执行漏洞 dnslog 盲注原理开放的 DNSlog 平台 http ceye io 在 http ceye io 上我们可以获取到有关 ceye io 的 DNS 查询信息 域名解析的过程 是由顶级域名向下逐级解析 我们构造的攻击语句也是如此 当它发现域名中存在 ceye io 时 它会将这条域名信息转到相

    2026年3月18日
    1
  • 基因的可变剪切_如何确认发现了可变剪切

    基因的可变剪切_如何确认发现了可变剪切什么是基因的可变剪切?有些基因的前体mRNA(pre-mRNA)通过不同的剪接方式(选择不同的剪接位点)产生不同的mRNA剪接异构体,这一过程称为可变剪接(或者选择性剪切)(AlternativeS

    2022年8月5日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号