日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot @Cacheable自定义KeyGenerator

發(fā)布時間:2025/3/19 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。