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

缓存存在的问题

文章目录

  • 缓存问题
    • 缓存穿透
      • 引入
      • 解决方案
    • 缓存雪崩
    • 缓存击穿

缓存问题

使用缓存时常见的问题主要分为三个:缓存穿透缓存雪崩缓存击穿

下面对其进行一一学习

缓存穿透

引入

定义:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样的缓存永远不会生效,这些请求都会打到数据库。

image-20230514152519575

导致缓存击穿的原因是,当用户使用不存在的请求访问缓存的时候,因为缓存中不存在数据,则会将请求打到数据库,然后数据库也没有相关请求的数据,则只能给用户端报错或返回空值。一次这样无效的请求服务器还应对的过来,然而当一些(不怀好意的)人使用大量这种无效的请求访问时,则会全部打到数据库,导致数据库宕机,或者拖慢其他正确请求的访问。

那么,如何应对这种问题呢?

解决方案

常见的解决缓存击穿的方案有以下几种:

  1. 缓存空对象:当一个无效请求打到数据库查询无效时,将此次请求进行缓存,并赋予null值

    image-20230514153846161

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

    image-20230514162707886

    • 优点:内存占用较少,没有多余key
    • 缺点:① 实现复杂 ② 存在误判可能
  3. 增强id的复杂度

  4. 做好数据的基础格式校验

  5. 加强用户权限校验

缓存雪崩

定义:缓存雪崩是指在同一时间段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。

image-20230514171339528

通常的解决方案有以下四种:

  1. 给不同的Key的TTL添加随机值(防止大量TTL同时到期)
  2. 利用Redis集群提高服务的可用性
  3. 给缓存业务添加降级限流策略
  4. 给业务添加多级缓存

缓存击穿

定义:缓存击穿问题也叫热点问题,就是一个被高并发访问缓存重建业务较复杂的Key突然失效,无数的请求访问会在瞬间给数据库带来巨大的冲击。

image-20230514172958892

常见的解决方案有两种:

  1. 互斥锁(保证一致性)

    image-20230514173253317

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

    image-20230514173739158

    • 优点: 线程无需等待,性能较好
    • 缺点:① 不保证一致性 ② 有额外内存消耗 ③ 实现复杂

相关文章:

缓存存在的问题

文章目录 缓存问题缓存穿透引入解决方案 缓存雪崩缓存击穿 缓存问题 使用缓存时常见的问题主要分为三个:缓存穿透 、缓存雪崩、缓存击穿。 下面对其进行一一学习 缓存穿透 引入 定义:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#…...

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系列专栏📖前言:🪅什么是程序 、进程、线程?🪅线程的生命周期🪅多线程🪅守护者线程🪅线程并行与并发🪅死锁&#x1f…...

操作系统第三章——存储系统(下)

锦衣雪华玉颜色,回眸一笑天下倾 文章目录 3.2.1 虚拟内存的基本概念知识总览传统存储方式的特征,缺点局部性原理虚拟内存的定义如何实现虚拟内存技术知识总结 3.2.2 请求分页管理方式知识总览页表机制缺页中断机制地址变换机制知识回顾 3.2.3 页面置换算…...

初识结构体

目录 结构体的声明 结构体的基础知识 结构体的声明 结构体成员的类型 结构体变量的定义和初始化 定义 初始化 结构体成员的访问 结构体变量访问成员 结构体指针访问指向变量的成员 结构体传参 传地址 传结构体 结论 结构体的声明 结构体的基础知识 数组&#xff…...

协程并发下数据汇总:除了互斥锁,还有其他方式吗?

1. 简介 本文介绍了在并发编程中数据汇总的问题,并探讨了在并发环境下使用互斥锁和通道两种方式来保证数据安全性的方法。 首先,通过一个实例,描述了一个并发拉取数据并汇总的案例,并使用互斥锁来确保线程安全。然后&#xff0c…...

5、Ray-Actor模型和并发编程

