1. 缓存穿透
请求查一条根本不存在的数据。
缓存里没有,数据库里也没有,请求直接穿透缓存打库。
一直查就会把数据库干崩。
解决:
空结果也缓存,设个短过期时间
加布隆过滤器,提前判断数据存不存在
接口做参数校验、限流
2. 缓存击穿
一个热点 Key 突然过期了,一瞬间大量请求同时查这个 Key。
缓存没了,全部冲数据库,数据库扛不住。
解决:
热点 Key 永不过期
加互斥锁,只让一个线程去查库更新缓存
提前异步刷新缓存
3. 缓存雪崩
大批量缓存同时过期,或者 Redis 直接挂了。
所有请求一起打数据库,数据库直接雪崩宕机。
解决:
给过期时间加随机值,避免同时失效
搭建 Redis 集群,主从 + 哨兵
加多级缓存(本地缓存 + Redis)
服务降级、限流、熔断