如何解决缓存雪崩、击穿、穿透难题?

news2024/9/27 19:21:37

缓存雪崩、缓存击穿和缓存穿透这三个问题是我们在使用redis做缓存的时候要面临的,一旦发生这三个问题,就会导致大量的请求都积压到了数据库层,有可能导致数据库宕机,进入导致整个系统不可用。

下边,具体看一下这三个问题是如何产生的,以及如何解决。

缓存雪崩

缓存雪崩是指大量的应用请求无法在Redis缓存中进行处理,然后应用将大量的请求发送到数据库层,导致数据库层的压力激增。

导致缓存雪崩一般是由两个原因导致的,一个是缓存中大量数据同时过期,另一个是Redis服务不可用。一个一个介绍。

缓存中大量数据同时过期

当某一个时刻,大量数据同时过期,应用再访问这些数据,就会发生缓存缺失,紧接着,应用就会把请求发送给数据库,从数据库中读取数据,如果应用的并发请求量很大,那么数据库的压力就很大了,会进一步影响到数据库的正常业务请求。

针对这种情况,有多种解决方案,提供两种解决方案:

  • 给数据设置不同的过期时间;
  • 服务降级,针对发生缓存雪崩,针对不同的数据采取不同的处理方式。当业务访问非核心数据时,暂时停止从缓存中查询数据,直接返回预定义信息、空值或错误信息;当业务应用访问的是核心数据,仍然允许查询缓存如果缓存缺失,也可以查询数据库。
Redis服务不可用

Redist宕机,无法处理请求,就会导致大量请求积压到数据库层,从而发生缓存雪崩。

针对Redis宕机导致服务雪崩这个情况,我们可以对服务进行熔断或请求限流。当一段时间间隔内,多次发生访问Redis失败,就进入熔断状态,一段时间之后允许少量请求通过,如果请求都执行成功,则退出熔断,如果请求仍失败,就在下一个时间段,再次允许少量请求通过,试探服务是否恢复。

通过主从节点的方式构建Redis缓存高可靠集群,如果Redis缓存的主节点故障宕机了,从节点还可以切换成主节点,继续提供缓存服务,避免了由于缓存实例宕机而导致的缓存雪崩问题。

缓存击穿

缓存击穿是指针对某个访问非常频繁的热点数据的请求,无法在缓存中进行处理,紧接着,访问该数据的大量请求,一下子就发送到了数据库,导致数据库压力激增,影响数据库处理其他请求。

对于这种情况的解决方案,一般情况下都是简单粗暴,对于访问特别频繁的数据,不设置过期时间,然后定时主动更新缓存。

缓存穿透

缓存穿透是指要访问的数据即不在Redis缓存中,也不在数据库中,导致请求在访问缓存时找不到,再去访问数据库,发现数据库中也没有要访问的数据,给缓存和数据库都带来压力。

image

出现缓击穿的场景?

  • 业务层误操作:缓存中和数据库中的数据都被误删除
  • 恶意攻击:专门访问数据库中没有的数据。

针对第一种,我们可以在查询数据的时候,在Redis缓存一个空值或者业务层协商的缺省值,后续应用发送的后续请求再进行查询时,就可以直接从 Redis 中读取空值或缺省值,返回给业务应用了,避免了把大量请求发送给数据库处理,保持了数据库的正常运行。

针对第二种情况,可以增加布隆过滤器,快速判断数据是否存在,避免从数据库中查询是否存在,减轻数据库压力。

学习来源:极客时间 《Redis核心技术与实战》 学习笔记 Day15

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

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

相关文章

Qt扫盲-Qt资源系统概述

Qt资源系统概述一、概述二、资源文件(.qrc)三、外部二进制资源四、内嵌资源五、压缩资源文件六、在应用中使用资源七、使用Library 库中的资源一、概述 Qt资源系统是一种独立于平台的机制,用于在应用程序的可执行文件中存储二进制文件。如果您的应用程序总是需要一…

Spring Boot学习之集成Dubbo+Zookeeper小案例

