redis:一、面试题常见分类+缓存穿透的定义、解决方案、布隆过滤器的原理和误判现象、面试回答模板
redis面试题常见分类

缓存穿透
定义
缓存穿透是一种现象,引发这种现象的原因大概率是遭到了恶意攻击。具体就是查询一个一定不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致这个数据的每次请求都需要查DB,数据库压力很大,从而挂掉。

解决方案一:缓存空数据
我们缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存。
优点:简单
缺点:消耗内存,可能会发生缓存和数据库不一致的问题。
为什么可能发生缓存和数据库不一致的问题。因为一开始数据库中没有该数据,redis就会缓存空结果。但是后来我们在数据库中插入该数据时,缓存中依旧是空结果,那么就不一致了。
解决方案二:布隆过滤器
我们可以在缓存预热时,创建一个布隆过滤器,它的作用就是判断一个数据是否存在。每次查询前先查询布隆过滤器,来判断这个数据是否一定存在,如果存在,则查询redis以及之后的DB层。如果不存在则直接返回。

优点:内存占用较少,没有多余key
缺点:实现复杂,存在误判
布隆过滤器定义、存储/查找数据
布隆过滤器实际上就是一个bitmap(位图),相当于是一个以(bit)位为单位的数组,数组中每个单元只能存储二进制数0或1,初始化全为0。
存储数据就是将数据的值经过x个哈希函数后获取x个哈希值,然后将数组对应位置改为1.
查询数据就是用相同的x个哈希函数获取x个哈希值,然后判断数组对应位置是否都为1.

布隆过滤器误判
通过布隆过滤器的原理,我们可以发现,如果一个数在过滤器中找不到,那么它一定不存在。但是如果一个数能在过滤器中找到,也不意味着它一定存在。因为过滤器存在误判现象。
譬如下图,id1和id2在数组上的下标覆盖了id3在数组上的下标。存储了id1和id2,就会让id3查询所对应的数组下标位置也变为1。实际上id3是不存在的,但是会被误判为存在。

