缓存雪崩 | 1、数据保存在缓存中,并设置了过期时间时,如果某一时刻,大量数据同时过期,此时,应用程序再访问这些数据的话,就会发生缓存缺失。 2、应用就会把请求发送给数据库,从数据库中读取数据。 3、如果应用的并发请求量很大,那么数据库的压力也就很大,这回进一步影响到数据库的其他业务请求处理,进而导致数据库崩溃。 | 1、给缓存数据的过期时间加上小的随机数,避免同时过期 2、缓存降级熔断 3、请求限流 4、Redis缓存主从集群 (建议通过切片集群的方式保证高可用,去中心化,比起主从+哨兵更好) |
缓存击穿 | 针对某个访问非常频繁的热点数据请求,无法在缓存中进行处理,紧接着访问该数据的大量请求,一下子都发送到后端数据库,导致数据库压力激增影响数据库处理其他请求。 | 1、热点数据不设过期时间 |
缓存穿透 | 1、要访问的数据既不是Redis缓存中也不再数据库中,导致请求在访问缓存时,发生缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据。 2、如果应用持续有大量请求访问数据,就会同时给缓存和数据库带来巨大压力 | 1.缓存空值或者缺省值。 2.使用布隆过滤器快速判断数据是否存在,避免从数据库中查询数据是否存在,减轻数据库压力。 3.前端对非法请求校验,避免请求进入缓存或者数据库。 |