Redis数据库(六):主从复制和缓存穿透及雪崩

目录

一、Redis主从复制

1.1 概念

1.2 主从复制的作用

1.3 实现一主二从

1.4 哨兵模式

1.4.1 哨兵的作用

1.4.2 哨兵模式的优缺点

二、Redis缓存穿透和雪崩

2.1 缓存穿透——查不到

2.1.1 缓存穿透解决办法

2.2  缓存击穿 - 量太大,缓存过期

2.2.1 缓存击穿的原因

2.2.2 缓存击穿解决办法

2.3 缓存雪崩

2.3.1 缓存雪崩成因

2.3.2 缓存雪崩解决办法


一、Redis主从复制

一般来说,用将Redis运用于工程项目中,只使用一台Redis是万万不可能的,原因如下:

  1. 从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;
  2. 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所有内存用作Redis存储数据,一般来说,单台Redis最大使用内存不应该超过20G。

因此,便出现了主从复制。 

1.1 概念

        主从复制:指的是将一个Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点 (master/leader),后者称为从节点(slave/follower)。 数据的复制是单向的 ,只能从主节点到从节 点。Master以写为主,Slave以读为主。 默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或者没有从节点), 但一个从节点只能有一个主节点。从机只能读取数据不能写入,数据直接从主机得来!

