缓存穿透(查不到)
用户想要查询一个数据,缓存中没有,然后到数据库中去查,发现数据库中也没有,这个时候如果有人恶意发起大量的请求查询数据库中没有的数据,那么就会给数据库造成巨大的压力,这就是缓存穿透!
解决方案
- 布隆过滤器
- 缓存空对象
缓存击穿(量太大,缓存过期)
有一个非常热点的key过期时间到了突然失效了,那么在这一瞬间所有的请求都落在这个点上,就会造成缓存的击穿,导致大量的请求落到数据库上
解决方案
- 设置热点key永不过期
- 数据库加互斥锁,只能有一个线程来访问数据库,在这个期间开启一个线程去重建缓存
缓存雪崩(缓存大量过期,redis宕机)
解决方案
- 搭建redis的集群(异地多活!)
- 限流降级
- 数据预热,设置不同的缓存过期时间,避免大量的缓存同时过期