MST

星途 面试题库

面试题:缓存设计之高级难度:缓存雪崩对API限流与降级的影响及应对

如果在基于缓存的API限流与降级方案中发生了缓存雪崩,可能会对系统造成哪些影响?针对这些影响,你会从缓存设计的角度提出哪些应对措施,来保证API在缓存雪崩时仍能稳定提供服务。
32.5万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存雪崩可能对系统造成的影响

  1. 高并发请求数据库:大量原本从缓存获取的数据请求,因缓存失效同时涌向数据库,导致数据库瞬间承受巨大压力,可能引发数据库连接池耗尽、查询性能急剧下降甚至数据库服务崩溃。
  2. 系统响应时间变长:由于数据库处理能力受限,大量请求排队等待处理,使得整个系统的响应时间显著增加,用户体验变差。
  3. 服务不可用:若数据库无法承受高并发请求而崩溃,依赖该数据库的API服务将无法正常提供数据,导致服务不可用,影响业务正常运行。

从缓存设计角度的应对措施

  1. 设置不同的过期时间:避免大量缓存数据在同一时间过期,对缓存数据设置随机的过期时间,比如在原本过期时间的基础上,上下浮动一定比例的时间,这样可以分散缓存过期的时间点,降低缓存雪崩发生的概率。
  2. 使用缓存预热:在系统启动时,预先将一些热点数据加载到缓存中,并设置合理的过期时间,避免在系统运行初期因为缓存数据为空而导致大量请求直接访问数据库。
  3. 分级缓存:构建多级缓存结构,例如在本地缓存(如Guava Cache)和分布式缓存(如Redis)之间形成两级缓存。先从本地缓存获取数据,如果本地缓存未命中,再访问分布式缓存。即使分布式缓存出现雪崩,本地缓存仍能在一定程度上缓解数据库压力。
  4. 添加缓存标识:在缓存数据时,同时设置一个标识位,标识该数据是否是有效的真实数据。当缓存雪崩时,若获取到的是标识位异常的数据,可通过异步任务去更新缓存,同时返回兜底数据给用户,避免大量无效请求直接访问数据库。
  5. 采用兜底策略:为缓存数据设置兜底数据,当缓存雪崩发生,且无法及时从数据库获取到有效数据时,返回兜底数据给用户,保证服务的基本可用性,提升用户体验。兜底数据可以是预先设定的默认值、最近一次成功获取的数据等。