缓存穿透

avatar
作者
筋斗云
阅读量:0

目录

概念

业务逻辑改造

 代码实现


概念

用户请求查询的数据在缓存和数据库中都没有,那么最终请求都会进入到数据库,缓存会失效

两种解决方法:缓存NULL对象,使用布隆过滤器

业务逻辑改造

 代码实现

    解决缓存穿透问题    public Shop queryWithPassThtough(Long id){            //先从redis中查询缓存            String object = stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY + id);            //如果有直接返回            if(strUtil.isNotBlank(object)){ //StringUtil.isNotBlank                //转成Java对象                Shop bean = JSONUtil.toBean(object, Shop.class);                return bean;            }            //判断命中的是否是空值            if (object != null){                return null;            }            //如果没有,查询数据库            Shop shop = this.getById(id);            //如果数据库中没有,报错            if (shop == null){                //return Result.fail("没有该店铺");                //将" "写入redis                stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + id, " ",CACHE_NULL_TTL, TimeUnit.MINUTES);            return null;            }            //如果有,写入redis            stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + id,JSONUtil.toJsonStr(shop),30, TimeUnit.MINUTES);            return shop;      } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!