Redis缓存穿透和雪崩(面试高频)
1、什么是缓存穿透缓存穿透的概念很简单用户想要查询一个数据发现redis内存数据库没有也就是缓存没有命中于是向持久层数据库查询。发现也没有于是本次查询失败。当用户很多的时候缓存都没有命中于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力这时候就相当于出现了缓存穿透。缓存穿透是指缓存和数据库中都没有的数据2、缓存穿透的解决方案布隆过滤器:布隆过滤器是一种数据结构对所有可能查询的参数以hash形式存储在控制层先进行校验不符合则丢弃从而避免了对底层存储系统的查询压力在访问缓存层和存储层之前将存在的key用布隆过滤器提前保存起来做第一层拦截当收到一个对key请求时先用布隆过滤器验证是key否存在如果存在在进入缓存层、存储层。可以使用bitmap做布隆过滤器。这种方法适用于数据命中不高、数据相对固定、实时性低的应用场景代码维护较为复杂但是缓存空间占用少。优点内存占用较少没有多余key 缺点实现复杂存在误判缓存空对象:缓存空对象是指在持久层没有命中的情况下对key进行set(key,)当存储层不命中后即使返回的空对象也将其缓存起来同时会设置一个过期时间之后再访问这个数据将会从缓存中获取保护了后端数据源优点简单缺点消耗内存可能会发生不一致的问题(如果后面数据库插入了之前不存在的数据)3、什么是缓存击穿缓存击穿是指缓存中没有但数据库中有的数据一般是缓存时间到期这时由于并发用户特别多同时读缓存没读到数据又同时去数据库去取数据引起数据库压力瞬间增大造成过大压力。在缓存失效的瞬间有大量的请求并发访问这类数据一般是热点数据由于缓存过期会同时访问数据库来查询最新数据造成后端负载加大甚至可能会让应用崩溃。例如:一个秒杀的场景同时几万个用户同时抢购缓存中没有数据几万个用户会同时去查询数据 可能会造成服务器宕机。4、缓存击穿解决方案1、设置热点数据永不过期从缓存层面来看没有设置过期时间所以不会出现热点 key 过期后产生的问题。2、分布式互斥锁分布式锁使用分布式锁保证对于每个key同时只有一个线程去查询后端服务该线程查询数据完成后重建缓存set(key,value,timeout)。其他线程没有获得分布式锁的权限因此只需要等待即可。等待缓存重构完成后重新从缓存获取数据即可。5、什么是缓存雪崩缓存雪崩是指在某一个时间段缓存集中过期失效。Redis宕机。由于缓存层承载着大量请求有效地保护了存储层但是如果缓存层由于某些原因不可宕机或者大量缓存由于超时时间相同在同 一时间段失效大批key失效/热点数据失效大量请求直接到达存储层存储层压力过大导致系统雪崩。案例:马上就要到双十二零点很快就会迎来一波抢购这波商品时间比较集中的放入了缓存假设缓存一个小时。那么到了凌晨一点钟的时候这批商品的缓存就都过期了。而对这批商品的访问查询都落到了数据库上对于数据库而言就会产生周期性的压力波峰。于是所有的请求都会达到存储层存储层的调用量会暴增造成存储层也会挂掉的情况。6、缓存雪崩解决方案1、可以把缓存层设计成高可用的即使个别节点、个别机器、甚至是机房宕掉依然可以提供服务。利用sentinel或cluster实现。2、 采用多级缓存本地进程作为一级缓存redis作为二级缓存不同级别的缓存设置的超时时间不同即使某级缓存过期了也有其他级别缓存兜底3、 缓存的过期时间用随机值尽量让不同的key的过期时间不同

相关新闻

Unity非均匀缩放导致子物体倾斜剪切:矩阵原理与4种解决方案详解

Unity非均匀缩放导致子物体倾斜剪切:矩阵原理与4种解决方案详解

1. 项目概述:一个被忽视的“祖传”问题如果你在Unity里做过稍微复杂一点的UI嵌套,或者摆放过带有层级关系的3D道具,大概率遇到过这个让人挠头的现象:一个规规矩矩的方形子物体,当它的父物体在X、Y、Z轴上缩放比例不一致…

2026/10/30 11:07:28 阅读更多 →
UE5 GAS RPG存档系统:实现角色技能与场景状态持久化保存

UE5 GAS RPG存档系统:实现角色技能与场景状态持久化保存

1. 项目概述与核心价值在UE5里做RPG,尤其是带复杂技能系统的,存档功能绝对是开发中后期最让人头疼的“硬骨头”之一。你辛辛苦苦用GAS(Gameplay Ability System)搭了一套酷炫的技能、Buff和属性系统,角色在游戏世界里大…

2026/10/30 2:53:18 阅读更多 →
AI赋能系统运维:智能解决VC++运行库安装难题

AI赋能系统运维:智能解决VC++运行库安装难题

1. 项目概述:当AI遇见VC运行库作为一名在Windows平台下摸爬滚打了十多年的开发者,我敢说,几乎每个用电脑的人都遇到过那个令人头疼的弹窗:“无法启动此程序,因为计算机中丢失 VCRUNTIME140.dll”或者“microsoft visua…

2026/10/30 11:08:09 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/30 0:01:36 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/30 9:20:34 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/30 10:19:21 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/30 0:01:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/30 10:19:39 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/30 9:21:37 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/29 17:01:10 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 10:28:40 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 0:01:33 阅读更多 →