Redis什么是缓存穿透、击穿、雪崩?如何解决

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

缓存与后端系统

通常后端会采用Mysql等磁盘数据库,可以持久化但是访问慢,高并发时性能差,需要设置Nosql内存型数据库缓存:Redis等

Redis什么是缓存穿透、击穿、雪崩?如何解决

但缓存可能出现:缓存穿透、缓存击穿、缓存雪崩等问题


认识缓存穿透、击穿、雪崩

  • 热点key:常被访问的key,如热搜榜

  • 缓存穿透

查找数据的顺序是:先查找缓存,再查找数据库

当查找一个数据时,缓存没有都会请求数据库,当查找的数据为热点key,高并发时缓存就起不到作用,会压垮数据库
如果黑客利用这个不存在的key进行攻击可能压垮数据库

  • 缓存击穿

缓存中没有数据但数据库里有(例如缓存过期),会进入后端访问数据库并回设到缓存,高并发的请求key,会压垮数据库

  • 缓存雪崩

当缓存服务器重启或者缓存短时间内大量失效,高并发时,引起数据库压力过大甚至宕机。

和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库


缓存穿透解决方案

缓存穿透是查询不存在的数据时会访问数据库

有两种方法:

  • 布隆过滤器:将数据库中的数据哈希映射到bitmap(0、1表示存在、不存在),查询时先访问bitmap,查询不存在的数据就会被bitmap拦截,就不用进入数据库查询

Redis什么是缓存穿透、击穿、雪崩?如何解决

  • 返回空值给缓存:当查询不存在数据访问数据库返回值为空,仍然将空值进行缓存(Redis中value为空值会被回收,可以设置empty字符串等),当然插入值时要替代掉空值

Redis什么是缓存穿透、击穿、雪崩?如何解决


缓存击穿解决方案

缓存击穿是数据缓存没有而数据库有,查询时需要进入数据库查询,高并发时会压垮数据库

有两种解决方案:

  • 设置热点key永不过期

  • 加互斥锁(mutex key)

互斥锁:在缓存失效的时候(判断拿出来的值为空),第1个进入的线程,获取锁并从数据库去取数据,没释放锁之前,其他并行进入的线程会等待,再重新去缓存取数据

Redis:使用setnx操作去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法。

setnx key value:当key不存在时才设置值,key存在不操作。setnx可以实现互斥锁

Redis什么是缓存穿透、击穿、雪崩?如何解决

通过互斥锁,高并发也仅查询一次数据库


缓存雪崩解决方案

缓存雪崩是缓存服务器重启或者大量缓存失效,引起数据库压力过大

这里的问题是多个key缓存,有两种方案:

  • 尽量设置缓存失效时间均匀分布,别在短时间内大量缓存过期

  • 考虑用加锁队列的方式来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求数据库(在高并发下线程阻塞,用户体验差)文章来源地址https://www.toymoban.com/news/detail-493516.html

 
                    

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

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

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

相关文章

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

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

    2024年02月15日
    浏览(46)
  • Redis缓存穿透、击穿、雪崩问题及其解决方法

    缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。 常见的解决方案有两种: 缓存空对象 优点:实现简单,维护方便 缺点: 额外的内存消耗 可能造成短期的不一致 布隆过滤 优点:内存占用较少,

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

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

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

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

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

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

    2024年02月11日
    浏览(47)
  • Redis中的缓存雪崩、击穿、穿透的原因以及解决办法

    缓存雪崩、击穿、穿透一旦发生,会导致大量的请求积压到数据库层。如果请求的并发量很大,就会导致数据库宕机或是故障,这就是很严重的生产事故了。 俗话说,知己知彼,百战不殆。了解了问题的成因,我们就能够在应用Redis缓存时,进行合理的缓存设置,以及相应的

    2024年02月12日
    浏览(48)
  • Redis中的缓存穿透、雪崩、击穿的原因以及解决方案

    是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。 我们可以简单的

    2024年02月12日
    浏览(44)
  • 【Redis(8)】Spring Boot整合Redis和Guava,解决缓存穿透、缓存击穿、缓存雪崩等缓存问题

    在缓存技术的挑战及设计方案我们介绍了使用缓存技术可能会遇到的一些问题,那么如何解决这些问题呢? 在构建缓存系统时,Spring Boot和Redis的结合提供了强大的支持,而Guava的 LoadingCache 则为缓存管理带来了便捷的解决方案。下面我将介绍如何通过整合Spring Boot、Redis和Gu

    2024年04月22日
    浏览(48)
  • Redis缓存雪崩、穿透、击穿原因分析和解决方案,附Redis管道使用技巧

    先给大家附上其他几篇文章,感兴趣的自行开车导航 Redis过期策略和持久化机制全面揭秘,教你如何合理配置 【深入浅出Redis 一】从版本特性到数据类型到线程模型,带你了解Redis的核心特性和应用场景! 一次redis OOM问题分析解决,rdbtools安装分析redis内存 Redis管道(pipelin

    2024年02月16日
    浏览(43)
  • 【Redis从入门到进阶】第 6 讲:缓存雪崩、击穿、穿透场景与解决方案

    本文已收录于专栏 🍅《Redis从入门到进阶》🍅    本专栏开启,目的在于帮助大家更好的掌握学习 Redis ,同时也是为了记录我自己学习 Redis 的过程,将会从基础的数据类型开始记录,直到一些更多的应用,如缓存击穿还有分布式锁以及 Redis 持久化等。希望大家有问题也可

    2023年04月12日
    浏览(71)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包