ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis 的雪崩、穿透、击穿

2021-07-09 19:31:45  阅读:179  来源: 互联网

标签:缓存 过期 击穿 数据库 redis 布隆 雪崩 key Redis


redis 雪崩、穿透、击穿的区别

这都是涉及到服务器的高可用的部分。他们之间的区别如下

  • 雪崩:同一时刻,大量的key 过期
  • 穿透:就是访问的 redis 里面都没有,直接
  • 击穿:某一个热点的 key 突然过期了,所有的请求都打到了 mysql

缓存雪崩

产生雪崩的是指一个时间段内,大量的key失效了,所有的请求都打到了mysql数据库上,redis 宕机了!

防止雪崩的方法

  • 随机初始化数据过期时间,不要让他们在同一时间失效
  • 直接不设置过期时间
  • 在分布式中,把key平均的放在不同的节点上

缓存的穿透:

举个例子,比如某数据库是从 0 开始自增的,肯定没有-1这个id,所以redis也没有,那么黑客就可以通过这个技术,不断的调用你的 mysql 数据库,从而把你的数据库搞垮。

在这里插入图片描述

image

解决方案

  • 第一次请求,将数据库查到的结果,无论是否为空,都保存到 redis 里面。但是如果黑客每次都换个参数,这个就解决不了了
  • 拉黑对方的 IP 地址
  • 对参数的合法性进行检测
  • 使用布隆过滤器

在这里插入图片描述

缓存空对象

在这里插入图片描述

缓存击穿

缓存击穿是指一个 key 非常的热点,在不停的扛着大并发,大并发集中对一个点进行访问,当这个 key 在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在屏障上凿开一个洞。 当某 key 在过期的瞬间,有大量的请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新的数据,并写会缓存,会导致使服务器瞬间压力过大。

image

解决方案:

使用分布式锁。如果是单体的话,就添加 互斥锁,加锁只保证只有一个线程加进去。其余的都在等待。这样这一个线程进去以后,把数据查到,就会把查到的数据,添加到 redis 中,image

布隆过滤器

布隆过滤器就是使用布隆算法,加载redis之前,布隆过滤器有黑名单和白名单两种操作。

下面是布隆过滤器的黑名单用法,
image

参考文献

https://www.bilibili.com/video/BV15y4y1r7X3?share_source=copy_web

标签:缓存,过期,击穿,数据库,redis,布隆,雪崩,key,Redis
来源: https://www.cnblogs.com/rush-peng/p/14990190.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有