缓存穿透解决 查询的key在redis中不存在,对应的id在数据库也不存在,此时被非法用户进行攻击,大量的请求会直接打在db上,造成宕机,从而影响整个系统,这种现象称之为缓存穿透。 解决方案:把空的数据也缓存起来,比如空字符串,空对象,空数组或list List<CategoryVO> list = new ArrayList<>(); String catsStr = redisOperator.get("cat:" + rootCatId); if (StringUtils.isBlank(catsStr)) { list = categoryService.getcatList(rootCatId); if (list != null && list.size() > 0) { redisOperator.set("cat:" + rootCatId, JsonUtils.objectToJson(list)); } else { //为空也存进Redis redisOperator.set("cat:" + rootCatId, JsonUtils.objectToJson(list), 5*60); } } else { list = JsonUtils.jsonToList(catsStr, CategoryVO.class); } 缓存雪崩预防 设置永不过期,手动更新过期时间错开多缓存结合,Mencache的过期时间更久:Redis->Memcache->Database采购第三方Redis(Aliyun)