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

redis缓存击穿/穿透/雪崩面试回答

面试官:什么是缓存穿透 ? 怎么解决 ?

候选人

嗯~~,我想一下

缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。

解决方案的话,我们通常都会用布隆过滤器来解决它

面试官:好的,你能介绍一下布隆过滤器吗?

候选人

嗯,是这样~

布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是redisson实现的布隆过滤器。

它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。在一开始都是0,当一个key来了之后经过3次hash计算,模于数组长度找到数据的下标然后把数组中原来的0改为1,这样的话,三个数组的位置就能标明一个key的存在。查找的过程也是一样的。

当然是有缺点的,布隆过滤器有可能会产生一定的误判,我们一般可以设置这个误判率,大概不会超过5%,其实这个误判是必然存在的,要不就得增加数组的长度,其实已经算是很划分了,5%以内的误判率一般的项目也能接受,不至于高并发下压倒数据库。

面试官:什么是缓存击穿 ? 怎么解决 ?

候选人

嗯!!

缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把 DB 压垮。

解决方案有两种方式:

第一可以使用互斥锁:当缓存失效时,不立即去load db,先使用如 Redis 的 setnx 去设置一个互斥锁,当操作成功返回时再进行 load db的操作并回设缓存,否则重试get缓存的方法

第二种方案可以设置当前key逻辑过期,大概是思路如下:

①:在设置key的时候,设置一个过期时间字段一块存入缓存中,不给当前key设置过期时间

②:当查询的时候,从redis取出数据后判断时间是否过期

③:如果过期则开通另外一个线程进行数据同步,当前线程正常返回数据,这个数据不是最新

当然两种方案各有利弊:

如果选择数据的强一致性,建议使用分布式锁的方案,性能上可能没那么高,锁需要等,也有可能产生死锁的问题

如果选择key的逻辑删除,则优先考虑的高可用性,性能比较高,但是数据同步这块做不到强一致。

面试官:什么是缓存雪崩 ? 怎么解决 ?

候选人

嗯!!

缓存雪崩意思是设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB 瞬时压力过重雪崩。与缓存击穿的区别:雪崩是很多key,击穿是某一个key缓存。

解决方案主要是可以将缓存失效时间分散开,比如可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

相关文章:

redis缓存击穿/穿透/雪崩面试回答

面试官:什么是缓存穿透 ? 怎么解决 ? 候选人: 嗯~~,我想一下 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致…...

Jmeter性能测试 —— TPS拐点寻找

寻找TPS性能拐点1、准备脚本①在本地电脑调试Jmeter压测脚本 ②上传到压测机Jmeter所在的服务器 2、执行压力测试①执行压测脚本 jmeter –n –t xianchengzuse.jmx ②记录业务压测数据 3、监控服务器性能指标 ①监控CPU输入top命令 ②监控内存 free –m ③jstat监控sweep和…...

科技资讯|苹果穿戴新专利,表带、服装等织物可变身柔性屏幕或扬声器

