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

Redis中缓存穿透、缓存击穿、缓存雪崩的详解

如何理解Redis缓存的穿透、击穿、雪崩问题:

缓存穿透

是指缓存中和数据库中都没有数据,而用户不断访问,导致这个不存在的数据每次请求都要到存储层去查询,这样失去了意义。

缓存穿透的解决方案有哪些?

  • 缓存null值
  • 布隆过滤
  • 增强id的复杂度,避免被猜测id规律
  • 做好数据的基础格式校验
  • 加强用户权限校验
  • 做好热点参数的限流

讲一讲布隆过滤

布隆过滤器的特点:
容器角度:

  • 如果布隆过滤器判断结果为元素存在,那么该元素实际上元素不一定会存在,由于哈希碰撞,所以会存在一定误判率。
  • 如果布隆过滤器判断结果为元素不存在,那么他就一定不存在,因为无论哈希碰撞啥的,只要该元素计算出下标值对应数组元素值为0,那么该元素就必定不存在。
  • 布隆过滤器是不支持删除元素的,因为如果位图的某个位被多个元素占用着,那么如果删除其中一个元素是否能将该位置0能,置0的话会影响到其他元素,不置0就等于没删除。

元素角度:

  • 如果元素实际不存在,布隆过滤器可能判断存在。
  • 如果元素实际存在,布隆过滤器一定判断存在。

利用第二个特性,我们就能解决持续从数据库查询不存在的值的问题,把要查询的值先过布隆过滤器,判断是否存在,存在就走redis缓存,不存在就直接返回,并且配合缓存空值,可以有效解决缓存穿透问题,虽然存在一定误差,但是在业务范围内允许接受。

  • 第一步先查询数据库数据并加入到布隆过滤器中。
  • 请求发送过来布隆过滤器判断是否命中,命中就走缓存,之后接着看是否走数据库还是直接从缓存获取返回。
  • 如果布隆过滤器miss,就直接返回,不走cache了。

缓存击穿

是缓存中没有数据,而数据库中有数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大。

解决方案优点缺点
互斥锁
  • 没有额外的内存消耗
  • 保证一致性
  • 实现简单
  • 线程需要等待,性能受影响
  • 可能有死锁风险
逻辑过期 
  • 线程无需等待。性能较好
  • 不保证一致性
  • 有额外内存消耗
  • 实现复杂

缓存雪崩

就是同一时间内,大量的缓存key值同时失效或者redis服务器宕机,导致大量的请求到达数据库,带来巨大的压力

解决方案

​​​​​​​

1. 合理设置缓存过期时间

  • 避免大量缓存数据同时过期,可以设置缓存的过期时间为随机值,或者在缓存集中到期之前提前对热点数据进行预热,将热点数据提前加载到缓存中。

2. 使用多级缓存

  • 将缓存数据分散到不同的缓存节点或缓存服务器中,以减少缓存集中到期的风险。可以结合本地缓存、分布式缓存等方式来实现多级缓存。

3. 限流和熔断

  • 对请求进行限流处理,避免大量请求同时涌入数据库。可以使用限流算法(如令牌桶、漏桶算法)对请求进行限制。同时,可以设置熔断机制,在检测到系统异常时暂时屏蔽部分请求,以保护数据库免受过载。

4. 数据库优化

  • 提高数据库的处理能力和稳定性,可以采用数据库集群、读写分离、垂直拆分等方式来优化数据库架构,提高数据库的负载能力。

相关文章:

Redis中缓存穿透、缓存击穿、缓存雪崩的详解

如何理解Redis缓存的穿透、击穿、雪崩问题: 缓存穿透 是指缓存中和数据库中都没有数据,而用户不断访问,导致这个不存在的数据每次请求都要到存储层去查询,这样失去了意义。 缓存穿透的解决方案有哪些? 缓存null值布隆过滤增强…...

[Meachines] [Medium] Popcorn SQLI+Upload File+PAM权限提升

信息收集 IP AddressOpening Ports10.10.10.6TCP:22,80 $ nmap -p- 10.10.10.6 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.1p1 Debian 6ubuntu2 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: …...

【Linux】python进程管理之supervisor安装使用教程

安装supervisor pip install supervisor生成配置文件 echo_supervisord_conf > /etc/supervisord.conf修改配置文件 vim /etc/supervisord.conf[unix_http_server] file/run/supervisor.sock ; the path to the socket file[supervisord] logfile/var/log/supervisord.log…...

BEM架构

视频 总结&#xff1a; BEM架构&#xff1a;一个命名类的规范而已&#xff0c;说白了就是如何给类起名字使用sass的目的&#xff1a;在<style>中模块化的使用类名&#xff0c;同时减少代码数量 1、 BEM架构 &#xff08;通义灵码查询结果&#xff09; BEM (Block Ele…...

物联网(IoT)详解

物联网&#xff08;IoT&#xff09;详解 1. IoT定义简介2. IoT工作原理3. IoT关键技术4. 物联网与互联网区别5. IoT使用场景6. 开源物联网平台7. 参考资料 1. IoT定义简介 首先第一个问题&#xff0c;什么是物联网&#xff08;IoT&#xff09;? 物联网&#xff08;英文&#…...

ansync/await 运行流程图

1、流程图&#xff1a; 2、await 之后的方法是何时执行&#xff0c;如何执行的&#xff1f; await 的方法在 Task 执行完成之后&#xff0c;通过调用 Finish 方法执行的。 具体的执行步骤是先将 MoveNext 方法注册到 Task 的回调里&#xff0c;然后在 Task 执行完后调用这个方法…...

