spring cache 的 参数 key 赋值

2019-03-27  本文已影响0人  良人与我

spring的注解可以让我们方便的管理缓存

1 通过参数

@Cacheable(key ="#id")

一般这里会是 id ,但是可能与其它 entity的id重复。

2 前缀加参数

@Cacheable(key = "'com:test:'+#id")

但是给 key 赋值 会导致代码不够优雅,因为 缓存、更新、失效 都要给key赋值。
可以定义全局变量解决此问题
public static final String KEY_NAME = "'com:test:'";
@Cacheable(key = KEY_NAME +"+#id")

3 自定义keyGenerator

@Cacheable(keyGenerator="keyGenerator")

@Bean
    @Override
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object o, Method method, Object... objects) {
                StringBuilder sb = new StringBuilder();
                //这里可以获取 类的 name
                sb.append(method.getReturnType().getName()).append(".");
                for (Object obj : objects) {
                    sb.append(obj.toString());
                }
                System.out.println("keyGenerator=" + sb.toString());
                return sb.toString();
            }
        };
    }
上一篇下一篇

猜你喜欢

热点阅读