5、Ray-Actor模型和并发编程 导航 1.简介和背景 2.Ray的基本概念和核心组件 3.分布式任务调度和依赖管理 4.对象存储和数据共享 5.Actor模型和并发编程 6.Ray的高级功能和扩展性 7.使用Ray构建分布式应用程序的案例研究 8.Ray社区和资源 9.核心框架介绍...

零信任架构下的企业数据安全防护体系设计与实践

1. 零信任架构:企业数据安全的新范式 过去十年我见过太多企业安全事件,根源往往在于传统边界防护的失效。某次给金融客户做安全评估时发现,他们花重金部署的防火墙就像个筛子——攻击者通过一个普通员工的钓鱼邮件就长驱直入,最终…...

Go语言的Web框架:从Gin到Echo

Go语言的Web框架:从Gin到Echo 1. 引言 Web框架是现代Web应用开发的重要工具,它提供了路由、中间件、参数处理等功能,大大简化了Web应用的开发过程。Go语言作为一种高效、简洁的编程语言,拥有丰富的Web框架生态。本文将介绍Go语言…...

开源可部署+零代码:春联生成模型-中文-base WebUI快速体验指南

开源可部署零代码:春联生成模型-中文-base WebUI快速体验指南 春节临近,想为家里增添一份独特的年味,却苦于没有文采写不出好对联?或者,作为内容创作者,想批量生成一些创意春联用于营销活动?今…...

考虑需求响应和碳交易的综合能源系统日前优化调度模型 关键词:柔性负荷 需求响应 综合能源系统 ...

考虑需求响应和碳交易的综合能源系统日前优化调度模型 关键词:柔性负荷 需求响应 综合能源系统 参考:私我 仿真平台:MATLAB yalmipcplex 主要内容:在冷热电综合能源系统的基础上,创新性的对用户侧资源进行了细致的划…...

C语言的初步认识

大家好!我是河南计算机专业的一名大一学生,很高兴今天加入博客大团体并写下我人生中的第一篇博客,在此我将会记录我大学中的编程生活。1.函数函数是C语言的基本组成单位,初识C语言,我们遇见的第一个函数是main函数&…...

Ostrakon-VL-8B多模态运维监控实战:智能日志分析与故障预警

Ostrakon-VL-8B多模态运维监控实战:智能日志分析与故障预警 最近和几个做运维的朋友聊天,大家普遍都在吐槽一件事:每天上班就像在“看监控”和“查日志”之间来回切换。服务器告警一响,就得一头扎进海量的日志文件里,…...

ROS 2从入门到精通系列(八):参数与配置 - Launch文件进阶实战与架构设计

1. Launch文件在复杂系统中的核心价值 第一次接触ROS 2的Launch文件时,我把它当成了简单的启动脚本。直到参与一个自动驾驶小车项目,需要同时协调5个激光雷达、3个摄像头和多个算法节点时,才真正理解它的威力。Launch文件本质上是一个系统级编…...

终极指南:如何在Koa2中构建高性能GraphQL API

终极指南:如何在Koa2中构建高性能GraphQL API 【免费下载链接】koa2-note 《Koa2进阶学习笔记》已完结🎄🎄🎄 项目地址: https://gitcode.com/gh_mirrors/ko/koa2-note Koa2作为一款轻量级Node.js框架,凭借其优…...

Qwen3-Reranker-0.6B镜像免配置:预置benchmark脚本一键跑通MTEB测试

Qwen3-Reranker-0.6B镜像免配置:预置benchmark脚本一键跑通MTEB测试 1. 开箱即用的重排序利器 如果你正在寻找一个开箱即用、性能出色的重排序模型,Qwen3-Reranker-0.6B绝对值得关注。这个仅有6亿参数的小巧模型,在文本重排序任务上展现出了…...

OpenClaw+Phi-3-mini-128k-instruct:技术博客自动生成与Hexo部署

OpenClawPhi-3-mini-128k-instruct:技术博客自动生成与Hexo部署 1. 为什么需要自动化技术博客写作 作为一名技术博主,我长期面临一个困境:代码写得多,文章写得少。每次完成一个项目后,明明有很多值得分享的技术细节&…...