生产环境docker nginx+php8.0镜像

生产环境docker nginxphp8.0镜像 自定义创建php8.0镜像&#xff0c;创建dockerfile FROM php:8.0-fpm# 安装系统依赖 RUN sed -i s|http://deb.debian.org/debian|http://mirrors.aliyun.com/debian|g /etc/apt/sources.list && \apt-get update && apt-get i…...

【Hadoop】核心组件深度剖析:HDFS、YARN与MapReduce的奥秘

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Hadoop简介 2、Hadoop生态系统概览 二、Hadoo…...

Docker Swarm部署SpringCloud Alibaba微服务踩坑记录

为了方便部署和维护微服务项目&#xff0c;还是得上集群部署方案&#xff0c;决定采用Docker的swarm&#xff0c;为什么不是k8s&#xff0c;因为部署骑来又是个新的工具&#xff0c;之前就一直用的docker&#xff0c;自带了类k8s的工具&#xff0c;索性就直接使用swarm了&#…...

深入理解Spring Boot中的AOP应用:从基础组件到高级功能的实现

深入理解Spring Boot中的AOP应用&#xff1a;从基础组件到高级功能的实现 在现代Java开发中&#xff0c;Spring Boot因其简洁性和强大的功能而被广泛采用。而AOP&#xff08;面向切面编程&#xff09;作为Spring框架的核心特性之一&#xff0c;为开发者提供了在不修改业务代码的…...

《区块链与监管合规:在创新与规范之间寻求平衡》

区块链技术作为近年来最具创新性和颠覆性的技术之一&#xff0c;已经在金融、供应链、医疗、物联网等多个领域展现出巨大的潜力。然而&#xff0c;随着其应用的不断拓展&#xff0c;如何应对监管和合规性要求成为了区块链发展道路上一个至关重要的问题。 区块链的去中心化、匿…...

Nuxt3【服务器】server 详解

server 文件夹中的内容&#xff0c;会被自动注册为API和服务器处理程序。 服务器 API 对应路径 server/api server/api/hello.ts export default defineEventHandler((event) > {return {hello: world} })页面中使用 <script setup lang"ts"> const { da…...

防火墙技术原理与应用

防火墙概述 防火墙概念 防火墙:通过一种网络安全设备,控制安全区域间的通信,隔离有害通信,进而阻断网络攻击。一般安装在不同安全区域边界处,用于网络通信安全控制,由专用硬件或软件系统组成。 根据网络安全信任程度和需保护的对象,划分安全区域 公共外部网络:Inter…...

【BUU】[NewStarCTF 2023 公开赛道]Final -CP读取文件内容

漏洞检测 访问首页发现是ThinkPHP5 的站点 用工具扫描一下,发现存在ThinkPHP5.0.23 RCE漏洞 访问验证,写入shell 成功写入shell. 根目录发现flag,但是权限不足 提权获取flag 准备提权,这里一开始尝试了find,但是find权限不足 尝试采用cp命令,移动到web目录,发现访问还是…...

火绒安全:一款强大且高效的国产杀毒软件

火绒安全&#xff08;Huorong Security&#xff09;是一款国产的杀毒软件&#xff0c;以其轻量、高效和对系统资源占用低的特点受到广泛欢迎。与许多其他杀毒软件不同&#xff0c;火绒注重低调实用&#xff0c;旨在为用户提供无干扰且稳定的系统保护。 火绒安全的主要特点&…...

Oracle 的DBA有哪些权限

Oracle数据库的**DBA&#xff08;数据库管理员&#xff09;**拥有全部特权&#xff0c;是Oracle数据库系统最高权限的用户。DBA的权限包括但不限于&#xff1a; 1.创建和管理数据库结构&#xff1a; DBA可以创建、修改和删除数据库中的所有对象&#xff0c;如表、索引、视图等&…...

在navicat上运行sql文件

前言 本文简单介绍在navicat上运行sql文件 第一步&#xff1a; 打开navicat&#xff0c;点击连接->mysql 第二步&#xff1a; 输入连接名&#xff0c;可以随便取 然后点击确定 第三步&#xff1a; 双击连接名&#xff0c;颜色变化代表连接上了 第四步&#xff1…...

STM32裸机和RTOS中的线程安全问题及STM32cubeMX中的线程安全策略

STM32线程安全问题 术语“线程” 和“多线程” 适用于裸机和基于RTOS的应用程序&#xff0c;线程安全问题并不只存在于基于RTOS的应用程序中&#xff1b;裸机应用程序中也存在这个问题&#xff0c;在裸机应用程序中&#xff0c;中断服务程序允许调用C库函数。线程安全问题可能…...

图的遍历

一、深度优先遍历(DFS) 二、广度优先遍历&#xff08;BFS&#xff09;...

CUDA-MODE课程笔记 第8课: CUDA性能检查清单

我的课程笔记&#xff0c;欢迎关注&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第8课: CUDA性能检查清单 课程笔记 这节课实际上算是CUDA-MODE 课程笔记 第一课: 如何在 PyTorch 中 profile CUDA kernels 这…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

深入理解 C++ 左值右值、std::move 与函数重载中的参数传递

在 C 编程中&#xff0c;左值和右值的概念以及std::move的使用&#xff0c;常常让开发者感到困惑。特别是在函数重载场景下&#xff0c;如何合理利用这些特性来优化代码性能、确保语义正确&#xff0c;更是一个值得深入探讨的话题。 在开始之前&#xff0c;先提出几个问题&…...