Redis缓存雪崩、缓存击穿和缓存穿透(学习Redis必记)
本文讲述缓存三兄弟的爱恨情长。
缓存雪崩:
介绍:
大量缓存数据同一时间过期(失效)或者Redis宕机,导致大量请求直接访问数据库,使数据库压力山大,甚至宕机,致使连锁反应,使得整个系统崩溃。
产生原因:
- 大量缓存同时过期
- Redis宕机
应对策略:
-
在过期时间后面加个随机值,使得过期时间均匀分布
-
互斥锁,保证同一时间内只有一个请求构建缓存
-
逻辑过期,缓存"永不过期",单独开个线程后台处理缓存。
-
服务熔断、限流
-
搭建Redis集群
缓存击穿
介绍:
缓存中的某个热点数据过期,大量请求访问该热点数据,直接访问数据库,数据库被冲垮。
产生原因:
- 热点数据过期
应对策略:
- 互斥锁
- 逻辑过期
缓存穿透
介绍:
请求的数据既不在缓存,也不再数据库里,如果同时有大量这样的请求,缓存也无法构建,只能都访问数据库,导致数据库压力剧增,甚至宕机。
产生原因:
- 请求的数据既不在缓存,也不在数据库
应对策略:
- 缓存null值
- 加强非法请求判断
- 布隆过滤器(哈希 + 位图)