文章目录
- 问题
- 💬 Question 1
- 💬 Question 2
- 相关知识
问题
💬 Question 1
Q:什么是缓存击穿?如何解决?
A:缓存击穿是指某个热点Key在缓存刚好失效时,恰好有大量并发请求同时访问该Key,由于缓存失效,请求会直接打到数据库,这些并发的请求可能会瞬间将数据库压垮。解决的方式有两个,其一是使用互斥锁,在缓存失效时,只有一个线程能获取锁并查询数据库、重建缓存;其他线程等待锁释放后从缓存中读取数据,避免数据库被击穿。二是使用逻辑过期,缓存设置一个“逻辑过期时间”,即使过期也先返回旧数据,同时由一个线程加锁异步更新缓存。其他线程在检测到数据已过期且更新锁已被占用时,不会重复查询数据库,而是继续返回旧数据,避免并发请求同时打到数据库,从而有效防止缓存击穿,并可保证缓存数据相对较新。
💬 Question 2
Q:什么叫缓存雪崩?如何解决?
A:缓存雪崩是指在同一时间大量缓存 Key 同时失效,或者Redis 服务器整体不可用(如宕机),导致大量请求绕过缓存直达数据库,从而引发数据库压力激增,甚至造成系统崩溃的现象。解决方案主要是可以将缓存失效时间分散开,比如可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。(针对redis服务器宕机的情况,请移步下述链接自行了解)
相关知识
redis相关知识