博客主页:我的主页
欢迎点赞 收藏 留言 欢迎讨论!
本文由 【泠青沼~】 原创,首发于 CSDN
由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!个人主页
目录
- 一、多个参数共同作为缓存的key
- 二、自定义参数作为缓存的key
- 三、以方法名作为缓存的key
- 三、自定义缓存
一、多个参数共同作为缓存的key
@Cacheable(cacheNames = "c2")
public User getUserByid2(Long id,String username){
System.out.println("getUserByid:"+id);
User user = new User();
user.setId(id);
user.setUsername(username);
System.out.println(user.toString());
return user;
}
二、自定义参数作为缓存的key
@Cacheable(cacheNames = "c2",key = "#id")
public User getUserByid2(Long id,String username){
System.out.println("getUserByid:"+id);
User user = new User();
user.setId(id);
user.setUsername(username);
System.out.println(user.toString());
return user;
}
@Test
void contextLoads1() {
User u1 = userService.getUserByid2(98L, "dong");
User u2 = userService.getUserByid2(98L, "lisi");
}
三、以方法名作为缓存的key以参数id作为key会出现逻辑错误,当调用第一次getUserByid2方法时,存入key为id,值为dong,当调用第二次getUserByid2方法时,因为已经存入缓存id,所以不会进入第二次getUserByid2方法,所以lisi不能进入缓存
@Cacheable(cacheNames = "c2",key = "#root.method.name")//以当前方法的名字作为key值
@Cacheable(cacheNames = "c2",keyGenerator = "myKeyGenerate")
public User getUserByid2(Long id,String username){
System.out.println("getUserByid:"+id);
User user = new User();
user.setId(id);
user.setUsername(username);
System.out.println(user.toString());
return user;
}
三、自定义缓存
@Component
public class MyKeyGenerate implements KeyGenerator {
@Override
public Object generate(Object target, Method method, Object... params) {
String s = target.toString()+":"+method.getName()+":"+ Arrays.toString(params);
return s;
}
}
//将myKeyGenerate注入
@Cacheable(cacheNames = "c2",keyGenerator = "myKeyGenerate")
public User getUserByid2(Long id,String username){
System.out.println("getUserByid:"+id);
User user = new User();
user.setId(id);
user.setUsername(username);
System.out.println(user.toString());
return user;
}



