雪崩(Cache Avalanche):

雪崩是指缓存中的大量数据同时失效或过期,导致大量的请求直接访问数据库,从而造成数据库负载突然增加,甚至导致系统崩溃的现象。
场景: 当缓存中的数据具有相同的过期时间,并且在某个时间点上同时失效时,会触发雪崩效应。

解决方案:

使用不同的过期时间,避免缓存同时失效。
在缓存失效时,通过加锁或者设置短暂的过期时间来避免大量请求同时进入数据库。
使用热点数据预加载,提前将热点数据加载到缓存中。

穿透(Cache Penetration):

穿透是指恶意请求或者不存在的数据不断地访问缓存,由于缓存无法命中,请求直接到达数据库,导致数据库负载过大的现象。
场景: 当请求的数据在数据库中不存在,但是恶意用户或者攻击者不断发送请求时,会导致缓存无法命中而直接访问数据库。

解决方案:

对请求参数进行有效性验证,过滤掉恶意请求。
使用布隆过滤器等技术,将可能存在的数据缓存起来,避免恶意请求直接访问数据库。

击穿(Cache Breakdown):

击穿是指某个热点数据在缓存中过期或者被删除,此时有大量的请求同时访问该数据,由于缓存未命中,导致请求直接访问数据库,增加了数据库负载。
场景: 当某个热点数据在缓存中过期或者被删除时,大量的请求同时访问该数据,造成缓存未命中而直接访问数据库。

解决方案:

使用互斥锁(Mutex Lock)或者分布式锁(Distributed Lock)来保护热点数据,防止大量请求同时访问。
使用缓存的“永远不过期”策略,即使热点数据过期也不会在缓存中删除,而是定期刷新缓存数据。

03-01 17:57