浅谈 Redis 缓存雪崩、击穿、穿透

Redis是单线程的,并且是直接基于内存的,所以执行效率会非常高
为什么Redis是单线程的呢
官方回答 : 因为Redis是基于内存的,所以CPU不会是Redis的瓶颈,但是内存会是,而且多线程的实现比较麻烦,直接使用单线程更省事一点

 

redis 缓存雪崩

    解释: 简单说就是在较高并发以上的时间,redis中的缓存数据同时失效,这时请求会直接命中数据库,大量的请求涌入数据导  致数据库宕机,即使重启数据库,而由于缓存还是无效所以还是会打到宕机。

    原因:在使用redis时,对缓存使用了统一的到期时间,导致数据会同时失效。

    解决:使用随机的到期时间,可有效缓解。

redis 缓存穿透

    解释:当请求一个缓存中不存在的数据,会去数据库中查找,这时数据库中也没有就会返回null,所以缓存中还是不会存在这个数据。将这个情况次数增多到一定量级,就相当于没有设置缓存,对数据库的压力会非常大。

    原因:理想状态下是不对存在这个问题,但不排除恶意请求和直接提供给第三方的接口。一旦发生也是数据库宕机。

    解决:网关设置ip访问限制,代码设置基本的参数校验(比如id<0),取不到的数据缓存可以存成->{key-稍后再来看看}直接return 过期时间自己考虑,数据量少(酌情考虑)可直接缓存维护全部待查主键就可以自信return,布隆过滤器,服务降级

redis 缓存击穿

     解释:当一个数据被大量使用(就是你想的那么大量),这个数据缓存时间到了(o(╥﹏╥)o)。这些请求会直接命中数据库,结果就是宕机。

    原因:热点数据没有考虑好过期时间。心大

    解决:热点数据直接永久保存(根据业务决定那些热点数据),加锁保证业务,服务降级

redis 缓存预热

    事先将一些缓存存入,在某些业务中需要,定时刷新。

redis 缓存更新

    监测:定时任务监控缓存,即将过期的缓存延期,设置热点权重对一定权重的数据才更新。

    被动:请求来到,如果缓存过期才更新。

服务降级

    为了保证核心业务分可用性,必要时必须放弃其他业务。

    拒绝:直接拒绝掉非核心功能的所有请求,其实基本就是直接废弃掉某些模块

    延迟:将请求加入到线程池中或队列中,延迟执行这些请求

    能降级就要能升级

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值