Redis 缓存穿透击穿和雪崩

这篇具有很好参考价值的文章主要介绍了Redis 缓存穿透击穿和雪崩。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、说明

        Redis 缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。

二、缓存穿透

2.1 概念

        缓存穿透的概念很简单,用户想要查询一个数据,发现 redis 内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。

2.2 解决方案

2.2.1 布隆过滤器

        布隆过滤器是一种数据结构,对所有可能查询的参数以 hash 形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力。

Redis 缓存穿透击穿和雪崩,redis,redis

2.2.2 缓存空对象

        当存储层不命中后,即使返回的空对象也将其缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,保护了后端数据源。

Redis 缓存穿透击穿和雪崩,redis,redis

2.2.3 可能存在的问题

        1、如果空值能够被缓存起来,这就意味着缓存需要更多的空间存储更多的键,因为这当中可能会有很多的空值的键。

        2、即使对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间窗口的不一致,这对于需要保持一致性的业务会有影响。 

三、缓存击穿

3.1 概念

        缓存击穿,是指一个 key 非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个 key 在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

        当某个 key 在过期的瞬间,有大量的请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新数据,并且回写缓存,会导使数据库瞬间压力过大。

3.2 解决方案

3.2.1 设置热点数据永不过期

        从缓存层面来看,没有设置过期时间,所以不会出现热点 key 过期后产生的问题

3.2.2 加互斥锁

        分布式锁:使用分布式锁,保证对于每个 key 同时只有一个线程去查询后端服务,其他线程没有获得分布式锁的权限,因此只需要等待即可。这种方式将高并发的压力转移到了分布式锁,因此对分布式锁的考验很大。

四、缓存雪崩

4.1 概念

        缓存雪崩,是指在某一个时间段,缓存集中过期失效。

        产生雪崩的原因之一,比如在写本文的时候,马上就要到双十二零点,很快就会迎来一波抢购,这波商品时间比较集中的放入了缓存,假设缓存一个小时。那么到了凌晨一点钟的时候,这批商品的缓存就都过期了。而对这批商品的访问查询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰。于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会挂掉的情况。

Redis 缓存穿透击穿和雪崩,redis,redis

        其实集中过期,倒不是非常致命,比较致命的缓存雪崩,是缓存服务器某个节点宕机或断网。因为自然形成的缓存雪崩,一定是在某个时间段集中创建缓存,这个时候,数据库也是可以顶住压力的。无非就是对数据库产生周期性的压力而已。而缓存服务节点的宕机,对数据库服务器造成的压力是不可预知的,很有可能瞬间就把数据库压垮。 

4.2 解决方案

4.2.1 redis 高可用

        这个思想的含义是,既然 redis 有可能挂掉,那我多增设几台 redis,这样一台挂掉之后其他的还可以继续工作,其实就是搭建的集群。

4.2.2 限流降级

        这个解决方案的思想是,在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个 key 只允许一个线程查询数据和写缓存,其他线程等待。

4.2.3 数据预热

        数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的 key,设置不同的过期时间,让缓存失效的时间点尽量均匀。文章来源地址https://www.toymoban.com/news/detail-692373.html

到了这里,关于Redis 缓存穿透击穿和雪崩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis的缓存穿透,缓存击穿,缓存雪崩

    什么是缓存穿透? 缓存穿透说简单点就是大量请求的 key 是不合理的, 根本不存在于缓存中,也不存在于数据库中 。这就导致这些请求直接到了数据库上,根本没有经过缓存这一层,对数据库造成了巨大的压力,可能直接就被这么多请求弄宕机了。 eg:某个黑客故意制造一

    2024年02月10日
    浏览(33)
  • 68、Redis:缓存雪崩、缓存穿透、缓存击穿

    缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生 给每一个缓存数据增加相应的缓存标记,记录缓存是否失效,如果缓存标记失效

    2024年02月16日
    浏览(36)
  • Redis之缓存穿透+缓存雪崩+缓存击穿

    在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低   缓存穿透是指查询一个根本不存在的数据,缓存层和持久层都不会命中。在日常工作中出于容错

    2023年04月09日
    浏览(58)
  • Redis 缓存雪崩、穿透、击穿、预热

            在实际工程中,Redis 缓存问题常伴随高并发场景出现。例如, 电商大促、活动报名、突发新闻 时,由于缓存失效导致大量请求访问数据库,导致 雪崩 、 击穿 、 穿透 等问题。因此,新系统上线前需 预热 缓存,以应对高并发,减轻数据库压力。本章主要围绕这

    2024年04月12日
    浏览(48)
  • redis缓存雪崩、穿透和击穿

    缓存雪崩   对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机或者大量缓存集中在某一个时间段失效。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了

    2024年01月22日
    浏览(39)
  • Redis 缓存穿透击穿和雪崩

             Redis 缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。 2.1 概念    

    2024年02月10日
    浏览(46)
  • Redis缓存预热-缓存穿透-缓存雪崩-缓存击穿

    什么叫缓存穿透? 模拟一个场景: 前端用户发送请求获取数据,后端首先会在缓存Redis中查询,如果能查到数据,则直接返回.如果缓存中查不到数据,则要去数据库查询,如果数据库有,将数据保存到Redis缓存中并且返回用户数据.如果数据库没有则返回null; 这个缓存穿透的问题就是这个

    2024年03月09日
    浏览(42)
  • Redis 缓存预热+缓存雪崩+缓存击穿+缓存穿透

    面试题: 缓存预热、雪萌、穿透、击穿分别是什么?你遇到过那几个情况? 缓存预热你是怎么做的? 如何造免或者减少缓存雪崩? 穿透和击穿有什么区别?他两是一个意思还是载然不同? 穿适和击穿你有什么解决方案?如何避免? 假如出现了缓存不一致,你有哪些修补方

    2024年02月10日
    浏览(68)
  • Redis(缓存预热,缓存雪崩,缓存击穿,缓存穿透)

    目录 一、缓存预热 二、缓存雪崩 三、缓存击穿 四、缓存穿透   开过车的都知道,冬天的时候启动我们的小汽车之后不要直接驾驶,先让车子发动机预热一段时间再启动。缓存预热是一样的道理。 缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免

    2024年02月10日
    浏览(46)
  • Redis的缓存穿透、缓存击穿和缓存雪崩

    目录 一、解释说明 二、缓存穿透  1. 什么是缓存穿透?  2. 常见的两种解决方案  (1)缓存空对象  (2)布隆过滤 3. 编码解决商品查询的缓存穿透问题 三、缓存击穿  1.  什么是缓存击穿?  2、缓存击穿解决方案(2种) (1)互斥锁 (2)逻辑过期  3.  互斥锁与逻辑过

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包