1. 缓存穿透

缓存穿透是指当某个请求查询不存在于缓存中的数据,而且该数据在数据库中也不存在,因此每次请求都会直接访问数据库,导致数据库压力过大。攻击者可以通过构造一些恶意请求,来不断地攻击应用程序,导致应用程序崩溃。

解决方案:

(1)使用布隆过滤器,将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存储系统的查询压力。

(2)缓存空对象,如果数据库查询返回的数据为空,则在缓存中设置一个空对象,这样下次查询同样的数据时,就可以从缓存中获取空对象,而不会再次访问数据库。

  1. 缓存雪崩

缓存雪崩是指在某个时间段内,缓存中大量的数据同时失效,导致所有的请求都落在了底层的存储系统中,导致存储系统瞬间压力过大,甚至崩溃。

解决方案:

(1)设置不同的过期时间,避免所有的缓存数据同时失效。

(2)使用分布式锁,避免大量的请求同时访问底层存储系统。

(3)使用多级缓存,将热点数据缓存到更快、更可靠的缓存中,可以有效避免缓存雪崩。

  1. 缓存击穿

缓存击穿是指当某个请求查询的数据在缓存中不存在,但是该数据在数据库中存在,因此每次请求都会直接访问数据库,导致数据库压力过大。

解决方案:

(1)使用互斥锁,避免大量的请求同时访问底层存储系统。

(2)使用缓存预热,提前将热点数据缓存到缓存系统中。

(3)使用异步刷新缓存,当缓存过期时,不立即刷新缓存,而是异步刷新,避免大量的请求同时访问底层存储系统

redis的缓存穿透雪崩击穿问题的介绍和解决

原文地址: https://www.cveoy.top/t/topic/fl4A 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录