详解redis(16):缓存击穿

一、什么是缓存击穿?

缓存击穿
某一个"热点 Key"在某一时刻失效 ,大量并发请求同时访问这个 Key,导致请求瞬间全部打到数据库,数据库压力骤增。

为什么叫"击穿"?

缓存是"墙"

热点 Key 是"薄弱点"

一过期 → 并发请求 把缓存打穿

二、缓存击穿是怎么发生的?

典型场景(非常真实)

首页商品信息

热门文章

秒杀商品库存

明星用户信息

不是所有 key 失效,而是一个 key 被并发"围殴"

缓存击穿的完整过程

1. 热点 key 到期
2. Redis 返回 miss
3. 高并发请求同时查 DB
4. DB QPS 暴涨
5. 服务线程阻塞
6. 接口超时 / 崩溃

三、如何解决缓存击穿?

同一时间,只允许一个请求去查数据库

一、互斥锁

思路

缓存 miss 时

先抢锁

只有抢到锁的人查 DB

其他请求等待 / 返回旧值

二、热点数据永不过期

Redis key 不设置 TTL

value 中带过期时间

三、提前刷新

热点 key

到期前主动更新

相关推荐
xiaoliuliu1234513 小时前
redis-windows-7.2.3安装步骤详解(附Redis配置与Windows服务注册)
数据库·windows·redis
dFObBIMmai13 小时前
如何应对高级SQL注入_配置数据库审计实时监控流量
jvm·数据库·python
Elastic 中国社区官方博客13 小时前
通过受管控的控制平面加速商品陈列优化
大数据·数据库·人工智能·elasticsearch·搜索引擎·平面·ai
郝开13 小时前
Spring Cloud Gateway 3.5.14 使用手册
java·数据库·spring boot·gateway
y = xⁿ13 小时前
Redis八股学习日记:数据结构;跳表的底层;Reids的事务机制
数据结构·redis·学习
6Hzlia13 小时前
Hot 100 刷题计划】 LeetCode 146. LRU 缓存 | C++ 哈希表+双向链表
c++·leetcode·缓存
troyqu13 小时前
Mysql(四)InnoDB怎么确保RR下的数据一致性
数据库·后端·mysql
Controller-Inversion13 小时前
146. LRU 缓存
缓存
2301_7662834413 小时前
Golang怎么实现防重复提交_Golang如何用Token机制防止表单重复提交【技巧】
jvm·数据库·python
qq_4142565713 小时前
CSS如何实现元素在容器内居中_利用margin-auto技巧
jvm·数据库·python