面试题答案
一键面试缓存雪崩产生的原因
缓存雪崩指的是在大量缓存数据同时过期失效或者缓存服务器宕机时,大量原本应该从缓存获取的数据请求直接落到数据库上,导致数据库瞬间承受巨大压力,甚至可能因不堪重负而崩溃,影响整个系统的正常运行。主要原因有:
- 缓存过期时间设置不合理:如果大量缓存数据设置了相同或相近的过期时间,当这些数据同时过期时,就会引发缓存雪崩。
- 缓存服务器故障:如缓存服务器硬件故障、网络问题、软件错误等导致整个缓存服务不可用,所有依赖缓存的请求都会直接访问数据库。
常见应对策略及其原理
- 随机设置过期时间
- 策略:为每个缓存数据设置一个随机的过期时间,避免大量数据同时过期。
- 原理:通过分散过期时间,使得缓存失效时间均匀分布,不会在某一时刻集中失效,从而减轻数据库压力。即使部分缓存过期,仍有其他缓存可以处理请求,防止大量请求同时涌向数据库。
- 使用二级缓存
- 策略:在原有的主缓存基础上,增加一层二级缓存。当主缓存失效时,先从二级缓存获取数据。
- 原理:二级缓存作为备用缓存,在主缓存失效时充当缓冲层。即使主缓存中的大量数据同时过期,二级缓存可以暂时提供数据,减少直接访问数据库的次数,为数据库分担压力,给主缓存重新加载数据争取时间。
- 缓存预热
- 策略:在系统启动阶段,预先将部分热点数据加载到缓存中,并设置合理的过期时间。
- 原理:提前将可能被大量访问的数据加载到缓存,避免系统刚上线或重启后因缓存无数据,大量请求直接访问数据库。通过缓存预热,系统在运行初期就有缓存数据可以处理请求,降低数据库在启动阶段的压力,防止缓存雪崩。
- 互斥锁
- 策略:当缓存失效时,使用互斥锁(如分布式锁)保证同一时间只有一个请求去查询数据库并更新缓存,其他请求等待该请求完成,从缓存中获取数据。
- 原理:通过互斥锁限制并发访问数据库的请求数量,避免大量请求同时查询数据库,确保数据库不会因瞬间大量请求而崩溃。同时,成功获取数据并更新缓存的请求可以使后续请求直接从缓存获取数据,恢复缓存的正常使用。