缓存存在的问题
文章目录
- 缓存问题
- 缓存穿透
- 引入
- 解决方案
- 缓存雪崩
- 缓存击穿
缓存问题
使用缓存时常见的问题主要分为三个:缓存穿透 、缓存雪崩、缓存击穿。
下面对其进行一一学习
缓存穿透
引入
定义:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样的缓存永远不会生效,这些请求都会打到数据库。

导致缓存击穿的原因是,当用户使用不存在的请求访问缓存的时候,因为缓存中不存在数据,则会将请求打到数据库,然后数据库也没有相关请求的数据,则只能给用户端报错或返回空值。一次这样无效的请求服务器还应对的过来,然而当一些(不怀好意的)人使用大量这种无效的请求访问时,则会全部打到数据库,导致数据库宕机,或者拖慢其他正确请求的访问。
那么,如何应对这种问题呢?
解决方案
常见的解决缓存击穿的方案有以下几种:
-
缓存空对象:当一个无效请求打到数据库查询无效时,将此次请求进行缓存,并赋予null值

- 优点:实现简单,维护方便
- 缺点:① 额外的内存消耗 ② 可能造成短期的不一致
-
布隆过滤

- 优点:内存占用较少,没有多余key
- 缺点:① 实现复杂 ② 存在误判可能
-
增强id的复杂度
-
做好数据的基础格式校验
-
加强用户权限校验
缓存雪崩
定义:缓存雪崩是指在同一时间段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。

通常的解决方案有以下四种:
- 给不同的Key的TTL添加随机值(防止大量TTL同时到期)
- 利用Redis集群提高服务的可用性
- 给缓存业务添加降级限流策略
- 给业务添加多级缓存
缓存击穿
定义:缓存击穿问题也叫热点问题,就是一个被高并发访问且缓存重建业务较复杂的Key突然失效,无数的请求访问会在瞬间给数据库带来巨大的冲击。

常见的解决方案有两种:
-
互斥锁(保证一致性)

- 优点:① 没有额外的内存消耗 ② 保证一致性 ③ 实现简单
- 缺点:① 线程需要等待,性能受到影响 ② 可能有死锁风险
-
逻辑过期(保证可用性)

