[Redis]缓存穿透、缓存击穿、缓存雪崩问题及解决方法

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

1、缓存穿透


缓存穿透就是指在高并发的情况下大量的请求去查询一个不存在于缓存中的数据,导致这些请求都直接访问数据库,给数据库造成压力。例如:我存储在缓存中的key是数字类型(123),但是网络攻击者频繁地用字符串(abc)去获取缓存。导致永远都无法命中缓存,请求最终都打到数据库。而缓存的意义就是减轻数据库的压力。

解决办法


1. 布隆过滤器
布隆过滤器是redis提供的一种数据结构。它可以在海量数据中(上千万)来判断当前值存不存在。
在查询缓存之前,先使用布隆过滤器判断请求的参数是否有效,如果无效则直接返回结果,避免无效请求绕过缓存直接访问数据库。布隆过滤器的准确率不是百分之百,如果没有查到,就说明确实不存在;如果查到了,那数据可能存在也有可能不存在。

2.空值缓存:
如果查询的数据不存在,将该空结果也缓存起来,设置一个较短的过期时间,这样下次相同的请求就可以直接从缓存中获取空结果,避免继续访问数据库。

3. 异常处理:
对于查询不到的数据,可以通过抛出异常的方式进行处理,在服务层或者接口层捕获异常并返回给客户端,避免直接访问数据库。

2、缓存击穿


缓存击穿是指在高并发的情况下,某个热点数据过期或被删除,导致大量请求同时访问数据库。
例如,学校的官网数据是热点数据,在并发非常高的时候,比如说高考志愿填报的时候,官网数据缓存过期了。

解决方法


1、设置热点数据永不过期
对于一些非常高频的热点数据,不设置过期时间。并且开启定时任务定期查看缓存有没有被删除,如果缓存不存在了,就更新缓存。原因是不设置过期时间只能保证redis不会删,但是不能保证其他服务有没有可能删key。

3、缓存雪崩


缓存雪崩是指在某个时刻,缓存中大批量的数据同时失效或过期,导致大量的请求直接访问数据库。

缓存雪崩与缓存击穿区别:前者是大量key过期,后者是某个key过期。

解决方法


1、合理规划key的过期时间
均匀过期:给热点数据设置不同的过期时间,给每个key的失效时间加一个随机值;
设置热点数据永不过期:对于高频数据,不设置过期时间。
2. 引入缓存预热:
在系统启动或者低峰期,可以将数据预先加载到缓存中,避免在高峰期同时大量的请求导致缓存雪崩。

3. 使用多级缓存:
可以使用多级缓存来分散请求,减轻单一缓存的压力。例如,可以将热点数据放在内存缓存中,将非热点数据放在分布式缓存中,以及备份数据放在持久化存储中,这样即使某个缓存出现问题,仍然可以从其他级别的缓存中获取数据。

4、使用限流和熔断机制:
对于热点数据的请求,可以采用限流和熔断机制,控制并发请求的数量,避免大量请求同时访问缓存和数据库。
如果发现Redis服务宕机,导致数据库的负载压力增大,我们可以启动服务熔断机制,暂停对缓存服务的访问。但是这种方法对业务应用的影响比较大,我们也可以通过限流的方式降低这种影响。

例如业务系统正常运行时,请求入口每秒最大允许进入的请求数是1万个,其中9000请求个可以被缓存处理,余下1000个会发送给数据库处理。
一旦发生雪崩,数据库每秒处理的请求突然增加到1万个,此时我们就可以启动限流机制。在前端请求入口处,只允许每秒进入1000个请求,其他的直接拒绝掉。这样就可以避免大量并发请求发送给数据库。
 文章来源地址https://www.toymoban.com/news/detail-612046.html

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

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

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

