MST

星途 面试题库

面试题:缓存设计之中等难度:缓存击穿解决方案阐述

请详细阐述缓存击穿的概念,并且说明至少两种常见的解决方案及其原理。
27.1万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

缓存击穿概念

缓存击穿指的是在高并发场景下,一个热点 key 失效瞬间,大量请求同时访问该 key,这些请求发现缓存中没有数据,于是都去访问数据库,导致数据库瞬间承受巨大压力,甚至可能造成数据库雪崩。例如电商大促时,某个热门商品的缓存失效,大量用户同时请求该商品信息,这些请求直接涌向数据库。

常见解决方案及其原理

  1. 互斥锁(Mutex)
    • 原理:当一个请求发现缓存中热点 key 失效时,先获取一把互斥锁(如 Redis 的 SETNX 命令实现互斥锁)。只有获取到锁的请求才能去查询数据库并将数据更新到缓存,其他未获取到锁的请求等待。获取锁的请求处理完后释放锁,其他等待的请求再次尝试获取锁,此时缓存已有数据,直接从缓存获取。这种方式通过互斥机制,避免大量请求同时查询数据库。
  2. 热点数据永不过期
    • 原理:对于热点数据,设置一个很长的过期时间,比如一年甚至更久,使其在业务周期内不会过期。同时,使用异步线程定期更新缓存数据,确保数据的实时性。这样在业务高峰期,不会因为热点数据缓存过期而导致缓存击穿问题。