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

Redis缓存三大问题-穿透、击穿、雪崩

缓存穿透

缓存中明明没有对应数据,但是有大量的请求这些不存在的数据,导致大量请求直接打在DB上

缓存空对象 设置空key

缺点:大量浪费Redis的内存空间,建议还是要给空key设置一个过期时间

利用singleflight 往 redis 写空null + 异步定时脚本从db刷有效缓存,应该是这么个用法

设置布隆过滤器

布隆过滤器就是一种方便检测数据库中是否含有对应key的工具。

布隆过滤器在使用上可能比设置空key节省内存空间,因为bitmap本身占用空间很小
但是布隆过滤器是要经过复杂计算的,而且它的精确度也无法达到100%,精度需求越高计算量就越大。

还有其他过滤器,比布隆更牛逼些

缓存击穿

大量请求同一个key 但是这时恰好这个key到了过期时间
所有的请求都打向了DB这时就有可能造成DB被打崩

加互斥锁

同时大量相同的请求打到DB,那么就可以加互斥锁
同时只能一个请求打到DB
其他的请求陷入自旋状态
直到唯一 一个到大DB的请求把数据写回到Redis,再从Redis拿回数据即可
比如 go 的 singleflight

设置热点数据不过期

只要key不过期 那么就永远不会发生击穿,但运行维护成本会直线上升。

缓存雪崩

大面积key同时失效 导致缓存彻底失去作用

方案1: redis高可用:多增设redis实例,以集群的方式防止Redis单实例宕机后引发雪崩
方案2: 限流降级 : 通过加锁或队列的方式控制线程数量
方案3: 数据预热 :提前设置好key,exp random,比如 rand(x)

相关文章:

  • html地铁跑酷
  • map和set(二)——AVL树的简单实现
  • SQL之常用字符串函数
  • php开发100问?
  • Rust 语言中的 dyn 关键字
  • 通过Step Back提示增强LLM的推理能力
  • 华容道问题求解_详细设计(五)之hash值和回放功能
  • qt使用QAxObject操作excel程序关闭之后excel进程未被关闭的解决方案
  • 【C++】三大特性之继承
  • Kafka|处理 Kafka 消息重复的有效措施
  • 线性代数 --- 特征值与特征向量(下)
  • CTP-API开发系列之五:SimNow环境介绍
  • 0102全排列和对换-行列式-线性代数
  • LeetCode每日一题之 快乐数
  • Rust常用特型之Drop特型
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ECMAScript入门(七)--Module语法
  • JS基础之数据类型、对象、原型、原型链、继承
  • Mac转Windows的拯救指南
  • Median of Two Sorted Arrays
  • Spring Boot快速入门(一):Hello Spring Boot
  • 分享几个不错的工具
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 给第三方使用接口的 URL 签名实现
  • 聊聊sentinel的DegradeSlot
  • 深入浏览器事件循环的本质
  • 收藏好这篇,别再只说“数据劫持”了
  • 译自由幺半群
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #pragam once 和 #ifndef 预编译头
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (第27天)Oracle 数据泵转换分区表
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (多级缓存)缓存同步
  • (万字长文)Spring的核心知识尽揽其中
  • (转) Android中ViewStub组件使用
  • .form文件_SSM框架文件上传篇
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net 使用ajax控件后如何调用前端脚本
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .Net下的签名与混淆
  • .net中生成excel后调整宽度
  • .py文件应该怎样打开?
  • :“Failed to access IIS metabase”解决方法
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [C#]winform部署yolov9的onnx模型
  • [C++][基础]1_变量、常量和基本类型
  • [C++][数据结构][算法]单链式结构的深拷贝