文章目录一 框架搭建1. [Dubbozookeeper下载和安装](https://blog.csdn.net/yang2330648064/article/details/128790320)二 项目创建2.1 服务者部分2.2 消费者部分2.3 注意点2.3.1 在service的实现类中配置服务注解,发布服务!注意导包问2.3.2 服务接口的…

[Vulnhub] DC-8

下载链接&#xff1a;https://download.vulnhub.com/dc/DC-8.zip 知识点&#xff1a; sqlmap 注入出用户名密码msfvenom 生成脚本msf反弹shellsuid-exim 提权 目录 <1> 信息搜集 <2> 反弹shell (1) 利用kali自带webshell代码 (2) msfvenom制作反弹shell脚本…

SaaS平台数据表单组件设计技巧分享

SaaS平台数据表单组件设计技巧分享&#xff0c;数据表单方法&#xff1a;固定表头、固定侧栏、自定义栏、分页器、过滤器、数据排序、多选项同时操作、简单且简约、普通的字体样式、项目链接、鼠标悬停设计指南&#xff0c;为大家提供有关数据表单设计的实用性建议。在实际的数…

20克拉默法则、逆矩阵、体积

本节是关于行列式的最后一课&#xff0c;主要包括按各方面&#xff1a;求逆矩阵、克莱姆法则和体积 求逆矩阵 A-1 早在之前&#xff0c;就已经了解过求解逆矩阵的方法&#xff1a;高斯-若尔当求逆法。高斯-若尔当求逆法对于数值计算无懈可击&#xff0c;但很难想象这是如何做…

Hadoop基础之《(6)—Hadoop单机伪集群安装》

一、安装JDK yum install java-1.8* 二、关闭防火墙 systemctl status firewalld systemctl stop firewalld systemctl disable firewalld 三、配置ip地址和主机名映射 vi /etc/hosts 加入&#xff1a; 192.168.1.1 hadoop001 四、配置免密登录 1、生成公私钥 ssh-key…

设计模式第5式:装饰器模式

前言 当我们初学编程时&#xff0c;扩展程序功能一般习惯使用继承&#xff0c;使用继承有一些缺点&#xff0c;那就是容易造成类爆炸&#xff0c;并且容易继承一些不需要的特性。当我们学习完装饰器模式后&#xff0c;会发现善用组合会有比继承更好的效果。 正文 1、咖啡馆案…

全志A40i+Logos FPGA开发板(4核ARM Cortex-A7)硬件说明书(上)

前 言 本文档主要介绍TLA40iF-EVM工业评估板硬件接口资源以及设计注意事项等内容。 核心板的ARM端和FPGA端的IO电平标准一般为3.3V,上拉电源一般不超过3.3V,当外接信号电平与IO电平不匹配时,中间需增加电平转换芯片或信号隔离芯片。按键或接口需考虑ESD设计,ESD器件选型时需…

深入Java自动化探针技术的原理和实践

转至作者 蒋志伟&#xff1a;深入Java自动化探针技术的原理和实践 前言建议阅读时间 30~40分钟读者需要对Java JVM 一定了解&#xff0c;文章会系统的介绍Java 探针核心原理和技术实现&#xff0c;总结目前一些主流的框架方案。同时&#xff0c;接下来我会分享一篇关于 OpenTel…

你是如何学会正则表达式的?

前言 前言 正则表达式作为对字符串操作的一种逻辑公式&#xff0c;它使用一些特定字符及其组合组成“规则字符串”来对字符串进行过滤的操作&#xff0c;如在注册验证的时候我们就经常会用到正则表达式&#xff0c;但正则表达式的变式太多&#xff0c;我们不用完全的去记住每一…

XSSed通关教程

XSSed通关教程 首先整体浏览网站 进入Level1 Basic XSS 首先整体浏览网站 对源码进行分析 漏洞产生于如下代码段&#xff1a; echo($_GET[‘q’]); 直接将用户输入插入了html页面&#xff0c;没有任何过滤。 构造普通payload&#xff1a; <script>alert(/xss/)<…

剑指 Offer II 004. 只出现一次的数字

题目链接 剑指 Offer II 004. 只出现一次的数字 mid 题目描述 给你一个整数数组 nums&#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [2,2,3,2] 输出&…

LeetCode042之接雨水(相关话题:动态规划,单调栈)

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,…

vue复习+vuex

一、vue.js的基本指令1、Vue的作用&#xff1a;快速的构建前端页面&#xff08;封装了html、css、js&#xff09;,以工程化的方式进行前端的开发2、Vue的核心&#xff1a;&#xff08;1&#xff09;组件化&#xff1a;&#xff08;2&#xff09;数据双向绑定&#xff08;3&…

linux基本功系列之sudo命令实战一

文章目录一.sudo命令介绍二. 语法格式及常用选项三. sudo配置文件详解3.1 sudo的配置文件3.2 配置文件注释3.3 sudo授权规则四. sudo常用参数实战 参考案例4.1 查看当前用户有哪些被sudo服务授权的命令4.2 结束密码的有效期4.3 限制用户的权限总结前言&#x1f680;&#x1f68…

3分钟解读ISO27001信息安全管理体系

一、什么是ISO27001 ISO27001是信息安全管理体系认证&#xff0c;对应国标号GB/T22080-2016&#xff0c;企业建立ISO27001体系能有效保证企业在信息安全领域的可靠性&#xff0c;降低企业泄密风险&#xff0c;更好的保存核心数据和重要信息。 信息安全对每个企业都是非常重要的…

Spring Cloud 高频面试题25连环炮!

今天给大家分享SpringCloud高频面试题。 Spring Cloud核心知识总结 下面是一张Spring Cloud核心组件关系图&#xff1a; 从这张图中&#xff0c;其实我们是可以获取很多信息的&#xff0c;希望大家细细品尝。 话不多说&#xff0c;我们直接开始 Spring Cloud 连环炮。 连环…

【算法基础】链表与邻接表

在机试、面试中,使用链表通常不是结构体构建Node,申请新节点new操作,因为速度过慢,申请10w量级的空节点就已经超时了。因为在算法竞赛中,常常使用 一、数组模拟单链表【⭐邻接表(n个链表)⭐】 邻接表(n个链表)最主要的应用是存储图和存储树。 建表、插入、删除操作…

ThinkPad R490电脑开机之后无线重启怎么重装系统?

ThinkPad R490电脑开机之后无线重启怎么重装系统&#xff1f;有用户使用ThinkPad R490电脑正常开机的情况下&#xff0c;出现了系统自动重启的情况&#xff0c;无法正常的使用电脑了。遇到这个情况怎么去重装一个新的电脑系统&#xff0c;恢复正常使用呢&#xff1f;来看看以下…

17. datetime模块

python 标准库中的 datetime 模块提供了和日期和时间相关的类。 类功能datetime.date以年、月和日表示日历中的日期datetime.time以小时、分钟和秒表示一天中的时间datetime.datetime以年、月、日、小时、分钟和秒表示日期和时间datetime.timedelta表示一个时间段&#xff0c;…