SpringCache @Cacheable keyGenerator
有时候我们想自定义
@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相关推荐
- SpringCache @Cacheable 在同一个类中调用方法,导致缓存不生效的问题及解决办法...
由于项目需要使用SpringCache来做一点缓存,但自己之前没有使用过(其实是没有听过)SpringCache,于是,必须先学习之. 在网上找到一篇文章,比较好,就先学习了,地址是: https:/ ...
- 项目总结--3(@Cacheable的使用方法和使用技巧)
在项目中缓存是经常要用到的,之前用的缓存都是Redis做为缓存的,但是在实际工作中用到缓存的地方是非常多,但是又不是只有Redis这一种操作,实际中可以用到的缓存还有SpringBoot,中的@Cac ...
- spring cache注解@Cacheable参数key赋值
1 参数 @Cacheable(key ="#id") 一般这里会是 id ,但是可能与其它 entity的id重复. 2 前缀加参数 @Cacheable(key = " ...
- SpringBoot @Cacheable Redis 设置缓存过期时间
1.x 设置 @Bean @Primary public CacheManager cacheManager(RedisTemplate redisTemplate) {RedisCacheManag ...
- Spring Boot2 整合 Ehcache
用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...
- 一起来学SpringBoot(十)缓存的使用
Spring Framework支持透明地向应用程序添加缓存.从本质上讲,抽象将缓存应用于方法,从而根据缓存中可用的信息减少执行次数.缓存逻辑应用透明,不会对调用者造成任何干扰.只要通过@Enable ...
- Redis之sql缓存
1.环境搭建 <!-- RedisTemplate --><dependency><groupId>org.springframework.boot</gro ...
- 项目学习--谷粒商城
1. 微服务搭建 本地安装虚拟机,静态IP划分和docker的使用 微服务功能模块介绍以及业务模块划分与抽取 2. 前端搭建 3. 后端业务代码完善 云储存OSS的整合与使用 JSR303校验以及自定 ...
- ehchache验证缓存过期的api_SpringBoot - 缓存的使用详解1(使用Ehcache 2.x缓存)
Spring 3.1中开始对缓存提供支持,核心思路是对方法的缓存,当我们调用一个方法时,将方法的参数和返回值作为 key/value缓存起来,当再次调用该方法时,如果缓存中有数据,就直接从缓存中获取, ...
最新文章
- 【Java】Cloneable 接口讲解 (包含浅拷贝与深拷贝不一样的实现讲解)
- 更多传媒巨头或进军大数据产业
- eclipse中文版界面设置黑色_硬核干货总结IDEA开发的26个常用设置
- linux tree命令源码,[转帖]linux tree命令--显示目录的树形结构
- 程序员面试金典 - 面试题 17.19. 消失的两个数字(数学/位运算)
- java点赞功能实现_JavaWeb中点赞功能的实现及完整实例
- SQL server常用查询
- 用RDLC报表(一)
- SpringCloud工作笔记084---SpringCloud项目中,关于防止表单提交_使用redis+Aspect面向切面实现
- fio 磁盘IO性能测试
- Unix编程艺术-翻译-开篇
- MongoDB双机热备份
- python四级是什么水平_四级能过的水平大概什么水平?
- 微信企业号开发:企业支付基础
- idea如何设置导包不带*号
- Icon glyphs 小图标命名收藏
- libp2p kad 迭代查询
- grubbs准则 matlab_莱因达 ( PauTa)准则、格拉布斯 ( Grubbs)准则、肖维纳Chauvenet 三者的区别...
- python读awx文件_Ansible之AWX安装部署
- [luogu p1892] [BOI2003]团伙