栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Cache 自定义缓存 key

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Cache 自定义缓存 key

博客主页:我的主页
欢迎点赞  收藏 留言  欢迎讨论!
本文由 【泠青沼~】 原创,首发于 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");
    }

以参数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;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/877582.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号