JAVA结合Redis处理缓存穿透问题

 

 

 

public List<WeixinMenu> getList() {
        List<WeixinMenu> weixinMenuList= (List<WeixinMenu>) redisTemplate.opsForValue().get("weixinMenuList");    //先在缓存中查询一遍
        if (weixinMenuList==null){
            synchronized (this){
                weixinMenuList= (List<WeixinMenu>) redisTemplate.opsForValue().get("weixinMenuList");   //如果缓存空了,在线程加锁的情况下再从缓存中查询一次
                if (weixinMenuList==null){              
                    weixinMenuList=WeixinMenuMng.getList();                 //还是没有查到,就从数据库查询,查询后放到缓存中
                    redisTemplate.opsForValue().set("weixinMenuList",weixinMenuList);
                }
            }
        }
        return weixinMenuList;
    }

  

posted @ 2020-03-13 13:58  yvioo  阅读(520)  评论(0编辑  收藏  举报