- 优点: 线程无需等待,性能较好
- 缺点:① 不保证一致性 ② 有额外内存消耗 ③ 实现复杂
相关文章:
缓存存在的问题
文章目录 缓存问题缓存穿透引入解决方案 缓存雪崩缓存击穿 缓存问题 使用缓存时常见的问题主要分为三个:缓存穿透 、缓存雪崩、缓存击穿。 下面对其进行一一学习 缓存穿透 引入 定义:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#…...
ChatGPT 的 AskYourPDF 插件所需链接如何获取?
一、背景 目前 ChatGPT 主要有两款 PDF 对话插件,一个是 AskYourPDF 一个是 ChatWithPDF(需 ChatGPT Plus),他们都可以实现给一个公共的PDF 链接,然后进行持续对话,对读论文,阅读 PDF 格式的文…...
基于自营配送模式的车辆路径规划设计与实现_kaic
摘要 近年来,随着我国消费水平逐渐提升,消费者在网上购物的频率也越来越高,电商发展速度迅猛,加大了物流配送的压力,促使物流企业以更大的运力,更短的时间将货物送达。在货品的运输过程中,成本居…...
动态规划-树形DP
树的重心 题目 链接:https://www.acwing.com/problem/content/848/ 给定一颗树,树中包含 n n n 个结点(编号 1 ∼ n 1 \sim n 1∼n)和 n − 1 n-1 n−1 条无向边。 请你找到树的重心,并输出将重心删除后&#x…...
多线程基础(二)CAS无锁优化/自旋锁/乐观锁、ABA问题
CAS (Compare And Set)比较并替换 上篇文章的锁问题解决,可以使用更高效的方法,使用AtomXXX类,AtomXXX类本身方法都是原子性的,但不能保证多个方法连续调用是原于性的。 import java.util.ArrayList; imp…...
记ABAC的落地实践
为什么使用ABAC 一般提到授权,我们就会想到角色(role)。什么样的用户拥有什么样的角色可以怎么操作什么样的资源,这是我们普遍使用的权限系统的模型。这里的角色实质上是包含了一组用户操作资源的规则集合。一旦角色被创建&#…...
【C++】C++11线程库 和 C++IO流
春风若有怜花意,可否许我再少年。 文章目录 一、C11线程库1.thread类介绍2.mutex互斥锁 和 CAS原子操作(compare and set)3.lock_guard和unique_lock4.两个线程交替打印,一个打印奇数,一个打印偶数(线程同步…...
cpp11实现线程池(六)——线程池任务返回值类型Result实现
介绍 提交任务函数submitTask中返回的Result类型应该是用Result类包装当前的task,因为出函数之后task即如下形式:return Result(task); Result和Task都要互相持有对方的指针,Task要将任务执行结果通过Result::setVal(run()) 调用传给其对应…...
道岔外锁闭装置介绍
简述 道岔外锁闭装置是一种能可靠地锁闭尖轨和基本轨的器械。它能有效地克服尖轨在密贴时的转换阻力,即使连接杆折断,外锁闭装置仍在起着锁闭作用。外锁闭能够隔离列车通过时对转换设备的振动和冲击,提高转换设备寿命和可靠性。 产品分类 …...
idea把项目上传到码云
1. 为项目创建仓库 2. 选中中项目右击git, 先add, 在commit Directory 3. 设置远程码云项目地址 4. push项目, ok。 注意: 如果你在最后push出现以下提示,则说明提交失败 Push to origin/master was rejected(译文:推送到原点/master被拒绝…...
设计模式之责任链模式
责任链模式的定义是:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。 责任链模式适合于请求需要经过多个处理器,并…...
Python--我一般都用这个模块压缩文件
打包成压缩文件很多时候都能用上,也包括了自动化中的部分应用。例如,将测试报告打包发送。 本章就来介绍其中一个模块,可以用于结合上一章的内容结合使用。 from zipfile import ZipFile ❝ ZipFile是zipfile的一个方法。 ❞ 提取zip文件 fro…...
Chapter8 :Physical Constraints(ug903)
8.1About Physical Constraints(关于物理约束) XilinxVivado集成设计环境(IDE)允许通过设置对象属性值对设计对象进行物理约束。示例包括: •I/O约束,如位置和I/O标准 •布局约束&…...
星标3.5k,一款国产的轻量级开源在线项目任务管理工具
今天给大家推荐一个轻量级的开源在线项目任务管理工具:DooTask 图片 DooTask 提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具。 高效便捷的团队沟通工具 针对项目和任务建立群组,工作问题可…...
【华为OD机试真题2023B卷 JAVA】字符串摘要
华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 字符串摘要 知识点字符串排序 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 给定一个字符串的摘要算法,请输出给定字符串的摘要值。 1、去除字符串中非字母的符号。 2、如果出现连续字符(不区分大小写),则输…...
Java线程概述 (一)线程介绍
文章目录 🐒个人主页🏅JavaSE系列专栏📖前言:🪅什么是程序 、进程、线程?🪅线程的生命周期🪅多线程🪅守护者线程🪅线程并行与并发🪅死锁…...
操作系统第三章——存储系统(下)
锦衣雪华玉颜色,回眸一笑天下倾 文章目录 3.2.1 虚拟内存的基本概念知识总览传统存储方式的特征,缺点局部性原理虚拟内存的定义如何实现虚拟内存技术知识总结 3.2.2 请求分页管理方式知识总览页表机制缺页中断机制地址变换机制知识回顾 3.2.3 页面置换算…...
初识结构体
目录 结构体的声明 结构体的基础知识 结构体的声明 结构体成员的类型 结构体变量的定义和初始化 定义 初始化 结构体成员的访问 结构体变量访问成员 结构体指针访问指向变量的成员 结构体传参 传地址 传结构体 结论 结构体的声明 结构体的基础知识 数组ÿ…...
协程并发下数据汇总:除了互斥锁,还有其他方式吗?
1. 简介 本文介绍了在并发编程中数据汇总的问题,并探讨了在并发环境下使用互斥锁和通道两种方式来保证数据安全性的方法。 首先,通过一个实例,描述了一个并发拉取数据并汇总的案例,并使用互斥锁来确保线程安全。然后,…...
5、Ray-Actor模型和并发编程
5、Ray-Actor模型和并发编程 导航 1.简介和背景 2.Ray的基本概念和核心组件 3.分布式任务调度和依赖管理 4.对象存储和数据共享 5.Actor模型和并发编程 6.Ray的高级功能和扩展性 7.使用Ray构建分布式应用程序的案例研究 8.Ray社区和资源 9.核心框架介绍...
企业ESG披露合规危机应对指南(2024欧盟CSRD强制落地倒计时)
更多请点击: https://intelliparadigm.com 第一章:CSRD法规核心要义与企业合规临界点 欧盟《企业可持续发展报告指令》(CSRD)已于2024年1月1日正式生效,取代原有的NFRD,显著扩大了适用范围与披露深度。其核…...
物理信息机器学习:从数据中挖掘物理规律,提升设备剩余寿命预测精度
1. 项目概述:当物理定律遇见数据智能在航空发动机健康管理这个领域,干了这么多年,我最大的感触是:数据很重要,但光有数据远远不够。你手头可能有一堆传感器传回来的温度、压力、振动曲线,用LSTM、CNN这些深…...
Poppins字体:终极多语言开源字体解决方案,9种字重+天城文支持
Poppins字体:终极多语言开源字体解决方案,9种字重天城文支持 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 还在为多语言项目寻找完美的字体解决方案吗…...
集成学习驱动的智能黑盒测试:基于模型分歧的用例生成方法
1. 项目概述与核心价值在软件开发的漫长周期里,测试环节始终是保障质量、控制风险的关键闸口。然而,无论是手动编写测试用例,还是依赖传统的自动化脚本,都面临着效率瓶颈和覆盖度不足的挑战。尤其是在面对复杂的黑盒系统时&#x…...
Cobalt Strike(CS)下载与使用指南
⚠️ 免责声明:本文内容仅用于合法授权的网络安全测试、实验室学习与企业安全防护研究。禁止将相关工具用于任何未授权攻击、非法入侵、数据窃取或破坏行为,否则可能违反当地法律法规。 一、什么是 Cobalt Strike(CS) 1.1 简介 …...
在C#中根据控件名称获取控件实例的方法
在C#中,如果你想要根据控件名称(控件的Name属性)遍历并获取窗口或容器中的控件实例,通常有以下几种方法,这取决于你使用的是WinForms还是WPF。WinForms在WinForms中,你可以使用Control.Find方法或者通过递归…...
N_m3u8DL-RE深度解析:现代流媒体下载引擎的架构设计与实战应用
N_m3u8DL-RE深度解析:现代流媒体下载引擎的架构设计与实战应用 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8…...
学术 PPT 创作提速方案:九款 AI 工具,轻松攻克毕业答辩制作难题
okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPTAI PPT制作 - Okbiye智能写作https://www.okbiye.com/ppt 毕业答辩阶段,演示文稿制作成为多数学子耗时耗力的一大关卡。梳理论文脉络、匹配专业模板、规整内容排版、优化数据展示࿰…...
如何用TV Bro电视浏览器彻底解决智能电视上网难题:终极遥控器友好方案
如何用TV Bro电视浏览器彻底解决智能电视上网难题:终极遥控器友好方案 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 还在为智能电视上网操作困难而烦恼吗&…...
OpenMemories-Tweak:嵌入式系统配置管理的逆向工程实践
OpenMemories-Tweak:嵌入式系统配置管理的逆向工程实践 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak 问题导向:破解封闭式嵌入式系统的配置限制 在…...
