Redis缓存三剑客
1. 缓存穿透
* 定义:
一个数据在 数据库和Redis 中都没有值, DB查询不到数据也不会写入数据库, 短时间内有大量对这个数据的请求就会同时访问数据库, 导致数据库奔溃
* 如何解决
缓存空值: 在数据库查询不到的这个数据时, 给Redis写入一个有时间限制的空值, 这样就不会有大量攻击请求同时攻击数据库
布隆过滤器:
2. 缓存击穿
* 定义:
我们在给某个Key设置了一个过期时间, 当过期时间到的时候, 短时间有大量对这个Key的访问请求, 导致大量对对这个Key的请求同时访问数据库, 导致数据库奔溃
* 怎么解决
给某些数据设置永不过期
使用互斥锁
设置一个逻辑过期的value
3. 缓存雪崩
* 定义
大量 key 同时失效或缓存服务整体不可用
* 怎么解决
设置随机的过期时间
构建高可用缓存集群
设置多级缓存
通过服务降级与熔断