有时候我们想自定义@Cacheable 的key,由于自定义的key通过方法的参数无法给出,这时候就需要使用keyGenerator了。

通过查看 @Cacheable 的源码可以看出我们自定义一个 KeyGenerator 需要实现一个接口KeyGenerator

 /*** The bean name of the custom {@link org.springframework.cache.interceptor.KeyGenerator}* to use.* <p>Mutually exclusive with the {@link #key} attribute.* @see CacheConfig#keyGenerator*/String keyGenerator() default "";

首先定义一个 AdListCacheKeyGenerator来实现 KeyGenerator

/*** @author 石冬冬(Chris Suk)* @since 2022/10/20 4:36 PM*/
@Component
@Slf4j
public class AdListCacheKeyGenerator implements KeyGenerator{@Value("${zhaopin.live-environment:}")String env;@Overridepublic Object generate(Object target, Method method, Object... params) {ListMixLiveRoomRequestBO requestBO = (ListMixLiveRoomRequestBO) params[0];String cacheKey = new StringBuilder(env).append("_").append(requestBO.getCityId()).toString();log.info("[cacheKeyGenerate],cacheKey={}", cacheKey);return cacheKey;}
}

然后@Cacheable指定该 keyGenerator

@Cacheable(keyGenerator = "adListCacheKeyGenerator")public List<AdBO> listValidAd(ListMixLiveRoomRequestBO requestBO) {List<AdBO> ads = thirdAdLiveRoomBusiness.listValidAd(requestBO);setTestFlag(ads);return ads.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ad -> ad.getId()))), ArrayList::new));}```

SpringCache @Cacheable keyGenerator相关推荐

  1. SpringCache @Cacheable 在同一个类中调用方法,导致缓存不生效的问题及解决办法...

    由于项目需要使用SpringCache来做一点缓存,但自己之前没有使用过(其实是没有听过)SpringCache,于是,必须先学习之. 在网上找到一篇文章,比较好,就先学习了,地址是: https:/ ...

  2. 项目总结--3(@Cacheable的使用方法和使用技巧)

    在项目中缓存是经常要用到的,之前用的缓存都是Redis做为缓存的,但是在实际工作中用到缓存的地方是非常多,但是又不是只有Redis这一种操作,实际中可以用到的缓存还有SpringBoot,中的@Cac ...

  3. spring cache注解@Cacheable参数key赋值

    1 参数 @Cacheable(key ="#id") 一般这里会是 id ,但是可能与其它 entity的id重复. 2 前缀加参数 @Cacheable(key = " ...

  4. SpringBoot @Cacheable Redis 设置缓存过期时间

    1.x 设置 @Bean @Primary public CacheManager cacheManager(RedisTemplate redisTemplate) {RedisCacheManag ...

  5. Spring Boot2 整合 Ehcache

    用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...

  6. 一起来学SpringBoot(十)缓存的使用

    Spring Framework支持透明地向应用程序添加缓存.从本质上讲,抽象将缓存应用于方法,从而根据缓存中可用的信息减少执行次数.缓存逻辑应用透明,不会对调用者造成任何干扰.只要通过@Enable ...

  7. Redis之sql缓存

    1.环境搭建 <!-- RedisTemplate --><dependency><groupId>org.springframework.boot</gro ...

  8. 项目学习--谷粒商城

    1. 微服务搭建 本地安装虚拟机,静态IP划分和docker的使用 微服务功能模块介绍以及业务模块划分与抽取 2. 前端搭建 3. 后端业务代码完善 云储存OSS的整合与使用 JSR303校验以及自定 ...

  9. ehchache验证缓存过期的api_SpringBoot - 缓存的使用详解1(使用Ehcache 2.x缓存)

    Spring 3.1中开始对缓存提供支持,核心思路是对方法的缓存,当我们调用一个方法时,将方法的参数和返回值作为 key/value缓存起来,当再次调用该方法时,如果缓存中有数据,就直接从缓存中获取, ...

最新文章

  1. 【Java】Cloneable 接口讲解 (包含浅拷贝与深拷贝不一样的实现讲解)
  2. 更多传媒巨头或进军大数据产业
  3. eclipse中文版界面设置黑色_硬核干货总结IDEA开发的26个常用设置
  4. linux tree命令源码,[转帖]linux tree命令--显示目录的树形结构
  5. 程序员面试金典 - 面试题 17.19. 消失的两个数字(数学/位运算)
  6. java点赞功能实现_JavaWeb中点赞功能的实现及完整实例
  7. SQL server常用查询
  8. 用RDLC报表(一)
  9. SpringCloud工作笔记084---SpringCloud项目中,关于防止表单提交_使用redis+Aspect面向切面实现
  10. fio 磁盘IO性能测试
  11. Unix编程艺术-翻译-开篇
  12. MongoDB双机热备份
  13. python四级是什么水平_四级能过的水平大概什么水平?
  14. 微信企业号开发:企业支付基础
  15. idea如何设置导包不带*号
  16. Icon glyphs 小图标命名收藏
  17. libp2p kad 迭代查询
  18. grubbs准则 matlab_莱因达 ( PauTa)准则、格拉布斯 ( Grubbs)准则、肖维纳Chauvenet 三者的区别...
  19. python读awx文件_Ansible之AWX安装部署
  20. [luogu p1892] [BOI2003]团伙

热门文章

  1. 台式计算机拆装过程和注意事项,台式电脑(拆卸/安装)CPU最全图文教程
  2. LG显示器L194CW拆下底座
  3. 转 - msdn 离线版的下载 终于找到了
  4. (收集)一些好用的漏洞库网站:含工控安全
  5. 【JavaSE入门】:Java运算符及进制转换
  6. Jmeter 断言的使用(响应断言,json断言,断言响应时间)
  7. 怎样获得Vollar,玩转VDS详解
  8. 林期苏曼属性标签编辑_解析制作条形码的相关属性
  9. 计算机网络和电信网络融合趋势,网络的发展趋势
  10. python下载量化策略_掘金量化Python经典策略.pdf