Redis-缓存穿透、缓存崩溃、缓存击穿

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

本文主要介绍Redis中缓存穿透、缓存崩溃和缓存击穿

缓存

缓存的作用?

一般情况下,用户请求到后台,会先从缓存中取数据。如果在缓存中取到数据,就直接返回
结果;如果取不到数据就需要查询数据库,从数据库中取到数据后会同步更新到缓存,并返回结果。下一个用户就可以直接从缓存中取值了。那如果在数据库也没有取到,就只能直接返回空结果。
所以,缓存主要的作用就是缓解数据的负载压力,提升请求响应效率。

缓存穿透

什么是缓存穿透?

缓存穿透:指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库
查询,查不到数据则不写入缓存
,这将导致这个不存在的数据每次请求都要到
数据库去查询,进而给数据库带来压力。

缓存产生原因?

  • 业务设计不合理:比如大多数用户都没开守护,但是你的每个请求都去缓存,查
    询某个 userid 查询有没有守护。
  • 业务/运维/开发失误的操作:比如缓存和数据库的数据都被误删除了。
  • 黑客非法请求攻击:比如黑客故意捏造大量非法请求,以读取不存在业务数据。

如何避免缓存穿透?

一般有三种方法:

  1. 接口参数校验:如果是非法请求,我们在 API 入口,对参数进行校验,过滤非法值。对某些IP进行处理,加入黑名单。
  2. 缓存空值:如果查询数据库为空,我们可以给缓存设置个空值,或者默认值。但是如果有写请求进来话,需要更新缓存,以保证缓存一致性,同时,最后给缓存设置适当过期时间(比如30s)。这样可以防止攻击用户反复用一个id暴力攻击。
  3. 布隆过滤器:使用布隆过滤器快速判断数据是否存在。即一个查询请求过来时,先通过布隆过滤器判断值是否存在,存在才继续往下查。将所有可能存在的数据哈希存到一个足够大的 中,一些一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

缓存雪崩

什么是缓存雪崩?

缓存雪奔: 指缓存中数据大批量到过期时间,而查询数据量巨大,请求都直接
访问数据库,引起数据库压力过大甚至 down 机,导致数据库无法使用。

如何解决缓存雪崩?

  1. 使用同步锁控制查询数据库的线程,如果并发量不是很高,可以采用队列和锁
    使用同步锁控制查询数据库的线程,只允许有一个线程去查询数据库,查询得到数据后存入缓存。
  2. 对同一类信息key设置不同的过期时间
    在同一类key上设置过期时间时,加上一个随机时间,使它们的过期时间不相同。
  3. 缓存预热
    不用等到请求到来再去查询数据库存入缓存,可以提前将数据存入缓存。使用缓存预热机制通常有专门的后台程序去将数据库的数据同步到缓存,并采用自动续期。
  4. 如果缓存数据库是分布式部署的,可以将热点的数据打散均匀分布到多个节点中

缓存击穿

什么是缓存击穿?

缓存击穿:是指缓存中没有或者已经到期但是数据库中有的数据,这时由于并发用户特别多,
同时在缓存中又没有读到数据,所以直接去数据库中取数据,引起数据库压力瞬间增大。和缓存雪崩不同的是,缓存击穿指并发查询同一条数据,缓存雪崩是不同数据都过期了,大面积数据都查询不到,从而查询数据库。文章来源地址https://www.toymoban.com/news/detail-602704.html

如何解决缓存击穿?

  1. 使用互斥锁方案
    缓存失效时,不是立即去加载数据库数据,而是先使用某些带成功返回的原子操作命令,如(Redis ✁ setnx)去操作,成功的时候,再去加载数据库数据和设置缓存。否则就去重试获取缓存。
  2. 热点key永不过期
    是指没有设置过期时间,但是热点数据快要过期时,异步线程去更新和设置过期时间。
  3. 做好熔断、降级,防止系统崩溃

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

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

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

相关文章

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

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

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

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

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

    一、前言   在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来

    2024年02月09日
    浏览(42)
  • Redis缓存击穿、雪崩、穿透

    我们通过对数据库的数据进行查询后在redis中缓存,但是在高并发环境下,某个保存的key值在失效的瞬间被大量并发请求访问,这些持续的大并发量就会穿破缓存,直接请求数据库,会对数据库造成巨大压力,这些请求还会使数据多次写入缓存,多了许多不必要的操作。    

    2024年02月08日
    浏览(45)
  • Redis缓存穿透,雪崩,击穿

    1、定义 缓存 就是数据交换的 缓冲区 ,缓存就是 缓冲区内的数据 ,一般从数据库中获取,存储于本地代码。 由于其被 Static 修饰,所以随着类的加载而被加载到 内存之中 ,作为本地缓存,由于其又被 final 修饰,所以其引用和对象之间的关系是固定的,不能改变,因此不用担心赋值(=

    2024年02月10日
    浏览(49)
  • 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日
    浏览(32)
  • redis缓存雪崩、穿透和击穿

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

    2024年01月22日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包