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

关于缓存的一些心得

Cache Penetration

概述

Cache penetration(缓存穿透) :缓存穿透是指大量请求查询系统中不存在的数据如通过不存在的 UID 访问用户,既然这些数据在系统中不存在,那么肯定在Redis缓存中也不存在这批数据,这样导致这些请求都会穿透到DB,导致系统崩溃。有些同学可能就会问了,既然系统中都没这些数据,为什么还会存在这样的请求了?别忘了,这个世界上还有一群计算机破坏分子,他们可能基于各种目的,伪造这样的请求去攻击你的系统。

解决方案

方案一:缓存不存在的key,即使key对应的数据系统中不存在,也将该key缓存下,只不过这个 key对应的 value是一个特殊设置的值。这样即使访问不存在的key时也会命中缓存返回,不会再去DB中获取了。

该方案缺陷:如果访问的是大量不存在的key,很显然,为了缓存这些系统中不存的key,会占用大量的缓存空间,而我们知道缓存空间是有限的,无效key占用的空间多了,势必会将一些正常的key淘汰掉,这样就导致缓存命中率下降。

方案二:构建一个 BloomFilter 过滤器,记录全量数据,这样访问数据时,可以直接通过 BloomFilter 判断这个key 是否存在,如果不存在直接返回即可(BloomFilter特性:如果判断不存在则一定不存在),根本无需查缓存和 DB。

该方案缺陷:BloomFilter 要缓存全量的 key,这就要求全量的 key数量不能

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • unity对象缓存技术ObjectPool
  • 【算法】KMP算法
  • 硬盘分区读不出来:原因深度剖析与高效恢复实践
  • 通用分页处理:从繁琐到简洁的转变
  • PYTHON专题-(7)python都有包了?
  • 【王道数据结构-第二章-线性表算法题】
  • 50etf期权行权采用什么交割方式 ?
  • Python爬虫与MySQL完美结合:从环境搭建到实战优化
  • Linux——文件(1)
  • SQL注入实例(sqli-labs/less-9)
  • Ubuntu22.04安装Docker教程
  • 微信开放平台更换服务器证书通知
  • Tomcat 漏洞
  • 基于飞腾E2000的科东软件Intewell工业实时操作系统方案
  • 音质提升秘籍:专业音频剪辑软件汇总
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • centos安装java运行环境jdk+tomcat
  •  D - 粉碎叛乱F - 其他起义
  • golang中接口赋值与方法集
  • leetcode讲解--894. All Possible Full Binary Trees
  • Python爬虫--- 1.3 BS4库的解析器
  • 编写符合Python风格的对象
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从重复到重用
  • 第十八天-企业应用架构模式-基本模式
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 官方解决所有 npm 全局安装权限问题
  • 解决iview多表头动态更改列元素发生的错误
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 推荐一个React的管理后台框架
  • 学习笔记:对象,原型和继承(1)
  • 学习笔记TF060:图像语音结合,看图说话
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​zookeeper集群配置与启动
  • ​比特币大跌的 2 个原因
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (2020)Java后端开发----(面试题和笔试题)
  • (Oracle)SQL优化技巧(一):分页查询
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (转)mysql使用Navicat 导出和导入数据库
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net 代码性能 - (1)
  • .net 托管代码与非托管代码
  • .net(C#)中String.Format如何使用
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @Autowired @Resource @Qualifier的区别
  • [Android]How to use FFmpeg to decode Android f...
  • [Bug]使用gradio创建应用提示AttributeError: module ‘gradio‘ has no attribute ‘inputs‘
  • [BZOJ1060][ZJOI2007]时态同步 树形dp