阅读量: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; }