Redis缓存穿透、击穿、雪崩的发生原因及解决方式

IT 文章2年前 (2023)发布 小编
1 0 0

Redis缓存问题的发生原因以及解决方式通常可以分为三种情况:

1. 缓存穿透(Cache Penetration)

原因

客户端查询不存在的数据,导致请求直接到存储层,增加负载甚至导致宕机。可能是由于业务误删除缓存或恶意攻击而导致。

解决方式

a. 缓存空对象:当存储层未命中后,仍将空值存入缓存层,客户端再次访问时直接返回空值。

ad

程序员导航

优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站

b. 布隆过滤器:在访问缓存之前使用布隆过滤器拦截请求,如果数据不存在则直接返回空值。

2. 缓存击穿(Cache Breakdown)

原因

热点数据缓存失效瞬间,大量请求直达存储层,导致服务崩溃。

解决方式

a. 不设置过期时间:对热点数据不设置过期时间,实现“物理”上的永不过期。

b. 逻辑过期时间:为每个数据设置逻辑过期时间,当数据逻辑过期时,使用单独的线程重建缓存。

ad

AI 工具导航

优网导航旗下AI工具导航,精选全球千款优质 AI 工具集

c. 互斥锁:对数据访问加互斥锁,一个线程访问数据时,其他线程等待,访问后重建缓存,其他线程可以直接从缓存中取值。

3. 缓存雪崩(Cache Avalanche)

原因

缓存中大量数据同时过期或Redis节点故障,导致所有请求直达存储层,可能导致数据库宕机。

解决方式

a. 随机过期时间:在设置过期时间时附加一个随机数,避免大量键同时过期。

b. 降级和熔断:发生雪崩时,若访问的不是核心数据,可以直接返回预定义信息/空值/错误信息,或者对于缓存接口的请求直接返回,不访问Redis。

c. 高可用的Redis服务:部署多个Redis实例,使用哨兵或集群模式,即使某个节点宕机,服务仍然保持可用。

这些解决方式可以根据具体情况选择和组合,以确保缓存系统的可靠性和性能。

ad

免费在线工具导航

优网导航旗下整合全网优质免费、免注册的在线工具导航大全

© 版权声明

相关文章

暂无评论

暂无评论...