MST

星途 面试题库

面试题:缓存设计中缓存击穿在复杂业务场景下的应对策略权衡

在一个电商秒杀业务场景中,商品库存缓存可能出现缓存击穿问题。该业务对数据一致性要求较高,且系统性能瓶颈主要在数据库层面。请全面分析并阐述应对缓存击穿可采用的各种策略,并权衡每种策略在该业务场景下的优缺点。
14.0万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

互斥锁策略

  • 实现方式:在缓存失效瞬间,只有一个请求能获取到互斥锁(如使用分布式锁),获取锁的请求去查询数据库并更新缓存,其他请求等待,锁释放后其他请求从缓存获取数据。
  • 优点:有效防止大量请求同时穿透到数据库,实现简单,能保证数据一致性。
  • 缺点:性能会受影响,因为大量请求需等待锁释放,在高并发场景下,锁竞争激烈,可能成为性能瓶颈。

永不过期策略

  • 实现方式:设置缓存时不设置过期时间,或者在代码中对缓存数据进行逻辑过期处理(即缓存数据里包含过期时间字段,读取时判断是否逻辑过期,过期则异步更新)。
  • 优点:避免了缓存过期瞬间的击穿问题,能极大提升系统性能,因为无需频繁处理过期后的缓存重建。
  • 缺点:数据一致性相对较弱,逻辑过期处理时,在异步更新前,读取到的数据可能并非最新。而且缓存数据可能长期占用内存,若不及时清理,可能导致内存溢出。

二级缓存策略

  • 实现方式:设置一级缓存和二级缓存,一级缓存设置较短过期时间,二级缓存设置较长过期时间。当一级缓存失效,先从二级缓存获取数据返回,同时异步更新一级缓存和二级缓存。
  • 优点:在一定程度上缓解了缓存击穿问题,系统性能有所提升,因为一级缓存失效可从二级缓存获取,减少了对数据库的访问频率。同时能较好保证数据一致性,异步更新能及时刷新缓存。
  • 缺点:增加了缓存维护复杂度,需要管理两级缓存的更新、过期等逻辑,并且二级缓存占用更多内存资源。

限流策略

  • 实现方式:对访问秒杀接口的请求进行限流,如使用令牌桶算法、漏桶算法等,限制单位时间内进入系统的请求数量。
  • 优点:可以有效控制到达数据库的请求量,防止因大量请求同时穿透导致数据库压力过大而崩溃,保障系统整体的稳定性。
  • 缺点:可能会拒绝部分用户请求,影响用户体验,而且如何设置合理的限流阈值较难把握,阈值过高起不到限流效果,阈值过低则会影响业务吞吐量。