如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题

本文介绍了缓存系统中常见的三大问题:雪崩、穿透和并发,并提供了相应的预防和解决策略。缓存雪崩可通过缓存高可用、降级、备份和预热来避免;缓存穿透可通过设置默认值和过滤无效查询解决;缓存并发则可以通过队列串行化操作。此外,预热机制确保系统上线后缓存数据就绪,降低数据库压力。
摘要由CSDN通过智能技术生成

缓存雪崩:

数据未加载到缓存中,或者缓存在同一时间大面积失效,从而导致所有的请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。

一个简单的雪崩过程:

1.redis集群大面积故障

2.缓存失效,但依然大量请求访问缓存服务redis

3.redis大量失效后。大量请求转向数据库

4.数据库的调用量暴增,很快就宕机

5.由于大量的应用服务依赖数据库和redis的服务,这个时候很快就会演变成各服务器集群的雪崩,最后网站崩溃。

如何预防缓存雪崩:

1.缓存高可用

缓存层设计成高可用,防止缓存大面积故障。即使有个别节点,个别机器宕机,依然可以提供服务。

2.缓存降级

利用本地缓存对服务访问进行限流,资源隔离,降级也就是服务熔断,服务降级。当访问量剧增,服务出现问题依然保证服务还是可用的,系统可以暂时关闭一些其他访问量少的服务,来自动降级、

3.Redis备份和快速预热

  1).redis数据备份和恢复

   2).快速缓存预热

4.提前演练

最后在上线前测试一下及时发现问题。

缓存穿透:

缓存穿透是指查询一个不存在的数据,缓存redis中没有命中去数据库中查,数据库也没有命中,每次都访问这个不存在的数据就会造成缓存穿透。

解决思路:

直接设置一个默认的值在缓存中,这样就不会去数据库中了,设置一个过期时间。

可以增加一些判断,过滤掉不符合的查询。

缓存并发:

这里的并发是指多个redis的client同时set key引起的并发问题。其实redis自身是单线程,多个client并发操作就会先到先执行其余的阻塞。

解决方案:

把redis.set的操作放在队列里执行使其串行化,必须一个一个执行。

缓存预热:

缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统这样就可以避免用户在请求的时候先查询数据库然后再将数据缓存的问题。用户直接查询事先被预热的缓存数据。

解决思路:

1.直接写一个缓存刷新页面,上线时手工操作下。

2.数据量不大,可以在项目启动的时候自动进行加载。目的就是在系统上线前,将数据加载到缓存中。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值