当前位置: 首页 > news >正文

Redis缓存雪崩、穿透、击穿

Redis缓存雪崩、穿透、击穿

  • 解决方案
  • 正常的缓存流程
  • Redis缓存雪崩
    • Redis缓存雪崩解决方案
  • Redis缓存穿透
    • Redis缓存穿透解决方案
  • Redis缓存击穿
    • Redis缓存击穿解决方案

解决方案

布隆过滤器,分布式锁

正常的缓存流程

在这里插入图片描述

Redis缓存雪崩

在这里插入图片描述
Redis中的key大面积失效,导致软件直接和数据库进行沟通,把请求都打到了数据库上。
这就是缓存雪崩,大量的redis在同一时间失效。

Redis缓存雪崩解决方案

  1. 设置缓存的失效时间,让它不要在同一时间失效。
  2. 在我们设置这个缓存的时候,随机初始化它的失效时间,这样的话就不会让所有缓存在同一时间失效,把所有请求都打到数据库上。
  3. redis一般都是集群部署,我们将热点的key放到不同的节点上去。让热点的缓存平均分布在不同的redis节点上。
  4. 不设置缓存失效的时间。
  5. 跑定时任务,定时刷缓存,例如缓存设置了三小时时效,在时效之前,把redis缓存给他重新跑进去,然后再设置三小时,不断地用这个定时任务去刷新这个缓存,这个缓存就不会失效。

Redis缓存穿透

数据库的主键就是从0开始递增的,没有负数。黑客不断利用id小于零的这个参数发请求。redis中查不到便会不断地将这个请求打到数据库上。

redis直接被这种数据穿透了,恶意用户去请求软件,然后用这个id等于负一的数据去请求。redis和数据库都没有这样的数据,一般出现这种情况都不是正常的用户,而是一些恶意的用户。

Redis缓存穿透解决方案

  1. 这个请求穿透redis到这个数据库,数据库无论查出什么请求,空或者有值都会缓存到redis中去。这样下次用同一个参数来发请求的时候,就不会穿透这个redis。但是他可能会换不同的参数。
  2. 拉黑IP,但是对方也可能更换不同的IP。
  3. 对参数的合法性检验,再判断这个参数不合法的时候,直接return掉。
  4. 使用布隆过滤器。

Redis缓存击穿

大量的用户请求去不断地访问这个热点的key,当这个热点的key突然失效,把请求打到数据库上,这个过程就叫做击穿。他是击穿一个非常热点的key。

Redis缓存击穿解决方案

  1. 让这个缓存永远不过期。
  2. 使用分布式锁。如果是单体应用的话,就可以使用互斥锁。

请求数据库这一步上锁,只有拿到锁的线程可以操作这个数据库。这个时候对数据库的压力就非常小。当他查询到这个数据之后再将缓存重新写到redis里面去。其他没有抢到锁的数据让他先睡几毫秒,然后再重新去redis里面去查询数据。

参考资料:什么是Redis缓存雪崩、穿透、击穿,十分钟给你讲的明明白白

http://www.lryc.cn/news/61485.html

相关文章:

  • 不要老盯着ChatGPT,这几家公司的产品同样不容小觑
  • DataBinding 大坑总结(网上我暂时搜不到解决方法)
  • Linux I/O复用函数的使用情况和select接口的介绍
  • leetcode:数字转换为十六进制数(详解)
  • Android 10 设置人脸解锁时,锁屏显示人脸解锁图标
  • 【嵌入式环境下linux内核及驱动学习笔记-(5-驱动的并发控制机制)】
  • 必学宝典 黑马《最新JavaWeb开发教程》上线
  • 【社区图书馆】学习如何读书
  • CO02工单组件,新增/删除/修改
  • MIT6.824 lab3AB记录
  • 一分钟了解美国棒球体系·棒球1号位
  • 通过ObjectMapper和JsonNode 把JSON字符串转换成树结构数据和获取树节点数据
  • 鉴源论坛 · 观模丨面向界面的图形化测试技术
  • Midjourney以图生图的详细教程(含6种案例介绍)
  • 基于单片机的电路特性测试仪的设计
  • 五一将迎2亿人次出行,君子签助力旅行社合规高效签旅游电子合同
  • IAP升级遇到的问题
  • 简单聊聊k8s,和docker之间的关系
  • 半小时学会HTML5
  • 研报精选230421
  • AI绘图风格对照表/画风样稿详细研究记录及经验总结(分析Midjourney和Stable Diffusion风格提示词实际使用情况)不断更新中...
  • 人工智能论文的风格特点
  • 成功上岸国防科大!
  • 【C语言】输入输出、字符串操作、内存操作、文件操作函数
  • [golang gin框架] 25.Gin 商城项目-配置清除缓存以及前台列表页面数据渲染公共数据
  • 文件夹改名,如何在改名之后批量复制文件夹名称
  • 汇编与内联 x86-64
  • OSCP-UT99(IRC、Unreal Tournament 99)
  • Kubernetes CPU内存资源限定
  • fitlog使用教程(持续更新ing...)