Redis雪崩问题
缓存雪崩:大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩的问题。
缓存击穿:如果缓存中的某个热点数据过期了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是缓存击穿的问题。
缓存穿透:当用户访问的数据,既不在缓存中,也不在数据库中,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据,没办法构建缓存数据,来服务后续的请求。那么当有大量这样的请求到来时,数据库的压力骤增,这就是缓存穿透的问题。
redis缓存异常及一些应对方案:
缓存异常 |
产生原因 |
应对方案 |
缓存雪崩
|
大量数据同时过期
Redis 故障宕机
|
均匀设置过期时间,避免同一时间过期
互斥锁:保证同一时间只有一个应用在构建缓存,避免大批量请求打到mysql端的数据库上请求
台更新缓存,定时更新、消息队列通知更新,启动时热点数据提前预热
服务熔断、请求限流、构建 Redis 缓存高可靠集群
|
缓存击穿
|
频繁访问的热点数据过期
|
互斥锁:保证同一时间只有一个应用在构建缓存,避免大批量请求打到mysql端的数据库上请求
不给热点数据设置过期时间,由后台更新缓存
|
缓存穿透
|
访问的数据既不在缓存,也不在数据库
|
非法请求的限制,api接口增加token校验请求
缓存空值或者默认值
使用布降过滤器快速判断数据是否存在,推荐使用
|
参考链接:
http//redis.com.cn/redis-intro.html
https://www.xiaolincoding.com/redis/cluster/cache_problem.html