缓存存在的问题

news2024/11/28 18:50:58

文章目录

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

缓存问题

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

下面对其进行一一学习

缓存穿透

引入

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20230521给coolpi4b开发板刷Android12和串口的使用

20230521给coolpi4b开发板刷Android12和串口的使用 2023/5/21 9:31 所需要的配件: 1、2.0mm转2.54mm的杜邦线母头2条(2位一起的一条) 2、串口板:CH340(WIN7下使用) 3、USB的公头-公头线 首先,欢…

微星MSI GE66 10SF-416RU电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件配置 硬件型号驱动情况 主板Intel HM470 处理器Intel Core i7-10875H 2.30GHz up to 5.10GHz已驱动 内存Kingston Fury Impact DDR4 2x16Gb 3200mhz已驱动 硬盘NT…

Redis介绍及Linux单机安装

1.Redis介绍 1.1.什么是Redis Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis是完全开源的&#…

OpenCV人脸识别QT上位机(含源码)

OpenCV Releases:4.6.0 开发平台:QT 6.4.0 编译环境:MSVC 2019 64bit 主要功能:1、预处理图片 2、生成CSV文件 3、生成识别器文件等功能。主要用于学习opencv的整个流程和实现一些简单的功能,比如识别指定的人脸并显…

安卓与串口通信-实践篇

前言 在上一篇文章中我们讲解了关于串口的基础知识,没有看过的同学推荐先看一下,否则你可能会不太理解这篇文章所述的某些内容。 这篇文章我们将讲解安卓端的串口通信实践,即如何使用串口通信实现安卓设备与其他设备例如PLC主板之间数据交互…

【计算机网络复习】第五章 数据链路层 1

数据链路层的作用 两台主机(端到端)之间的通信是依靠相邻的主机/路由器之间的逐步数据传送来实现 数据链路层实现相邻主机/路由器间的可靠的数据传输 网络层:主机-主机通信 数据链路层:点到点通信 数据链路层的主要功能 u 链路…

3R幸福法

3R幸福法 3R幸福法可以帮助我们《建立和谐亲密关系》 模型介绍 3R幸福法体现的是一个人被关注的完整逻辑: Reson-理由,关注缘起。不会让你想表达的感情看起来显得唐突,不会让对方和自己不好意思。Respond-反应,是关注影响。更多…

ROS 工作空间与功能包的创建(三)

执行命令: mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src/catkin_init_workspace echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc 效果: 输入命令查看添加成功了没有 tail ~/.bashrc 编译工程:执行命令 cd ~…

csdn文章markdown格式下载

前言 网上下载CSDN文章的方式多种多样,有的直接下载为pdf格式,有的利用python/java代码将文章下载为md格式,也有的用JavaScript下载文章,但下载的文章仅限于自己写的(会介绍),这里也提供一种简单…

关于接口中的一些常用实例以及比较方法的区别

文章目录 💐文章导读🌴Object 类toString() 获取对象信息equals 对象比较方法hashCode 获得对象的具体位置 🌴接口使用实例Comparable 接口Comparator 接口 💐文章导读 在本篇文章中,详解了什么是Object类,…

MyBatis中三级缓存的理解

文章目录 前言1. 环境搭建1.1 依赖引入1.2 mybatis-config.xml配置配置db.properties在mybatis-config.xml引入db.properties 1.3 实体类1.4 mappermapper接口mapper映射文件 1.5 测试 2.缓存2.1 一级缓存mybatis-config.xml 配置日志开启日志配置日志文件logback.xml测试相同m…

深度学习之搭建LSTM模型预测股价

大家好,我是带我去滑雪! 本期利用Google股价数据集,该数据集中GOOG_Stock_Price_Train.csv为训练集,GOOG_Stock_Price_Test.csv为测试集,里面有开盘价、最高股价、最低股价、收盘价、调整后的收盘价、成交量&#xff0…

Flutter项目webview加载没有HTTPS证书的网页在Android和iOS设备上无法显示的解决方案

一、问题描述 Flutter项目使用谷歌官方webview库 webview_flutter,加载自签名证书、证书失效、无证书等HTTPS网页地址时,在Android或pc浏览器中提示证书失效,在iOS设备上为空白页,为了加载自签名证书的网页,需要饶过i…

AVR单片机ATemga328P中断原理的介绍

1、一AVR单片机中断原理的介绍 ATmega328P微控制器具有两个外部中断引脚,分别是INT0和INT1。 外部中断0(INT0):它对应的引脚是PD2(数字引脚2)。INT0可以用于响应外部信号的边沿触发(上升沿、下…

【服务器】使用Nodejs搭建HTTP web服务器

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 前言 1.安装Node.js环境 2.创建node.js服务 3. 访问node.js 服务 4.内网穿透 4.1 安装配置cpolar内网穿透 4.2 创建隧道映射本地端口 5.固定公网地址 [TOC] 转载自内网穿透…

Unity Addressables学习笔记(1)---创建远程服务器加载资源

例子1:加载一个图片 1.首先创建一个UI Image,空白图片,资源打包方式选择真是部署的 2.修改远程发布和加载配置 Bulid Path选择RemoteBuildPath Load Path我选择了custom,地址是http://localhost:8080/WebGL/ 遇坑1 :最开始我选择的Build Path 是 Loca…

windows安装mysql 5.7.41

前言 要学mysql,肯定得本地装上一个玩一玩啦,下面一起来安装mysql吧 一、下载 https://downloads.mysql.com/archives/community/ 顺便说一下,下载按钮下方有个md5,可以验证下文件是否被篡改,理论上官网下载的应该问…

初识结构体

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

【ChatGPT】IOS如何下载注册使用ChatGPT的APP(教学)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、…

iptables 防火墙

iptables概述 Linux系统的防火墙:ip信息过滤系统,它实际上由两个组件netfilter和iptables组成。 主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上 netfilter / iptables关系: netfilter:属于…