面试题答案
一键面试缓存击穿概念
缓存击穿指的是在高并发场景下,一个热点 key 失效瞬间,大量请求同时访问该 key,这些请求发现缓存中没有数据,于是都去访问数据库,导致数据库瞬间承受巨大压力,甚至可能造成数据库雪崩。例如电商大促时,某个热门商品的缓存失效,大量用户同时请求该商品信息,这些请求直接涌向数据库。
常见解决方案及其原理
- 互斥锁(Mutex)
- 原理:当一个请求发现缓存中热点 key 失效时,先获取一把互斥锁(如 Redis 的 SETNX 命令实现互斥锁)。只有获取到锁的请求才能去查询数据库并将数据更新到缓存,其他未获取到锁的请求等待。获取锁的请求处理完后释放锁,其他等待的请求再次尝试获取锁,此时缓存已有数据,直接从缓存获取。这种方式通过互斥机制,避免大量请求同时查询数据库。
- 热点数据永不过期
- 原理:对于热点数据,设置一个很长的过期时间,比如一年甚至更久,使其在业务周期内不会过期。同时,使用异步线程定期更新缓存数据,确保数据的实时性。这样在业务高峰期,不会因为热点数据缓存过期而导致缓存击穿问题。