當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot @Cacheable自定义KeyGenerator
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java多线程(五):线程池应该设置多少
- 下一篇: SpringBoot @Cacheabl