一提到Redis缓存,我们不得不了解的三个问题就是:缓存雪崩、缓存击穿和缓存穿透。这三个问题一旦发生,会导致大量的请求直接请求到数据库层。如果并发压力大,就会导致数据库崩溃。那p0级的故障是没跑了。
今天我们就来详细的了解这个三个问题诱因以及如何解决。
废话不多说,我们直接开搞!!!
一、缓存雪崩
什么是缓存雪崩?缓存雪崩就是大量请求无法在redis缓存中进行处理,而是直接发送到了数据库层,使得数据库压力陡增。就好像redis一下子突然失效了一样。一般造成缓存雪崩主要有两个原因,我们来一一分析一下。
1.缓存中大量数据同时过期
缓存中大量数据同时过期,就会导致大量请求无法在redis缓存层面进行处理。具体来说,就是给redis中大量数据设置了相同的过期时间,一旦它们同时失效,应用就会把请求直接发送给数据库,直接从数据库中读取数据。如果应用的并发量很大,那数据库的压力就会很大。如下图所示:
针对大量数据同时失效带来的缓存雪崩问题,我们一般采取以下两种解决方案。 (1)我们在开发过程中要避免给大量数据设置相同的过期时间。我们可以在给数据设置过期时间时给时间加一个很小的随机数,这样不同数据的过期时间就会有所差别,但差别也不会太大,保证数据在一定范围内过期,从而满足业务层要求同时过期的需要。 (2)服务降级。所谓的服务降级,是指发生缓存雪崩后&#