Redis 缓存问题(一致性、穿透、击穿和雪崩)

简介:缓存机制能避免请求过多的直接与数据库操作,从而造成系统瓶颈,极大的提升了用户体验和系统稳定性。虽然给系统带来了一定质的提升,但是也带来一些问题。

1. 缓存一致性

  A. 定义:当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异的现象。

2. 缓存穿透

  A. 定义:在高并发场景下,如果某一个key被高并发访问,没有被命中缓存,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致大量的请求达到数据库,而当key对应的数据本身就是空的情况下,这就导致数据库中并发的执行了很多不必要的查询操作,从而导致巨大冲击和压力,针对并发查同一条缓存和数据库中都没有的数据

  B. 解决方案

    缓存空对象:如果是集合就缓存一个空集合,而非null,如果是对象就用字段标识来区分,但是失效时间应设置短一些;

    过滤:接口层增加校验;

    布隆过滤器(BloomFilter);

  C. BloomFilter实例

3. 缓存击穿

  A. 定义:是指缓存中没有数据,但是数据库是有数据的,例如缓存key到期,这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力,针对并发查同一条过期数据

  B. 解决方案:设置热点数据永不过期;服务限流、熔断或降级;加互斥锁;

  C. 分布式锁示例

4. 缓存雪崩

  A. 定义:指由于缓存的原因,如缓存服务器故障、key失效时间相同等,导致大量请求达到后端数据库,从而导致数据库崩溃,进而引发系统崩溃,针对并发查多条同时过期的数据

  B. 解决方案

    若因key失效时间相同,就让key失效时间错开;

    若因缓存服务器故障,建立分布式高可用的缓存系统,即缓存预备。

5. 缓存预热

  A. 定义:指系统上线后,将相关的缓存数据直接加载到缓存系统,这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题;

  B. 解决方案:代码+人工实现;定时刷新缓存。

 

可参考:Redis缓存问题及解决方案

posted @   如幻行云  阅读(173)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示