Spring Cache 自定义缓存 key

🎈博客主页:🌈我的主页🌈
🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏
🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩🚩🚩
🎈由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!🌠个人主页



🌟 一、多个参数共同作为缓存的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");
    }

以参数id作为key会出现逻辑错误,当调用第一次getUserByid2方法时,存入key为id,值为dong,当调用第二次getUserByid2方法时,因为已经存入缓存id,所以不会进入第二次getUserByid2方法,所以lisi不能进入缓存

🌟 三、以方法名作为缓存的key

@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;
    }

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值