误判率:数组越小误判率就越大,数组越大误判率就越小,但是同时带来了更多的内存消耗。
一般我们将误判率设置在5%,比较合理地兼顾内存和误判率。
测试误判率和初始化布隆过滤器代码(不用看,仅供个人存档用)
/*测试误判率*/private static int getData(RBloomFilter<String> bloomFilter, int size){int count=0;for(int x=size; x<size*2;x++){if(bloomFilter.contains("add"+x)){count++;}}return count;
}/*初始化数据*/private static void initData(RBloomFilter<String> bloomFilter, int size{bloomFilter.tryInit(size, 0.05);for(int x=0;x<size;x++){bloomFilter.add("add"+x);}System.out.println("初始化完成……");}
面试回答模板
什么是缓存穿透 ,怎么解决 ?
背熟以下回答,大概用时1分半。
缓存穿透是一种现象,引发这种现象的原因大概率是遭到了恶意攻击。具体就是查询一个一定不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致这个数据的每次请求都需要查DB,如果同时并发多个请求的话。数据库压力就会很大,从而挂掉。
解决方案的话一般有两种,第一种是直接缓存空数据。这种方案实现简单,但是可能比较消耗内存,而且有可能发生缓存和数据库数据不一致的问题。我们通常选择第二种解决方案,就是布隆过滤器。布隆过滤器实际上就是一个bitmap(位图),相当于是一个以(bit)位为单位的数组,数组中只能存储0或1,初始时全为0。存储数据就是将数据的值经过x个哈希函数后获取x个哈希值,然后将数组对应位置改为1.查询数据也一样。我们可以在缓存预热时,创建一个布隆过滤器,它的作用就是判断一个数据是否存在。每次查询前先查询布隆过滤器,来判断这个数据是否一定存在,如果存在,则查询redis以及之后的DB层。如果不存在则直接返回。
本篇所有图片来自于黑马程序员。
相关文章:
redis:一、面试题常见分类+缓存穿透的定义、解决方案、布隆过滤器的原理和误判现象、面试回答模板
redis面试题常见分类 缓存穿透 定义 缓存穿透是一种现象,引发这种现象的原因大概率是遭到了恶意攻击。具体就是查询一个一定不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致这个数据的每次请求都需要查DB,数据库压力…...
智慧公交:提高城市出行效率的数字化之路
随着城市化进程的不断加速,公共交通成为人们日常出行的主要方式之一。为了提高公共交通的效率和服务质量,智慧公交应运而生。智慧公交是一种基于物联网、大数据、人工智能等技术,对公共交通进行数字化、智能化改造的新型公共交通系统。 以此为…...
Linux - 内存 - memblock 分配器
说明 memblock是Linux内核启动早期用于管理物理内存的机制,在伙伴系统(Buddy System)接管内存管理之前为系统提供物理内存分配、释放等功能。相对于伙伴系统,memblock功能和实现较为简单。本文基于:linux_5.10 arm64平…...
SQL、Jdbc、JdbcTemplate、Mybatics
数据库:查询(show、select)、创建(create)、使用(use)、删除(drop)数据库 表:创建(【字段】约束、数据类型)、查询、修改(alter *add)、删除 DML:增加(inse…...
四六级高频词组8
目录 词组 其他链接 词组 301. in fashion(stylish, most modern)时兴,流行 302. after the fashion (of) 依照… 303. find fault with(complain about;criticize)找…...
fastapi-amis-admin快速创建一个后台管理系统增加音乐管理功能(3)
感觉为了实现maui的效果。准备了一个后端及restful项目 ,如同想吃鱼就健个鲁塘一下,但还是写一下吧。 fastapi_amis_admin 是一个功能强大的框架,旨在帮助开发者在使用 FastAPI 进行 web 开发时,能够快速创建一个高效且易于管理的…...
全球化需要先搬离中国?中国公司出海不应失去“模式自信”
中国企业出海近期热闹非凡,其中以短剧为代表的文化内容产业和跨境电商产业都吸引了大量关注。例如亚马逊在12月12日公布一组最新数据,亚马逊过去一年销售额超过1000万美金的中国卖家数量,同比增长接近30%。中国跨境电商平台在刚刚过去的“黑五…...
三大维度解码剑南春“高质量发展”丨年度盘点
执笔 | 洪大大 编辑 | 扬 灵 2023年即将画上句点,当我们回首这一年为行业带来惊喜的品牌,剑南春是其中之一。 回顾剑南春今年一整年的动作,从新品频发到双节(618、双11)热销,从全国巡展到荣誉满载&…...
外包干了3个月,技术退步明显.......
先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…...
思福迪运维安全管理系统 test_qrcode_b RCE漏洞复现
0x01 产品简介 思福迪运维安全管理系统是思福迪开发的一款运维安全管理堡垒机。 0x02 漏洞概述 由于思福迪运维安全管理系统 test_qrcode_b路由存在命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限&#…...
Salesforce×阿里云,影响几何?
实际上,从这个视角来看,Salesforce和阿里云的合作也恰在成为着这个市场的一个新催化剂。“期待Salesforce能给中国市场带来一些新的增量,包括对合作伙伴的态度,对产品的态度等等。”一位CRM相关人士告诉我们。 那么,阿…...
Qt对excel操作
Qt库中自带对excel操作的模块QAxObject,QAxObject是Qt提供给程序员从代码中访问Office的对象类,其本质上是一个面向微软操作系统的COM接口。 QAxObject将所有Office的工作簿、表格、文档等都作为其子对象,程序员通过调用querySubObject()这个…...
每日一练 | 华为认证真题练习Day148
1、关于RSTP协议提供的保护功能说法正确的有?(多选) A. Root保护功能只能在指定端口上配置生效 B. 环路保护功能只能在根端口或Alternate端口上配置生效 C. 启用防TC— BPDU报文攻击功能后,可以避免频繁的删除HAC地址表项 D. 交换设备上…...
ES6学习(二):解构赋值
前言 解构赋值是ES6中新提出的语法,简单并且实用,数组和对象都可以使用 数组解构赋值 规则 1.其实是按照顺序一一匹配的,就像排队领取物资一样,你领到什么就是什么,没有挑的份,你排的晚了什么都没领到,那就是undifined。 2.如果给分配的是一个数组,那可以在命名时外部嵌套…...
kubebuilder开发operator
安装kubebuilder前 需要有kubernetes环境和golang环境 官网:https://go.kubebuilder.io/ 安装kubebuilder #下载 wget https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) #改名kubebuilder后加权限 chmod x kubebuilder #放到环境变量里 mv k…...
docker中启动ES报错:AccessDeniedException: /usr/share/elasticsearch/data/nodes
一、K8S部署的elasticsearch 6.8版本 数据持久化到本地磁盘 今天做elasticsearch数据迁移,直接 SCP拷贝至另外一台服务器 原服务器处理好后拷贝回来,然后启动elasticsearch报错 {"type": "server", "timestamp": "2…...
java集成Nacos服务
1,添加依赖:首先,在你的 Java 项目中,你需要添加 Nacos 客户端 SDK 的依赖 <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.1.1</ve…...
开源IPad Pro应用IDE:使用SSH远程连接服务器进行云端编程开发
🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,…...
ubuntu 自动安装 MKL Intel fortran 编译器 ifort 及完美平替
首先据不完全观察,gfortran 与 openblas是 intel fortran 编译器 ifotr和mkl的非常优秀的平替,openblas连函数名都跟mkl一样,加了一个下划线。 1, 概况 https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-too…...
elementui select中添加新增标签
<el-select v-model"ruleForm.eventType" :placeholder"请选择事件类型,可手动添加" ref"template" clearable visible-change"(v) > visibleChange(v, template)"><el-option v-for"item in eventTypeOp…...
STM32移植LVGL图形库实战指南
1. LVGL图形库概述与STM32移植价值LittlevGL(简称LVGL)作为当前最受欢迎的嵌入式开源图形库之一,其设计哲学完美契合了资源受限的嵌入式环境。我在多个STM32项目中采用LVGL后发现,相比传统GUI方案,它具有三个显著优势&…...
SEED数据集之外:脑电情感识别还有哪些开源数据集值得一试?
SEED数据集之外:脑电情感识别领域五大开源数据集深度评测 当我在实验室第一次尝试构建情感识别模型时,和大多数初学者一样,首先接触到的就是SEED数据集。但随着研究的深入,我逐渐发现这个领域远比想象中丰富——不同诱发范式、采集…...
指挥OpenClaw抓取数据折腾了一夜,我终于想到了邪修玩法
这段时间玩小龙虾玩得真上头,突然想起之前一直想要统计公众号的数据。 这工作交给小龙虾妥妥能胜任啊!但是吧……实际上执行出来的结果却不是这样的。 因为小白本地使用的是OpenClawAtomgit的方案,Atomgit主打一个不费一分钱,免…...
cool-admin(midway版)数据导入模板:Excel模板设计与导出
cool-admin(midway版)数据导入模板:Excel模板设计与导出 【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js 3.x、typ…...
llama-index 数据清洗示例、数据清洗等
文章目录示例数据清洗常见的需要清洗的数据数据清洗知识llama的一小块功能,主文章内容太多了,拆出来单独说下。示例 环境还基于之前的环境。 1、新建python文件clean_demo.py,代码: import os from llama_index.core import Do…...
别再只会用Arduino了!用ESP8266+MicroPython快速搭建你的第一个物联网小项目(附完整代码)
用MicroPython解锁ESP8266的物联网潜能:10分钟搭建温湿度监测系统 当提到物联网开发时,大多数人的第一反应可能是Arduino和C。但今天,我要带你体验一种更高效、更友好的方式——MicroPython。这种基于Python的嵌入式编程语言,让物…...
Jimeng LoRA环境部署教程:Python+Torch+CUDA兼容性避坑与版本匹配指南
Jimeng LoRA环境部署教程:PythonTorchCUDA兼容性避坑与版本匹配指南 1. 项目简介 Jimeng LoRA(即梦LoRA)是一个专门为LoRA模型测试设计的轻量级文本生成图像系统。这个项目的核心价值在于它能让你只用加载一次基础模型,然后快速…...
探索DeepCAD:基于深度学习的CAD模型生成技术入门
探索DeepCAD:基于深度学习的CAD模型生成技术入门 【免费下载链接】DeepCAD code for our ICCV 2021 paper "DeepCAD: A Deep Generative Network for Computer-Aided Design Models" 项目地址: https://gitcode.com/gh_mirrors/de/DeepCAD 副标题&…...
CLIP-GmP-ViT-L-14算力适配:自动检测CUDA版本并加载对应优化内核
CLIP-GmP-ViT-L-14算力适配:自动检测CUDA版本并加载对应优化内核 1. 引言:当高性能模型遇见复杂环境 如果你部署过AI模型,大概率遇到过这样的场景:好不容易把模型跑起来了,却发现速度慢得让人抓狂,或者干…...
保姆级教程:在Ubuntu 24.04上用QEMU桥接网络,让虚拟机秒连外网
在Ubuntu 24.04上实现QEMU虚拟机与宿主机网络互通的终极指南 对于需要在本地环境测试国产操作系统或运行隔离开发环境的开发者来说,QEMU虚拟化方案因其轻量高效而备受青睐。但让虚拟机与宿主机网络互通往往成为新手的第一道门槛。本文将彻底解决这个问题——通过桥接…...
