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

【Redis】缓存穿透

问题发生背景:客户端请求的数据再缓存中和数据库中都不存在。
导致的问题:缓存永远不会生效,这些请求都会去请求数据库—导致数据库压力增大。
解决方案:
1.缓存空对象
在Redis中缓存空对象,告诉客户端数据库中没有该值。 该方法得设置一个短时间的TTL。
优点:实现简单,维护方便
缺点:会有额外的内存消耗,可能造成短期的不一致。 —数据库更新的时候,缓存还没变。
在这里插入图片描述
2.布隆过滤:
在这里插入图片描述
总体思路如上图所示,就是在客户端取数据的时候先访问布隆过滤器,得到数据库是否包含该数据的结果,有再访问没有就不访问。
布隆过滤器原理:
其实这就是一个哈希算法,哈希查询算法,
哈希算法是借助哈希表查找目标元素的方法,其中用的是哈希函数。
key = f(value)。f()是哈希函数,得到的结果是目标元素的key。
而在布隆过滤器这里,我们不需要知道目标元素的key,我们只需要知道这个元素存不存在,所以,我们的散列函数里面存储的就是0和1,0表示不存在,1表示存在。
而布隆过滤器的实现:

  1. 建立一个二进制向量,将所有位设置为0.
  2. 选定k个散列函数,用于对元素进行k次散列,计算向量的位下标。
  3. 添加元素,每添加一个就用k个散列函数分别作用于元素,生成对应下标,并将对应的值设为1.
  4. 检查元素,检查一遍是否都是1。

在这里插入图片描述

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

相关文章:

  • 编程出现bug?怎么用Python打印异常
  • P1958 上学路线
  • Android14之HIDL报错:Invalid sparse file format at header magic(一百九十六)
  • 旭日x3派目标跟随小车
  • 金潮实业邀您参观2024长三角快递物流展览会
  • 【超细完整版】C# WebService 通过URL生成WSDL文件和DLL文件 【生成篇】
  • 申请公派访问学者难不难?
  • 关于汽车中网改装需要报备吗?(第二天)
  • 面试官:对于 Java 中多态的理解是什么?
  • JUC-1M/75±5°超小型密封温度继电器 体积小、重量轻、控温精度高 JOSEF约瑟
  • filebeat 配置
  • Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件(1)
  • 网络安全框架和云安全参考架构介绍
  • 360企业安全浏览器兼容模式显示异常某个内容不显示 偶发现象 本地无法复现情况js
  • JVM常见启动参数
  • 单元测试、集成测试、系统测试区别
  • NIVision-相机图像采集
  • 【vue-小知识】var、let 和 const之间的区别
  • 24.3 分布式综合应用
  • Android学习进阶
  • “低代码+平台”:驱动企业数字化转型与创新的新引擎
  • python代码截取任意页的pdf
  • 速盾:cdn加速后真实ip会暴漏吗?
  • ATA-5310前置微小信号放大器在红外线传感器中的应用
  • 【黑马程序员】Python多任务
  • 前端与后端具备能力的区别
  • 【蓝桥杯】第15届蓝桥杯青少组stema选拔赛C++中高级真题答案(20240310)
  • 20240319金融读报:金融助力农业科创企业风控模型
  • React.js快速入门教程
  • Jenkins构建时报错:Build step ‘Execute shell‘ marked build as failure