缓存穿透
业务场景
/*** 缓存穿透场景* 要是数据库没有查询到数据,自然没有放到缓存中,用户大量的请求来访问该接口,就会查询多次数据库,造成数据库压力过大* 解决:* 数据库中没有查询到数据,也将他放到缓存中,只不过缓存中数据也是空的,避免了缓存击穿** 查询的key在redis中不存在* 对应的id在数据库中也不存在* 此时被非法用户进行攻击,大量的请求会直接打到db上* 造成宕机,从而影响到整个系统* 这种现象称之为缓存穿透** 解决方案:* 把空的数据缓存起来,比如空字符串、空对象、空数组和list*/if(subCatList != null && subCatList.size() > 0) {redisOperator.set(IndexConstant.catId + rootCatId, JsonUtils.objectToJson(subCatList));}else {redisOperator.set(IndexConstant.catId + rootCatId, JsonUtils.objectToJson(subCatList), 5*60);}
布隆过滤器
有值的 key 放到1,没有值的key放到0,通过判断0和1就知道当前key是否有值,没有值则不继续进入,则直接返回
缓存雪崩与预防
什么是缓存雪崩
雪崩预防
永不过期
过期时间错开
多缓存结合
采购第三方Redis【阿里云Redis服务】
根据公司需求、业务需求选购redis服务
