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相关推荐

  1. SpringBoot @Cacheable缓存注解的使用

    文章目录 1. 引入缓存依赖 2. application.properties 配置 3. 准备基本的Controller.Service代码 4. @Cacheable注解 4.1 cacheNa ...

  2. springboot banner在线生成_SpringBoot系列教程10--小花样之SpringBoot配置自定义Banner

    SpringBoot系列教程10--小花样之SpringBoot配置自定义Banner 作者:一一哥 一. Spring Boot 常用配置 本章节主要介绍一下 Spring Boot 中的一些常用配 ...

  3. springboot编写自定义过滤器

    springboot编写自定义过滤器 首先引入依赖,其次编写过滤器 @Configuration public class FilterRegisterConfig {@Beanpublic Filt ...

  4. Flowable springboot项目自定义中文字体

    Flowable springboot项目自定义中文字体 摘要:在flowable框架中,当我们想要集成springboot框架的时候,可能要设置中文字体,flowable6.4之前的版本因为没有可以 ...

  5. SpringBoot之自定义验证码

    代码地址如下: http://www.demodashi.com/demo/14280.html 项目介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问 ...

  6. springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版)

    springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) 参考文章: (1)springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) ( ...

  7. Springboot 之 自定义配置文件及读取配置文件

    读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. 核心 ...

  8. springboot Cacheable(redis),解决key乱码问题

    springboot Cacheable(redis),解决key乱码问题 参考文章: (1)springboot Cacheable(redis),解决key乱码问题 (2)https://www. ...

  9. SpringBoot2.x系列教程10--小花样之SpringBoot配置自定义Banner

    SpringBoot系列教程10--小花样之SpringBoot配置自定义Banner 作者:一一哥 一. Spring Boot 常用配置 本章节主要介绍一下 Spring Boot 中的一些常用配 ...

最新文章

  1. Solr 基础性能调优讲解
  2. Qt下简单的文件读取
  3. 使用pyinstaller打包python程序时问题记录
  4. 从零实现深度学习框架——常见运算的计算图
  5. 2013华为校园招聘机试题9月10日题(杭州)
  6. 搭建第一个springBoot 摘抄自蚂蚁课堂
  7. 【转载】COMSOL Multiphysics 5.3a 安装教程
  8. 20155322 2016-2017-2 《Java程序设计》第8周学习总结
  9. 数字通信之数字信号基带传输(九)
  10. python3必应壁纸爬虫练手
  11. 如何区分电梯卡为id卡ic卡_怎么看小区门禁卡是ic还是id
  12. 实现圆形头像(并且不管图大小都显示成固定尺寸)-和上一篇有点不同。
  13. 德国转专业申请计算机,详细攻略:在德国,如何转学或转专业?
  14. 扎拉赞恩 服务器 微信群,wow怀旧服扎拉赞恩任务怎么做-wow怀旧服扎拉赞恩的头颅在哪里-地点位置_牛游戏网...
  15. 矩阵运算库 C语言 (Matrix_hub)
  16. Seq2Seq实战——机器翻译
  17. Eclipes 如何创建一个简单的servlet
  18. 【技术应用】java通过url爬虫获取公众号文章内容
  19. curl命令调用接口
  20. 二进制表示浮点数_二进制数的浮点表示

热门文章

  1. 护航华油信通危化品运输,“共和国长子”背后的数字化力量
  2. android flash闪退,Android全面停止Flash Adobe专注HTML5
  3. 使用jdbc操作mysql数据库_java使用JDBC操作MYSQL数据库
  4. 创业阶段如何找客户_初创企业在不同的创业阶段:如何做好市场营销?
  5. java aar 文件,将本地.aar文件添加到我的gradle构建中
  6. java springboot 搭建_springboot搭建java项目
  7. key位置 win10生成的ssh_华为路由器配置SSH远程登录,就这么简单
  8. linux文件系统pdf_一篇文章理解Ext4文件系统的目录
  9. mysql连接nginx_nginx四层负载均衡连接mysql
  10. Python基础教程:hasattr() getattr() setattr() 使用方法详解