缓存穿透
业务场景
/**
* 缓存穿透场景
* 要是数据库没有查询到数据,自然没有放到缓存中,用户大量的请求来访问该接口,就会查询多次数据库,造成数据库压力过大
* 解决:
* 数据库中没有查询到数据,也将他放到缓存中,只不过缓存中数据也是空的,避免了缓存击穿
*
* 查询的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服务