根据美国商标和专利局(USPTO)本周公示的清单,苹果公司获得了一项新的技术专利,可以在 Apple Watch 表带、服装等物品上,引入基于织物的柔性扬声器。 根据专利描述,通过在织物中嵌入声学组件(例…...

数据分析和机器学习的11个高级可视化图表介绍

可视化是一种强大的工具,用于以直观和可理解的方式传达复杂的数据模式和关系。它们在数据分析中发挥着至关重要的作用,提供了通常难以从原始数据或传统数字表示中辨别出来的见解。 可视化对于理解复杂的数据模式和关系至关重要,我们将介绍11…...

祝所有的程序猿们2023年的1024节快乐~

许久没更新Bolg了,眼看就要到1024节,其实也是没有可以更新的东西,目前在PhD,发现很多东西都还需要慢慢沉淀,放一doctoral college 开学的时候ppt的老图。 越往深处研究会陷入泥潭,考虑的细节将会越来越多&…...

Win10/Win11系统bitlocker正在等待激活如何解决?

有同学升级Win10系统后,发现C盘与D盘分区盘符中出现了黄色的锁定感叹号,还显示“bitlocker正在等待激活”,这可能是用户开启了bitlocker加密所导致的。下面就来看看解决的办法吧。 一、bitlocker正在等待激活的解决方法 打开控制面板-系统和安…...

酷开科技 | 酷开系统,为居家生活打开更精彩的窗口

电视在我们的日常生活中扮演着重要的角色。虽然,作为客厅C位的扛把子——电视的娱乐作用深入人心,但是,它的涵义和影响力却因我们每个人的具体生活环境而存在着种种差异,而我们的生活环境又受到我们所处的社会及文化环境的影响。 …...

谷歌真的不喜欢 Node.js ?

有人在 Quora 上提问,为什么谷歌不喜欢 Node.js 呢,Google 的 UX 工程师和来自 Node.js 团队的开发者分别回答了他们对这个问题的看法,对于编程语言来说,每一门语言都有它自己的优势,重要的是如何用它去解决问题。 谷…...

前端项目如何找到所有未被引用的文件

要找到 React 项目中所有未被引用的文件,可以使用工具来进行静态代码分析。以下是一些方法: 使用静态代码分析工具unimported: 静态代码分析工具可以找到未被引用的 JSX 文件。一个常用的工具是 “unimported”。以下是使用它的步骤&#xff…...

CANoe-使用IG Ethernet Packet Builder实现IP包分片的若干问题

在文章《CANoe-Ethernet IG和Ethernet Packet Builder的使用和区别》中,我们讲过Packet Builder可以组装多种类型的以太网报文: 当我们想组装一条icmpv4 echo request报文,payload只有1个字节的数据FF时,选择ICMPv4 Packet,创建一条ICMPv4报文,把payload改为1个字节: 然…...

UE4逆向篇-2_各类数据的查找方式

写在前面 1.通过前面的文章,相信各位已经能够自己找到GNames并使用DUMP工具导出GNames了。 2.本篇文章将介绍各种所需数据的查找方法。 一、准备工作 1.CheatEngine,本篇以及后续篇幅的重要工具。 2.一个记事本,保证你能记录下关键信息。…...

JDBC-day07(Apache-DBUtils实现CRUD操作)

九:Apache-DBUtils实现CRUD操作 1 Apache-DBUtils简介 Apache-DbUtils 是 Apache 组织提供的开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用DbUtils能极大简化JDBC编码的工作量,同时也不会影响程序的…...

零代码编程:用ChatGPT多线程批量将PDF文档转换为word格式

pdf2docx是Python的一个库,可以很方便的将PDF文档转换为word格式,首先安装这个库。 然后在ChatGPT中输入提示词: 你是一个Python编程专家,要完成一个文档格式转换的任务,具体步骤如下: 打开F盘的Books文件…...

codeshell安装配置

codeshell安装配置 1 注意事项1.1 Python版本问题 2 codeshell环境搭建2.1 codeshell使用软件各版本2.2 软件下载2.3 codeshell使用环境安装2.3.1 python-3.10.9-amd64.exe安装2.3.2 Anaconda3-2022.10-Windows-x86_64.exe安装2.3.3 创建环境2.3.4 Pytorch安装2.3.5 transforme…...

mfc140u.dll丢失的详细解决方法,最详细修复mfc140u.dll丢失的办法分享

在计算机技术日益发展的今天,我们不可避免地会遇到各种各样的技术问题。其中,“MFC140U.DLL丢失”是一个常见的错误,它可能会影响我们的电脑性能和软件运行。本文将详细介绍四种解决“MFC140U.DLL丢失”问题的方法。 首先,我们需…...

CMake

文章目录 前言一、快速开始编译C/C代码1. 只有源码的项目2. 包含库的项目3. 编译成库给他人使用使用cmake的流程1. 生成构建系统2. 执行构建3. 执行测试4. 安装 && 打包 二、cmake 语法简介1 变量2 条件语句3 脚本命令**消息打印****if-else**:**list命令**&#xff1a…...

互联网Java工程师面试题·Spring篇·第二弹

目录 3、Beans 3.1、什么是 spring bean? 3.2、spring 提供了哪些配置方式? 3.3、spring 支持集中 bean scope? 3.4、spring bean 容器的生命周期是什么样的? 3.5、什么是 spring 的内部 bean? 3.6、什么是 spri…...

AM@两种余项型泰勒公式的对比和总结@常用函数的麦克劳林公式

文章目录 abstract两种余项型泰勒公式的对比和总结Maclaurin公式常用函数的Maclaurin公式推导例求极限按幂展开 abstract 泰勒公式的两种余项型(Penao&Lagrange)泰勒公式的对比和总结常用的Maclaurin公式列举(Peano余项型为主) 两种余项型泰勒公式的对比和总结 Taylor公式…...

Django实现音乐网站 (22)

使用Python Django框架做一个音乐网站, 本篇音乐播放器功能完善:顺序播放、设置播放数、歌词滚动等功能。 目录 顺序播放 设置顺序播放 单曲播放数 添加路由 视图处理 模板处理 歌词滚动 视图内容返回修改 样式设置 模板内容 歌词滚动脚本 歌…...

pnpm ERR_PNPM_ADDING_TO_ROOT

ERR_PNPM_ADDING_TO_ROOT  Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don’t wa…...

eVTOL 研制必读 | 厘清研制保证与设计保证的边界

在很多航空企业里,经常会出现一种现象:项目团队在谈“研制保证体系”,管理层在谈“设计保证系统”;技术人员在强调 ARP4754A/B,组织层面却在说 DOA 合规。大家都在讲“保证”,却未必在讲同一件事。结果是什…...

第九章:Vite API 参考手册

第九章:Vite API 参考手册 9.1 核心 API createServer 创建 Vite 开发服务器 import { createServer } from viteconst server await createServer({configFile: false,root: __dirname,server: { port: 3000 } })await server.listen() console.log(服务器启动在,…...

30岁,我放弃写了7年的Java,成功转型AI应用开发

爆肝转型!30Java程序员如何用AI编程实现300%效率提升,收藏这篇就够了 方可乐分享从Java程序员到AI应用开发工程师的转型经历。工作内容从写CRUD转变为研究大模型能力边界和设计AI业务流程。开发方式也从直接编码转变为通过AI工具如Cursor进行人机协作&am…...

阿联酋科技创新研究院:单模型实现多视觉任务统一解决突破

这项由阿联酋科技创新研究院(Technology Innovation Institute,TII)Falcon Vision团队主导的研究发表于2026年3月,论文编号为arXiv:2603.27365v1。有兴趣深入了解的读者可以通过该编号在相关学术平台查询完整论文内容。传统的计算…...

嵌入式系统开发:硬件思维与架构实践

1. 嵌入式领域的技术特性解析嵌入式系统开发与传统软件工程存在本质差异。在资源受限的硬件环境中,开发者往往需要直接操作寄存器、管理内存分配、处理中断服务例程。这种"贴近金属"的开发方式,决定了嵌入式工程师必须具备硬件思维。以STM32系…...

为什么你的GraalVM镜像内存比JVM还高?揭秘3类动态反射未注册、2种资源未预加载、1个ClassLoader残留的致命组合

第一章:Java GraalVM 静态镜像内存优化 如何实现快速接入GraalVM 的 Native Image 功能可将 Java 应用编译为独立、零依赖的静态可执行文件,显著降低启动延迟与运行时内存开销。但默认生成的镜像常因反射、动态代理或资源加载未显式配置而触发运行时回退…...

超流体真空理论:光速本质、微观粒子结构与量子纠缠拓扑机制

摘要本文基于超流体真空理论框架,揭示狭义相对论洛伦兹变换的物理本源,诠释光速不变的底层形成机制,明确微观基本粒子的真空结构起源;同时提出原创性量子纠缠拓扑结构模型,定义纠缠传态的速度极限与物理机制&#xff0…...

欧姆龙CP1H+CIF11与施耐德ATV变频器通讯程序 功能:原创程序,可直接用于现场程序

欧姆龙CP1HCIF11与施耐德ATV变频器通讯程序 功能:原创程序,可直接用于现场程序。 欧姆龙CP1H的CIF11通讯板,实现对施耐德ATV12变频器 设定频率,读取实际频率,变频器状态功能。 反应灵敏,通讯稳定可靠。 非常…...

万字拆解 LLM 运行机制:Token、上下文与采样参数壤

springboot自动配置 自动配置了大量组件,配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后,springboot会根据类路径上的jar包来自动配置bean(比如:springboot发现类路径上的MyBatis相关类&#xff…...

基于Matlab Simulink的储能系统变换模型与钒液流电池仿真研究:功能实现及效果展示

基于Matlab/Simulink实现了以下功能,搭建了储能系统变换模型以及钒液流电池模型,仿真效果较好,系统充放电正常。 下图为系统模型图,电池输出电压电流以及SOC波形。 1.钒液流电池本体建模 2.储能变换器建模 3.双向DC变换 4.恒定功率…...