Redis 的缓存异常处理 —— 缓存雪崩、缓存击穿、缓存穿透

在实际应用 Redis 过程中,如果将 Redis 作为数据库的缓存,经常会遇到这几个问题:缓存雪崩、缓存击穿、缓存穿透等。

缓存雪崩
缓存雪崩指的是,大量的应用无法在 Redis 缓存中处理,然后大量请求发送到了数据库,导致数据库的压力激增,甚至可能导致数据库崩溃,从而导致整个系统崩溃,引发雪崩一样的连锁效应。

而引起缓存雪崩的原因,一般如下:
1、缓存中大量 key 同时过期
2、Redis 实例挂掉了,无法处理请求

对于原因 1,在实际应用中应当避免大量 key 同时过期的场景。如果确实有这种业务场景,可以微调这批 key 过期的时间,使其能有一定的相差间隔。

对于原因2,之前提到的Redis 主从集群其实可以比较好地实现主 Redis 实例挂掉后,能有其他从库快速切换为主库,继续提供服务。

当然,以上都是预防的措施,如果已经发生了 缓存雪崩,为了防止数据库被大量的请求搞崩溃,可以采用 服务熔断 或者 请求限流。

服务熔断就是暂停对业务提供 Redis 服务,直到 Redis 恢复正常,再向外提供服务。 当然,这种情况下,业务也会整个停摆了。 另外一种比较温和的办法就是请求限流。请求限流顾名思义,就是限制请求的流量,随机丢弃一部分的请求,以保证不会同时有太多请求压入数据库。

缓存击穿
缓存击穿是指,针对某个热点数据,突然在缓存中失效,然后这些请求到热点数据的请求会都请求到数据库。
缓存击穿一般是热点 key 在 Redis 中过期了导致的。 最直接的方法就是,对于热点 key ,就不设置过期时间。

缓存穿透
缓存穿透指的是,数据既不在 Redis 中,也不在数据库中。每次请求 Redis 发现没有对应的 key之后,再去请求数据库,发现数据库也没有。 那么这时, Redis 就相当于一个摆设,没有具体的作用了。如果有人恶意攻击系统,故意使用空值或者其他不存在的值进行频繁请求,那么也会对数据库造成比较大的压力。

为了避免缓存穿透,我们可以:
1、缓存空值或缺省值
2、采用布隆过滤器,提前判断是否有此数据。

布隆过滤器实际上就是把 key 通过三次不同的哈希,计算出三个哈希值,然后在哈希表中把对应哈希值位置置为1。当有新的请求过来时,先判断这个 key 经过N次哈希后,对应的哈希值位置是否为1,只要有一个不为1,就说明此 key 之前没有缓存过。
实际上,布隆过滤器也是有缺陷的,它不能完全保证请求过来的 key ,通过布隆过滤器的校验,就一定有这个数据。 但是,只要没有通过布隆过滤器的校验,那么这个 key 就一定不存在。 其实这样就已经可以过滤掉大部分不存在的 key 请求了。
正如以上提到的布隆过滤器缺陷,如果布隆过滤器的哈希槽过短,很有可能导致大部分的位置都为 1 ,那么此时,布隆过滤器就失去了它的意义。 所以,当我们发现布隆过滤器大部分位置都为1了,应该要扩宽哈希槽。

3、在实际业务中,我们对于请求的参数应该要先进行校验,请求的参数应该要在规定范围内。实际上,在工程应用中,主要也是依赖于参数的校验,过滤掉很多无效请求。

数据不一致性
当使用 Redis 作为数据库缓存时,可能会存在数据不一致的问题。
当需要修改一份数据时,需要同时修改数据库和缓存,那么这里就要区分:先修改数据库还是修改缓存;对于缓存,是直接修改数据还是删除数据?

Remi酱不易,多多点赞支持哦!

文章来源:https://www.jianshu.com/p/2d45d6cd235d

