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();
}
};
}
网友评论