1.2 主从复制的作用

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,实际上是一种服务冗余
  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务 (即 写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载。尤其是在写少读多的场景下,通过从节点分担读负载,可以大大提供Redis服务器的并发量。
  4. 高可用(集群)基石:除了上述作用以外,主从复制还是哨兵和集群能够实现的基础,因此说主从复制是Redis高可用的基础。

电商网站上的商品,一般都是一次上传,无数次浏览,也就是“多读少写”。对于这种场景,我们可 以使用如下的架构:

平时在redis数据库中设置的数据,关闭系统了,还能看见就是进行了持久化,把内存中的数据存到磁盘上,等重新启动数据库,再从磁盘中把数据拷到内存中。  

1.3 实现一主二从

         默认情况下,每台Redis服务器都是主节点 ,主需要配置从机就行!

实现一个主机两个从机,如下图所示:

如何在一台电脑上产生3个服务器?

先拷贝一份redis.conf配置文件,把里面的端口改了,然后再让服务器端使用这个配置文件登录:redis-server ./redis1.conf,这样就是用别的端口号登录的服务器端。如下图所示:

只配置从机,不需要配置主机!认老大!一主(6379)二从(6380,6381)

配置从机:

此时查看主机信息:

至此,便实现了一主两从的配置。真实的主从配置应该在配置文件中配置,这样的话是永久的,我们通过命令配置的是临时的!

1.4 哨兵模式

      自动选举老大的模式!

引入的原因:主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题。

       哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个单独的进程,作为进程,他 会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

1.4.1 哨兵的作用

  1. 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器
  2. 当哨兵监测到Master宕机,会自动将Slave切换成Master,然后通过发布/订阅模式通知其他的从 服务器,修改配置文件,让它切换主机。

         然而一个哨兵进程对Redis服务器进程监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

1.4.2 哨兵模式的优缺点

二、Redis缓存穿透和雪崩

2.1 缓存穿透——查不到

          缓存穿透的就是用户想要查询一个数据,发现Redis中没有,也就是缓存没有命中,于是向持久层数据库发起查询,发现也没有这个数据,于是本次查询失败。当用户很多的情况下,缓存都没有命中,又 都去请求持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于缓存穿透。

       如上图:客户端请求的数据既不在缓存中,也不在数据库中,这样的请求会直接落到数据库上。当这种情况频繁发生时,会导致大量请求直接访问数据库,给数据库带来巨大的压力,甚至可能导致数据库崩溃。 

2.1.1 缓存穿透解决办法

解决方案1 -- 布隆过滤器

       在缓存之前增加布隆过滤器,以快速判断某个 key 是否可能存在,从而避免对不存在的 key 进行数据库查询。

实现方法

  • 在应用启动时,将所有可能存在的 key 加入布隆过滤器。
  • 查询时,首先通过布隆过滤器判断 key 是否存在,如果不存在则直接返回。

解决方案2--缓存空对象

将查询结果为空的数据也缓存起来,避免频繁查询同一个不存在的数据。

实现方法

  • 当数据库查询结果为空时,将结果(例如,null 或特殊值)缓存起来,并设置一个较短的过期时间(例如 5 分钟)。

2.2  缓存击穿 - 量太大,缓存过期

       缓存击穿(Cache Breakdown)是指缓存中某个热点数据(即频繁访问的数据)在过期的瞬间,有大量请求同时访问该数据,导致这些请求直接打到数据库上,给数据库带来巨大压力。与缓存穿透不同,缓存击穿的问题在于某个特定的热点数据的失效,而不是请求不存在的数据。

2.2.1 缓存击穿的原因

缓存击穿通常由以下原因引起:

  1. 热点数据失效:某个被频繁访问的数据在缓存中过期失效,而在该数据失效的一瞬间,有大量请求涌入。
  2. 缓存设置不合理:没有合理地设置缓存的过期时间或者没有采取必要的保护措施,导致热点数据过期时引发大量访问。

2.2.2 缓存击穿解决办法

解决方法1 -- 热点数据永不过期

      对于特别重要的热点数据,可以设置为永不过期,并通过异步线程或定时任务定期更新缓存中的数据。

实现方法

  • 设置缓存数据永不过期,同时通过异步线程或定时任务定期刷新缓存数据。

解决方案2 -- 加互斥锁

通过在缓存失效后,使用分布式锁或互斥锁来控制只有一个请求可以访问数据库并更新缓存,其他请求等待锁释放后再读取缓存。

实现方法

  • 当缓存失效时,尝试获取锁,如果获取成功则访问数据库并更新缓存。
  • 其他请求等待锁释放后再读取缓存。

      分布式锁: 使用分布式锁,保证对于每个key同时只有一个线程去查询后端服务,其他线程没有获得 分布式锁的权限,因此只需要等待即可。这种方式将高并发的压力转移到了分布式锁,因此对分布式锁 的考验比较大

2.3 缓存雪崩

       缓存雪崩(Cache Avalanche)是指缓存中的大量数据在同一时间过期或缓存服务器宕机,导致大量请求直接落到数据库上,给数据库带来巨大压力,可能导致数据库崩溃。与缓存穿透和缓存击穿不同,缓存雪崩的问题在于大量缓存数据同时失效。

举例理解:在写文本的时候,马上 要到双十一零点,很快就会迎来一波抢购,这波商品时间比较集中的放入了缓存,假设缓存一个小时。 那么到了凌晨一点钟的时候,这批商品的缓存就过期了。从而对这批商品的访问查询,都落到了后台数据库上,对于数据库而言,就会产生周期性的压力波峰。于是所有的请求都会达到存储层,存储层的调 用量会暴增,造成存储层也会宕机的情况。

2.3.1 缓存雪崩成因

  1. 缓存集中失效:大量缓存数据在同一时间过期。
  2. 缓存服务器宕机:缓存服务器不可用,导致所有请求直接访问数据库。

      其实集中过期,倒不是非常致命,比较致命的缓存雪崩,是缓存服务器某个节点宕机或断网。因为自 然形成的缓存雪崩,一定是在某个时间段集中创建缓存,这个时候,数据库也是可以顶住压力的。无非 就是对数据库产生周期性的压力而已。而缓存服务器节点的宕机,对数据服务器造成的压力是不可预估 的,很可能瞬间就把数据库压宕机。 

2.3.2 缓存雪崩解决办法

解决方案1 -- Redis高可用

使用高可用的缓存架构,如 Redis 集群、主从复制和哨兵模式,保证缓存服务的高可用性。

实现方法

  • 部署 Redis 集群,实现数据分片和高可用。
  • 使用 Redis 哨兵模式,实现自动故障转移和主从切换。

解决方案2 -- 限流降级

对请求进行限流保护,避免瞬间的大量请求打到数据库上。在必要时进行服务降级处理,返回默认值或错误信息。

实现方法

  • 使用限流算法(如令牌桶、漏桶)对请求进行限流保护。
  • 在缓存失效或服务器压力过大时,进行服务降级处理。

解决方案3 -- 数据预热

       在系统启动时,提前将热点数据加载到缓存中,避免在流量高峰期缓存失效。数据预热的含义就是在正式部署之前,先把可能的数据先预先访问一遍,这样部分可能大量访问的数 据就会加载到缓存中,在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间, 让缓存失效的时间点尽量均匀。

至此,Redis数据库的介绍就基本介绍完毕,感谢阅读本专栏,如果喜欢,点赞加关注!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

拍照就用华为Pura 70系列,后置真实感人像轻松出片!

平时喜欢用手机记录生活的人是不是总有个烦恼,想要拍出媲美单反的完美人像,又怕照片失真,经过近期对手机摄影的探索,我发现了华为Pura70系列的真实感人像之美,它给予每个热爱生活的人直面镜头的自信,记录真…

毕业季留念,就该这样记录下来

毕业季来啦!这个季节总是充满了不舍和期待,就像夏天里的冰淇淋,甜蜜中带着一丝丝凉意。在这个特别的时刻,我想和大家分享一款陪伴我记录青春点滴的神器——nova 12 Ultra 手机。 要说自拍,我可是个“资深玩家”。以前…

以算筑基,以智赋能 | Gooxi受邀出席2024中国智算中心全栈技术大会

6月25日,2024中国智算中心全栈技术大会暨展览会、第5届中国数据中心绿色能源大会暨第10届中国(上海)国际数据中心产业展览会在上海新国际博览中心隆重召开。Gooxi受邀参与并携最新服务器产品以及解决方案亮相展会,吸引众多行业领袖…

基于MATLAB仿真设计无线充电系统

通过学习无线充电相关课程知识,通过课程设计无线充电系统,将所学习的WPT,DC-DC,APFC进行整合得到整个无线充电系统,通过进行仿真研究其系统特性,完成我们预期系统功能和指标。 以功率器件为基本元件&#x…

【人工智能学习之图像操作(二)】

【人工智能学习之图像操作(二)】 图像上的运算图像混合按位运算 图像的几何变换仿射变换透视变换膨胀操作腐蚀操作开操作闭操作梯度操作礼帽操作黑帽操作 图像上的运算 图像上的算术运算,加法,减法,图像混合等。 加减…

Profibus协议转Modbus协议网关模块在船舶中的应用

一、背景 在当今数字化快速发展的时代,船舶作为重要的交通工具之一,也在不断追赶着科技的步伐,实现自身的智能化升级。而在这个过程中,Profibus转Modbus网关(XD-MDPB100)作为关键的一环,扮演着…

05 Shell编程之免交互

目录 5.1 Here Document 免交互 5.1.1 Here Document 概述 5.1.2 Here Document 免交互 1. 通过read命令接收输入并打印 5.1.3 Here Document变量设定 5.1.4 Here Document 格式控制 (1)关闭变量替换的功能。 (2)去掉每行之前的TAB字符。 5.1.5 Here Document 多行注释…

前端写代码真的有必要封装太好么?

前言 封装、代码复用、设计模式…… 这些都是方法,业务才是目的。技术始终是为业务服务的。能够满足业务需求,并且用起来舒服的,都是好方法。 不存在一套适用于所有项目的最佳代码组织方法,你需要结合业务,去不断地…

cad报错:由于找不到vcruntime140.dll无法继续执行代码

在现代的工程设计中,计算机辅助设计(CAD)软件已经成为了工程师们不可或缺的工具。然而,在使用CAD软件的过程中,有时我们会遇到一些问题,其中之一就是“找不到vcruntime140.dll”的错误提示。本文将详细介绍…

鸿蒙期末项目(2)

主界面 主界面和商店详情界面参考如下设计图(灵感严重匮乏) 简单起见,将整个app分为4个布局,分别是主界面、搜索界面、购物车界面,以及个人界面。 所以在app中也需要使用tab组件进行分割,且需要通过tabBa…

安装Flask

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 大多数Python包都使用pip实用工具安装,使用Virtualenv创建虚拟环境时会自动安装pip。激活虚拟环境后,pip 所在的路径会被添加…

离散傅里叶变化

傅里叶变换 对傅里叶变换了解不是很清楚的朋友推荐一下这个帖子,讲得很详细 傅里叶变换 源码 先看源码链接 #include "opencv2/core.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/imgcodecs.hpp" #include "open…

FuTalk设计周刊-Vol.026

🔥🔥AI漫谈 热点捕手🔥🔥 1、Hotshot-XL AI文本转GIF Hotshot-XL 是一种 AI 文本转 GIF 模型,经过训练可与Stable Diffusion XL一起使用。能够使用任何现有或新微调的 SDXL 模型制作 GIF。 网页体验 网页http://htt…

git 初基本使用-----------笔记(结合idea)

Git命令 下载git 打开Git官网(git-scm.com),根据自己电脑的操作系统选择相应的Git版本,点击“Download”。 基本的git命令使用 可以在项目文件下右击“Git Bash Here” ,也可以命令终端下cd到指定目录执行初始化命令…

聚类算法(3)---K-means 算法

本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记&#…

软件测试的目的和原则介绍,软件测试外包公司推荐

在当今信息技术迅速发展的时代,软件产品的质量和安全性对用户至关重要。而软件测试作为保障软件产品质量的关键一环,具有不可或缺的作用。 软件测试的目的是为了发现和解决软件产品中的缺陷和问题,确保软件的稳定和可靠性。软件测试帮助找出…

表格截图怎么转换成表格?6个软件帮助你快速进行表格转换

表格截图怎么转换成表格?6个软件帮助你快速进行表格转换 将表格截图转换为可编辑的表格文件是处理数据时常见的需求,特别是在需要分析或编辑图像中包含的信息时。以下是几款帮助你快速进行表格转换的软件和工具,它们提供了不同的功能和适用场…

揭秘!这款电路设计工具让学校师生都爱不释手——SmartEDA的魔力何在?

随着科技的飞速发展,电子设计已成为学校师生们不可或缺的技能之一。而在众多的电路设计工具中,有一款名为SmartEDA的工具,凭借其强大的功能和友好的用户体验,迅速赢得了广大师生的青睐。今天,就让我们一起探索SmartEDA…

游泳耳机入耳式好还是骨传导好?游泳教练力荐实力卓绝的四大热款

作为一名长期致力于游泳爱好者健康与运动体验提升的专业教练,我深知在水中听音乐的魅力,同时也深知选择正确的耳机对于水上运动的重要性。近年来,市场上的游泳耳机类型日益丰富,其中入耳式和骨传导两大主流各有千秋。今天&#xf…

系统运维面试题总结(网络基础类)

系统运维面试题总结(网络基础类) 网络基础类第七层:应用层第六层:表示层第五层:会话层第四层:传输层第三层:网络层第二层:数据链路层第一层:物理层 类似面试题1、TCP/IP四…