SpringBoot @Cacheable自定义KeyGenerator
1. 概述
SpringBoot 使用 @Cacheable 可以方便的管理缓存数据,在不指定 key 属性的情况下,默认使用 SimpleKeyGenerator 生成 key。除此之外,我们也可以自定义实现 KeyGenerator 接口,生成自己的 key 名称策略。
2. MySimpleKey 类
MySimpleKey类的作用是存放参数数据,必须实现equals、hashCode。如果需要自定义key格式,同样需要实现toString接口,下面的例子是把参数用逗号分隔。
public class MySimpleKey implements Serializable {public static final MySimpleKey EMPTY = new MySimpleKey(new Object[0]);private final Object[] params;private transient int hashCode;public MySimpleKey(Object... elements) {Assert.notNull(elements, "Elements must not be null");this.params = (Object[])elements.clone();this.hashCode = Arrays.deepHashCode(this.params);}public boolean equals(@Nullable Object other) {return this == other || other instanceof MySimpleKey && Arrays.deepEquals(this.params, ((MySimpleKey)other).params);}public final int hashCode() {return this.hashCode;}public String toString() {return StringUtils.arrayToCommaDelimitedString(this.params);}
}
3. MyKeyGenerator 类
MyKeyGenerator 实现 KeyGenerator 的接口,里面只有一个 generate 方法
public class MyKeyGenerator implements KeyGenerator {@Overridepublic Object generate(Object o, Method method, Object... objects) {if (objects.length == 0) {return MySimpleKey.EMPTY;} else {if (objects.length == 1) {Object param = objects[0];if (param != null && !param.getClass().isArray()) {return param;}}return new MySimpleKey(objects);}}
}
定义MyKeyGenerator Bean:
@Component
public class MyRedisConf {@Beanpublic MyKeyGenerator myKeyGenerator(){return new MyKeyGenerator();}
}
4. 配置keyGenerator
在 @Cacheable 配置 keyGenerator 属性,值就是前面配置的Bean名称
@Override@Cacheable(value = {"REDIS:GETSTRING3"}, keyGenerator = "myKeyGenerator")public String getString3(String tag, String name) {return tag + " " + name;}
测试结果如下,tag、name 参数确实以逗号分隔
127.0.0.1:6379[5]> KEYS *
1) "REDIS:GETSTRING3::hello,zhangsan"
SpringBoot @Cacheable自定义KeyGenerator相关推荐
- SpringBoot @Cacheable缓存注解的使用
文章目录 1. 引入缓存依赖 2. application.properties 配置 3. 准备基本的Controller.Service代码 4. @Cacheable注解 4.1 cacheNa ...
- springboot banner在线生成_SpringBoot系列教程10--小花样之SpringBoot配置自定义Banner
SpringBoot系列教程10--小花样之SpringBoot配置自定义Banner 作者:一一哥 一. Spring Boot 常用配置 本章节主要介绍一下 Spring Boot 中的一些常用配 ...
- springboot编写自定义过滤器
springboot编写自定义过滤器 首先引入依赖,其次编写过滤器 @Configuration public class FilterRegisterConfig {@Beanpublic Filt ...
- Flowable springboot项目自定义中文字体
Flowable springboot项目自定义中文字体 摘要:在flowable框架中,当我们想要集成springboot框架的时候,可能要设置中文字体,flowable6.4之前的版本因为没有可以 ...
- SpringBoot之自定义验证码
代码地址如下: http://www.demodashi.com/demo/14280.html 项目介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问 ...
- springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版)
springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) 参考文章: (1)springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) ( ...
- Springboot 之 自定义配置文件及读取配置文件
读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. 核心 ...
- springboot Cacheable(redis),解决key乱码问题
springboot Cacheable(redis),解决key乱码问题 参考文章: (1)springboot Cacheable(redis),解决key乱码问题 (2)https://www. ...
- SpringBoot2.x系列教程10--小花样之SpringBoot配置自定义Banner
SpringBoot系列教程10--小花样之SpringBoot配置自定义Banner 作者:一一哥 一. Spring Boot 常用配置 本章节主要介绍一下 Spring Boot 中的一些常用配 ...
最新文章
- Solr 基础性能调优讲解
- Qt下简单的文件读取
- 使用pyinstaller打包python程序时问题记录
- 从零实现深度学习框架——常见运算的计算图
- 2013华为校园招聘机试题9月10日题(杭州)
- 搭建第一个springBoot 摘抄自蚂蚁课堂
- 【转载】COMSOL Multiphysics 5.3a 安装教程
- 20155322 2016-2017-2 《Java程序设计》第8周学习总结
- 数字通信之数字信号基带传输(九)
- python3必应壁纸爬虫练手
- 如何区分电梯卡为id卡ic卡_怎么看小区门禁卡是ic还是id
- 实现圆形头像(并且不管图大小都显示成固定尺寸)-和上一篇有点不同。
- 德国转专业申请计算机,详细攻略:在德国,如何转学或转专业?
- 扎拉赞恩 服务器 微信群,wow怀旧服扎拉赞恩任务怎么做-wow怀旧服扎拉赞恩的头颅在哪里-地点位置_牛游戏网...
- 矩阵运算库 C语言 (Matrix_hub)
- Seq2Seq实战——机器翻译
- Eclipes 如何创建一个简单的servlet
- 【技术应用】java通过url爬虫获取公众号文章内容
- curl命令调用接口
- 二进制表示浮点数_二进制数的浮点表示
热门文章
- 护航华油信通危化品运输,“共和国长子”背后的数字化力量
- android flash闪退,Android全面停止Flash Adobe专注HTML5
- 使用jdbc操作mysql数据库_java使用JDBC操作MYSQL数据库
- 创业阶段如何找客户_初创企业在不同的创业阶段:如何做好市场营销?
- java aar 文件,将本地.aar文件添加到我的gradle构建中
- java springboot 搭建_springboot搭建java项目
- key位置 win10生成的ssh_华为路由器配置SSH远程登录,就这么简单
- linux文件系统pdf_一篇文章理解Ext4文件系统的目录
- mysql连接nginx_nginx四层负载均衡连接mysql
- Python基础教程:hasattr() getattr() setattr() 使用方法详解