redis穿透

什么是redis穿透?

  1. 查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存
  2. 这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义
  3. 在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。

发生场景:

  • 对于系统A,假设一秒 5000 个请求,结果其中 4000 个请求是黑客发出的恶意攻击。黑客发出的那 4000
    个攻击,缓存中查不到,每次你去数据库里查,也查不到。 举个栗子。数据库 id 是从 1 开始的,结果黑客发过来的请求 id
    全部都是负数。这样的话,缓存中不会有,请求每次都“视缓存于无物”,直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。

解决方案

  1. 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
  2. 另外也有一个更为简单粗暴的方法,如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

redis雪崩:

什么是redis雪崩?

  1. 缓存中大批量热点数据过期后系统涌入大量查询请求
  2. 因为大部分数据在Redis层已经失效,请求渗透到数据库层
  3. 大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。

发生场景

  • 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000
    个请求,但是缓存机器意外发生了全盘宕机,缓存挂了。

    此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。

    此时,如果没有采用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。

解决方案

  1. 事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃
  2. 事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。
  3. 事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。
  4. 用户发送一个请求,系统 A 收到请求后,先查本地 ehcache 缓存,如果没查到再查 redis。如果 ehcache 和 redis 都没有,再查数据库,将数据库中的结果,写入 ehcache 和 redis 中。
  5. 限流组件,可以设置每秒的请求,有多少能通过组件,剩余的未通过的请求,怎么办?走降级!可以返回一些默认的值,或者友情提示,或者空白的值。这样可以保证数据库绝对不会死,限流组件确保了每秒只有多少个请求能通过。
    只要数据库不死,就是说,对用户来说,2/5 的请求都是可以被处理的。 - 只要有 2/5 的请求可以被处理,就意味着你的系统没死,对用户来说,可能就是点击几次刷不出来页面,但是多点几次,就可以刷出来一次。

redis击穿

什么是redis的击穿

  1. 就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况
  2. 当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。
  3. 击穿和缓存雪崩的区别在于击穿针对某一key缓存,雪崩则是很多key

发生场景
    秒杀现场,在同一时间高频访问某一数据,并且当前数据正好过期。

解决方案

  1. 可以将热点数据设置为永远不过期
  2. 实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,进而其它请求才能通过该 key 访问数据。

redis 穿透、雪崩、击穿相关推荐

  1. redis 穿透 雪崩 击穿

    redis 穿透 雪崩 击穿 穿透 击穿 雪崩 穿透 什么是穿透? key对应的数据在缓存中不存在,针对key的请求在缓存中获取不到,请求会到数据库中.缓存没有起到作用,像是被击穿了一样. 如果有恶意 ...

  2. 缓存穿透 雪崩 击穿

    缓存穿透 雪崩 击穿 缓存穿透: 大量访问redis不存在的key上,造成数据库压力大,这就是缓存穿透. 缓存雪崩: redis在某一个时间点,大量的key失效,造成访问这些key的指令访问数据库,给 ...

  3. Redis穿透、击穿、雪崩介绍

    原文链接:https://baijiahao.baidu.com/s?id=1655304940308056733&wfr=spider&for=pc 一.缓存穿透 1.概念 缓存穿透 ...

  4. redis的雪崩 击穿 穿透以及解决方案

    雪崩:众多缓存数据同一时间到期导致大量请求同时达到数据库,致使数据库超负荷. 解决方案: 1.数据对时间不敏感:到期时间加一个随机值 2.数据必须在某一时刻到期:客户端请求的时候加个延迟. 击穿:某一 ...

  5. 缓存使用问题: 穿透 雪崩 击穿

    缓存穿透 代码现象:redis每次都不命中,每次都触发查询数据库 一个redis的key经常性问题 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数 据库也无此记录,我们 ...

  6. 面试精讲之面试考点及大厂真题 - 分布式专栏 10 Redis雪崩,穿透,击穿三连问

    10 Redis雪崩,穿透,击穿三连问 能够生存下来的物种,并不是那些最强壮的,也不是那些最聪明的,而是那些对变化作出快速反应的. --达尔文 引言 关于Redis雪崩,穿透,击穿的问题,第一次接触名 ...

  7. 穿透、击穿、雪崩…Redis这么多问题,如何解决

    本文分享自华为云社区<[高并发]什么是缓存穿透?击穿?雪崩?如何解决?>,作者:冰 河. 说到Redis,往往更多的场景是被用作系统的缓存,说到缓存,尤其是分布式缓存系统,在实际高并发场景 ...

  8. Redis 缓存穿透、击穿、雪崩现象及解决方案

    前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩 缓存穿透 关键词:穿过 Redis 和数据库 当 Redis 和数据库中都没有我们想要的数据时,就需要考虑缓存穿透的问题了.下面这段逻辑大家 ...

  9. Redis缓存知识-穿透、击穿、雪崩

    目录 一.Redis介绍 二.Redis做缓存服务器 三.缓存穿透&击穿&雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 大家好,我是杨叔.每天进步一点点,关注我的微信公众号[程序员杨 ...

  10. redis雪崩、穿透、击穿、热点分别代表什么意思?

    redis雪崩: redis中的key设置里相同的过期时间,导致多个key数据同时过期,客户端读请求,在redis缓存中找不到数据,就会访问数据库,在数据库中找,造成数据库访问压力过大.举个栗子:某佳 ...

最新文章

  1. Linux Xmanager
  2. OpenCV中CV_IS_MAT_CONT(src->type dst->type) 的含义
  3. spark Rdd 操作transformaction和action等
  4. router vue 动态改变url_vue动态路由
  5. matlab五子棋_应用 | 五子棋游戏——没人能在我的程序里打败我
  6. U盘专杀工具,U盘防御软件,U盘病毒防火墙--UDiskSyS
  7. postman数据保存在哪里_Postman 历史记录导出的解决方案
  8. Android官方开发文档Training系列课程中文版:连接无线设备之通过P2P搜索网络服务
  9. 采用rsync实现两台solaris服务之间的文件同步
  10. K8S_Google工作笔记0010---通过二进制方式_生成SSL证书文件
  11. 推荐系统经典模型 Wide Deep 论文剖析
  12. Armchart Js版属性学习与总结
  13. 文字垂直居中,水平居中 a标签水平居中只要给他的父级设置text-align=center
  14. Python的包(Packages)
  15. 亲测可用|奥维互动地图加载谷歌地图等图源的方法
  16. 动易cms聚合空间最近访客访问地址错误解决方法
  17. 如何使用使用PS批量制作字幕
  18. 装完linux无法进入windows,安装Ubuntu后无法启动Windows,如何解决?
  19. 计算机教室条幅文字,教室横幅标语尺寸
  20. 汤晓鸥教授的一篇很有意思的文章

热门文章

  1. java自动输入验证码_【自动化测试】使用Java+selenium填写验证码成功登录
  2. 大数据之hive(数据仓库工具)的分组和分区操作
  3. GIS应用技巧之矢量图斑融合
  4. 【智能控制实验】基于MATLAB的BP神经网络设计
  5. php文字链接下划线怎么取消,html超链接怎么去掉下划线
  6. 刘洋-从国内三本到牛津博士
  7. 国内移动应用数据安全发展现状
  8. 开发以及团队管理方面的心得总结
  9. 计算机专业简历的自我介绍,计算机专业简历自我介绍范文 .docx
  10. three.js之高级几何体-使用二元操作组合网格(vue中使用three.js38)