缓存穿透
原理: 查询一个不存在的数据 ,redis缓存没有该数据,每一次都要查询数据库,导致数据库崩溃
情况:恶意攻击
解决方案:缓存空数据,布隆过滤器 请求之前判断是否存在
什么是布隆过滤器?
主要检索一个元素是否在集合里。首先初始化一个较大的数组,里面存放0和1,刚开始都是0,但一个key进来时,经过三次hash计算就将他
基于模与数组长度将的下标改成1。这个布隆过滤器是存在误差的,那可以设置误差率在5%就好了。
缓存击穿
原理: 某一数据过期,同时有大量同一请求过来,把数据库压垮
互斥锁: 线程1查数据,获取互斥锁 线程二查询缓存未命中 获取锁 休眠等待 完成缓存命中 (线程1一完成就一直等待)
特点: 强一致 性能差
逻辑过期: 线程1查数据,获取互斥锁,开启新线程
特点: 高可用 性能优
缓存雪崩
原理: 大量数据过期,同时有大量请求同时请求这些过期数据,导致数据库处理不过来,造成宕机
解决方案:分批次给过期数据增加1-5分钟的随即时间过期