相关文章

  • Redis - 三大缓存问题(穿透、击穿、雪崩)

    概念: 查询一个数据库中也不存在的数据,数据库查询不到数据也就不会写入缓存,就会导致一直查询数据库 解决方法: 如果数据库也查询不到,就把空结果进行缓存 缺点是 - 消耗内存 布隆过滤器的作用 :检索一个元素是否在某个集合中 布隆过滤器由组成 : 位图 + 若干

    2024年02月14日
    浏览(30)
  • Redis 如何解决缓存雪崩、缓存击穿、缓存穿透难题

    Redis 作为一门热门的缓存技术,引入了缓存层,就会有缓存异常的三个问题,分别是缓存击穿、缓存穿透、缓存雪崩。我们用本篇文章来讲解下如何解决! 缓存击穿 : 指的是缓存中的某个热点数据过期了,但是此时大量的并发请求访问这个key的值,此时因为缓存过期无法从

    2024年02月14日
    浏览(32)
  • redis缓存雪崩、穿透、击穿解决方案

    关于缓存异常,我们常见的有三个问题:缓存雪崩、缓存击穿、缓存穿透。这三个问题一旦发生,会导致大量请求直接落到数据库层面。如果请求的并发量很大,会影响数据库的运行,严重的会导致数据库宕机。 为了避免缓存异常带来的损失,我们需要了解每种异常的原因以

    2024年02月10日
    浏览(39)
  • Redis缓存问题(穿透, 击穿, 雪崩, 污染, 一致性)

    目录 1.什么是Redis缓存问题? 2.缓存穿透 3.缓存击穿 4.缓存雪崩 5.缓存污染(或满了)    5.1 最大缓存设置多大    5.2 缓存淘汰策略 6.数据库和缓存一致性    6.1 4种相关模式    6.2 方案:队列+重试机制    6.3 方案:异步更新缓存(基于订阅binlog的同步机制) 在高并发的业

    2024年02月12日
    浏览(24)
  • Redis什么是缓存穿透、击穿、雪崩?如何解决

    通常后端会采用Mysql等磁盘数据库,可以持久化但是访问慢,高并发时性能差,需要设置Nosql内存型数据库缓存:Redis等 但缓存可能出现:缓存穿透、缓存击穿、缓存雪崩等问题 查找数据的顺序是:先查找缓存,再查找数据库 当查找一个数据时,缓存没有都会请求数据库,当

    2024年02月09日
    浏览(41)
  • Redis:缓存击穿、缓存穿透与缓存雪崩的区别、解决方案

            近期学习redis相关原理,记录一下开发过程中Redis的一些常见问题及应对方法。 一句话总结:先查 redis发现没数据 ,再去 数据库查发现还是没数据 。 这种情况下 缓存永远不会生效 ,数据库将承担巨大压力。         我们知道,redis的缓存作用,是在客户端发起查

    2024年02月06日
    浏览(37)
  • Redis缓存问题:穿透,击穿,雪崩,双写一致性等

    在高并发场景下,数据库往往是最薄弱的环节,我们通常选择使用 redis 来进行缓存,以起到缓冲作用,来降低数据库的压力,但是一旦缓存出现问题,也会导致数据库瞬间压力过大甚至崩溃,从而导致整个系统崩溃.今天就聊聊常见的 redis 缓存问题. 缓存击穿 缓存击穿一般指redis中的一

    2024年04月27日
    浏览(40)
  • redis中缓存雪崩,缓存穿透,缓存击穿的原因以及解决方案

    在redis中,新,旧数据交替时候,旧数据进行了删除,新数据没有更新过来,造成在高并发环境下,大量请求查询redis没有数据,直接查询mysql,造成mysql的压力骤增,给mysql造成极大的压力,造成一连串的后续异常反应。 1.大多数系统设计者 考虑用加锁 (最多的解决方案)或

    2024年02月15日
    浏览(39)
  • Redis 性能管理/优化 双一致性问题 缓存雪崩/击穿/穿透

    used_memory_rss:是Redis向操作系统申请的内存。 used_memory:是Redis中的数据占用的内存。 mem_fragmentation_ratio:内存碎片率。 used_memory_peak:redis内存使用的峰值。 内存碎片如何产生的? Redis内部有自己的内存管理器,为了提高内存使用的效率,来对内存的申请和释放进行管理。

    2024年02月11日
    浏览(37)
  • redis实战-缓存三剑客穿透击穿雪崩解决方案

    缓存穿透 :缓存穿透是指客户端请求的 数据在缓存中和数据库中都不存在 ,这样缓存永远不会生效,这些请求都会打到数据库, 造成数据库压力 ,也让缓存没有发挥出应有的作用 缓存空对象 当我们客户端访问不存在的数据时,先请求redis,但是此时redis中没有数据,此时

    2024年02月11日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包