@Cacheable是基于注解的缓存技术在Spring 3.1被引入
1、缓存存在哪?2、为什么注解未生效?3、自定义KeyGenerator 生成键
文章图片
【SpringBoot|2021-08-06Spring @Cacheable注解的使用】
笔记 ------------------------
@Inherited是一个标识,用来修饰注解Class clazz = Sub.class;
//获取自身的注解。如果父类加@Inherited修饰,则获取的只是自身的注解和父类的注解
Arrays.toString(clazz.getAnnotations());
注解加在某个类A上时,假如类B继承了A,则B也会带上该注解。
@AliasFor("cacheNames")
String[] value() default {};
@AliasFor("value")
String[] cacheNames() default {};
任意设置value或者设置cacheNames属性的值,都能够通过另一个属性来获取值等等。
为了统一处理这些情况,Spring创建了@AliasFor标签。
1、缓存存在哪?缓存会存在redis里,默认的key是value设置的值。 2、为什么添加了@Cacheable,请求数据时没有缓存数据。
因为一个方法A调同一个类里的另一个有缓存注解的方法B,这样B是不走缓存的。
因为@Cacheable 是使用AOP 代理实现的 ,通过创建内部类来代理缓存方法,这样就会导致一个问题,类内部的方法调用类内部的缓存方法不会走代理,不会走代理,就不能正常创建缓存。
如:请求test()就只有a的缓存,b的缓存不生效
文章图片
3、自定义KeyGenerator 生成键
SpringBoot 使用 @Cacheable 可以方便的管理缓存数据,在不指定 key 属性的情况下,默认使用 SimpleKeyGenerator 生成 key。除此之外,我们也可以自定义实现 KeyGenerator 接口,生成自己的 key 名称策略。
需要注册到spring
@Bean
public CustomKeyGenerator customKeyGenerator() {
return new CustomKeyGenerator();
}
import com.alibaba.fastjson.JSONObject;
import org.springframework.cache.interceptor.KeyGenerator;
import java.lang.reflect.Method;
import java.util.StringJoiner;
/**
* 自定义redis键生成器
*/
@SuppressWarnings("NullableProblems")
public class CustomKeyGenerator implements KeyGenerator {
private static final String prefix = "CACHEABLE:";
@Override
public Object generate(Object o, Method method, Object... objects) {
StringJoiner joiner = new StringJoiner(":", prefix, "");
//类名
joiner.add(o.getClass().getSimpleName());
//方法名
joiner.add(method.getName());
//方法参数
for (Object param : objects) {
joiner.add(JSONObject.toJSONString(param));
}
return joiner.toString();
}}
//使用
@Cacheable(value = "https://www.it610.com/article/xx" ,keyGenerator = "myKeyGenerator")
推荐阅读
- 后端|35 设计优秀的分布式锁
- Java项目|1-1/2+1/3-1/4+1/5-...1/n 键盘获取n 结果小数;从键盘上输入n result = a+aa+aaa+aaaa+...n部分相加
- springboot|mybatis-plus代码生成器的使用
- 微服务|猿创征文| NoSQL数据库简介
- 面试|OSChina 周四乱弹 ——男生做女生那些亲密动作是有多难()
- 项目|基于springboot的特产购物系统
- #|java导出功能(多个sheet页数据导出)
- Mybatis|Mybatis——动态SQL
- #|java递归返回不确定层级的树状结构数据