Redis 的缓存异常处理 —— 缓存雪崩、缓存击穿、缓存穿透相关推荐

  1. 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透

    前文回顾 建议前一篇文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 过期策略 Redis 的过期策略都有哪些? 在聊这个问题之前,一定 ...

  2. 如何解决Redis缓存雪崩、击穿与穿透

    Redis最常用使用的场景就是作为业务系统的缓存,既然是作为缓存,那么就不免会碰到缓存常见的问题,即雪崩.击穿与穿透,什么是缓存雪崩.击穿与穿透以及如何解决这几个问题呢?今天我们一起来探讨一下! 一. ...

  3. 阿里面试Redis最常问的三个问题:缓存雪崩、击穿、穿透(带答案)

    你知道的越多,你不知道的越多 点赞再看,养成习惯 https://github.com/java-已经开源,有面试脑图 正文 上一期吊打系列我们提到了Redis的基础知识,还没看的小伙伴可以回顾一下 ...

  4. Redis 缓存雪崩、击穿、穿透

    Redis 缓存雪崩.击穿.穿透 文章目录 Redis 缓存雪崩.击穿.穿透 一.Redis基础 Redis基本数据类型.操作 二.面试相关问题 1.小伙子您好,看你简历上写了你项目里面用到了Redi ...

  5. 面试填坑之Redis无底洞(一、Redis缓存雪崩、击穿、穿透)

    Redis缓存雪崩.击穿.穿透 学习自大佬:https://blog.csdn.net/qq_35190492/article/details/102889333 https://www.cnblog ...

  6. redis缓存雪崩、击穿、穿透

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.redis缓存雪崩 二.redis缓存击穿 三.redis缓存穿透 前言 主要是介绍一下redis缓存雪崩.击穿. ...

  7. redis缓存的雪崩、击穿、穿透,淘汰策略,持久化

    1.redis缓存的雪崩.击穿.穿透,在实际中如何处理? 雪崩:缓存不存在,数据库存在,高并发,大量的key 原因:大量数据同时过期,Redis宕机 解决方案:给缓存数据的过期时间上加上小的随机数,避 ...

  8. Redis中的缓存雪崩、击穿、穿透的原因以及解决办法

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

  9. 【Redis】聊一下缓存雪崩、击穿、穿透、预热

    缓存的引入带来了数据读取性能的提升,但是因此也引入新的问题,一个是数据双写一致性,另一个就是雪崩.击穿.穿透,那么如何解决这些问题,我们来说下对应的问题和解决方案 雪崩 缓存雪崩:同一时间内大量请求无 ...

  10. 今天带你们走进缓存的雪崩、击穿、穿透基本概念

    在互联网时代,大流量.海量数据.高并发是每个企业都渴望又害怕的名词,渴望是因为它们代表着提供的服务用户愿意买单.有价值;害怕是因为一旦用户全上来了,系统不能正常为用户提供服务,让用户失望,最终选择离开 ...

最新文章

  1. 源码推荐:collectionView拖拽,仿凤凰FM iOS 局部监听键盘再也不会挡住输入框
  2. Java多线程并发常用类实例之:exchanger
  3. mac下开启docker API远程调用
  4. 性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项
  5. 【Android View绘制之旅】Layout过程
  6. url与uri的区别
  7. 【289】◀▶ Python I/O 读写文本文件
  8. 基于Windows Socket 的网络通信中的心跳机制原理
  9. java 接口式自定义回调函数
  10. 美国凤凰号探测器从火星土壤中提取到水
  11. 精读《如何编译前端项目与组件》
  12. Android tombstone文件是如何生成的
  13. 393.UTF-8编码验证
  14. linux系统中的软件管理(软件仓库的搭建:本地+网络源+第三方)
  15. Hudson poll scm 时间格式说明
  16. 通过IP地址进行精准定位
  17. MySQL服务器的超级管理员名称是_mysql服务器忘记了超级管理员root密码
  18. android测试类--Method setUp in android.test.AndroidTestCase not mocked
  19. 2021年中国医药工业经济运行现状及行业发展建议:主营业务收入、利润总额整体递增,建议加大监管,引导产业良性发展[图]
  20. 谷歌pay服务端文档_米大师服务端说明

热门文章

  1. EDITOR-CALL语句的使用:修改abap内表的内容(代码摘抄)
  2. OpenUI5 - SAP开源中的移动大战略
  3. ECC6.0中数据导出到本地时报错GETWA_NOT_ASSIGNED
  4. SAP中的邮件发送功能
  5. ABAP程序权限对象设定
  6. 中国银行业100强发布,头部名企为何选择永洪科技?
  7. 疫情下跨境电商逆势增长,大数据告诉你如何抓住跨境网购新趋势
  8. root域名服务器 gtld服务器_购买阿里云域名和空间服务器实操
  9. ecshop清除mysql缓存_禁用ecshop缓存,关闭ecshop缓存功能
  10. java的http请求头信息_HTTP请求头所包含的信息