缓存击穿
某个数据失效,瞬间大量请求查询数据库,导致数据库崩溃。
解决方法:
- 加互斥锁,使没有缓存或者缓存失效的情况下,同一时间只有一个请求,防止数据库压力过大
- 热点数据不设置过期时间,后台异步更新数据
缓存穿透
查询一个不存在的数据,大量请求查询数据库,增加数据库负担。
解决方法:
- 禁止非法请求
- 使用布隆过滤器,如果判断不存在,直接返回
- 缓存空值并设置短暂的过期时间,把不存在的数据也缓存起来
缓存雪崩
多个数据同时失效,导致大量请求查询数据库,增加数据库负担或者崩溃。
解决方法:
- 过期时间随机化,避免同一时间大量缓存失效
- 加互斥锁,使没有缓存或者缓存失效的情况下,同一时间只有一个请求,防止数据库压力过大
- 缓存预热
- 多级缓存
- 服务熔断,暂停返回数据
