缓存穿透是利用Redis和mysql的机制(Redis缓存一点不存在,就访问数据库),直接绕过缓存访问mysql,而制造db请求压力 一般在代码中防止该现象发生 //数据库中不存在该sku //为了防止缓存穿透,null或者空字符串值设置给redis jedis.setex("sku:"+skuId+":info",60*3,JSON.toJSONString("")); public PmsSkuInfo getSkuById(String skuId) { PmsSkuInfo skuInfo=new PmsSkuInfo(); //'链接缓存 Jedis jedis = redisUtil.getJedis(); //查询缓存 String skuKey="sku:"+skuId+":info"; String skuJson = jedis.get(skuKey); if (StringUtils.isNotBlank(skuJson)){ PmsSkuInfo pmsSkuInfo = JSON.parseObject(skuJson, PmsSkuInfo.class); }else { //如果缓存中没有,查询mysql skuInfo = getSkuByIdFromDb(skuId); if (skuInfo!=null){ //mysql查询结果存入Redis jedis.set("sku:"+skuId+":info",JSON.toJSONString(skuInfo)); }else { //数据库中不存在该sku //为了防止缓存穿透,null或者空字符串值设置给redis jedis.setex("sku:"+skuId+":info",60*3,JSON.toJSONString("")); } } jedis.close(); return skuInfo; }
侵权删
防止缓存穿透
最新推荐文章于 2024-06-25 11:22:13 发布