Redis 缓存数据库

news2024/11/17 3:39:22

目录

    • Redis 高可用方案
      • 高可用概念
      • Redis 高可用的实现方案
      • 1、主从模式
      • 2、哨兵模式
      • 3、集群模式

Redis 高可用方案

高可用概念

  高可用(High Availability,既HA),指的是通过尽量缩短日常维护操作和减少突发系统奔溃锁导致的停机时间来提高系统和应用的可用性。如果一个业务系统全年都在提供服务,那么它的可用性可达100%。
  那么什么样的系统可以称之为高可用呢?
  业界一般用几个九来衡量系统的可用性,当系统运行时间达到4个九既99.99%时的系统称之为高可用,全年宕机时间为52分钟左右。

高可用一般来说有两个含义:

  • 一是数据尽量不丢失。
  • 二是保证服务尽可能可用。

Redis 中的

  • AOF 和 RDB 数据持久化保证了数据尽量不丢失。
  • 让多个节点来保证服务尽可能提供服务。

这里说一下单个节点系统的明显缺陷,一旦发生故障会导致服务不可用,而且,单个节点处理所有的请求,吞吐量有限,容量也是有限的。

Redis 高可用的实现方案

  Redis 实现高可用,在于采用集群的方式,提供多个节点,通过有是那种部署模式:主从模式、哨兵模式、集群模式。

1、主从模式

  Redis 的主从模式,我们可以把它想象成我们数据库高可用方案中的 主从复制,读写分离。主从模式就是,我们部署多台 Redis 节点,其中一台节点是主节点,其他的节点都是从节点。主从模式实现读写分离,只有master 节点提供数据的事务性操作,slave 节点只提供读操作。所有 slave 节点的数据都是从 master 节点同步过来的,该模式的结构如下:
 

在这里插入图片描述

 

  如果我们使用简单的主从模式架构方式,既所有 slave 节点都挂载在 master 节点上,这样做的优点是 slave 节点与master 节点的数据延迟较小。缺点是 master 同步一次数据的时间较长。
  改进方案是:我们可以只在 master 节点下只挂载一个 slave 节点,其他的节点挂载在这个 slave 节点,让数据同步经过传递完成。如图所示,Redis 和大部分中间件的主从模式中的数据同步都是由 slave 节点主动发起的,这样可以减少 master 的性能消耗。

 

在这里插入图片描述

 

主从模式的优缺点
优点:
1、主从模式做到了数据冗余,数据拥有备份,当主节点发生故障时,可以选择一个 slave 继续提供服务。
2、实现读写分离,减低了 master 节点读数据的压力,提高了系统的性能。
3、配置简单,容易搭建。只需要在slave 节点上维护master 节点的地址信息即可实现。

 
缺点:
1、当 master 节点宕机时,由于无法选择哪一个 slave 节点当 master 节点,无法保证高可用。
2、所有写数据的压力都集中在 master 节点,没有解决 master 节点写的压力。

 
 

2、哨兵模式

  哨兵模式是基于主从模式的,哨兵(sentinel)模式是为了解决主从模式中的问题而提出来,既当 master 节点宕机时,由于无法选择哪一个 slave 节点当 master 节点,导致 Redis 无法保证高可用。
  哨兵模式在主从模式的基础上,增加哨兵对主从模式中的每个节点进行监控,当 master 节点出现故障时通知投票机制,选择新的 master 节点,并将所有的 slave 节点连接到新的 master 节点上,如图所示:

 

在这里插入图片描述

 

哨兵模式有三个作用:监控、通知和自动故障转移。

  • 监控:不断地检测 master 和 slave 是否运行正常。包括 master 存活检测、master 和 slave 运行状况的检测。
  • 通知:当被监控的某个节点出现问题时,Sentinel 可以通知 API 向管理员或者其他应用程序发送通知。
  • 自动故障转移:断开 master 与 slave 之间的连接,选取一个 slave 作为一个新的 master ,将其他的 slave 连接到新的 master 中,并告知客户端新的节点地址。

 
哨兵模式的优点
优点:哨兵模式,可以保证 Redis 的高可用,监控各个节点的运行状态,通知客户端节点出现问题,并进行自动故障转移。
 

哨兵模式的缺点
缺点:
1、基于主从模式,数据写的操作都集中在 master 上,仍然没有解决 master 写数据的压力。
2、在切换主节点的时候,会发生数据的丢失。
3、集群里面每个节点都存储相同的内容,很浪费内存空间,没有真正实现分布式存储。

 
 

3、集群模式

  哨兵模式基本已经实现了高可用,但是每个节点都存储相同的内容,很浪费内存。而且,哨兵模式没有解决master写数据的压力。为了解决这些问题,就有了集群模式,实现分布式存储,每个节点存储不同的内容。集群部署的方式能自动将数据进行分片,每个master上放一部分数据,提供了内置的高可用服务,即使某个master宕机了,服务还可以正常地提供,架构如下图所示:
 
在这里插入图片描述
 
集群模式中数据通过数据分片的方式被自动分割到不同的master节点上,每个Redis集群有16384个哈希槽,进行set操作时,每个key会通过CRC16校验后再对16384取模来决定放置在哪个槽。数据在集群模式中是分开存储的,那么节点之间想要知道其他节点的状态信息,包括当前集群状态、集群中各节点负责的哈希槽、集群中各节点的master-slave状态、集群中各节点的存活状态等是通过建立TCP连接,使用gossip协议来进行集群信息传播。

 

​ 故障判断方法:判断故障的逻辑其实与哨兵模式有点类似,在集群中,每个节点都会定期的向其他节点发送ping命令,通过有没有收到回复来判断其他节点是否已经下线。具体方法是采用半数选举机制,当A节点发现目标节点疑似下线,就会向集群中的其他节点散播消息,其他节点就会向目标节点发送命令,判断目标节点是否下线。如果集群中半数以上的节点都认为目标节点下线,就会对目标节点标记为下线,从而告诉其他节点,让目标节点在整个集群中都下线。

 

集群模式的优点
1、拓展性强,可扩展 master 节点,释放单个 master 节点写数据的压力,节点可动态添加或者删除。
2、能够实现自动故障转移,节点之间通过 gossip 协议交换状态信息,用投票机制完成 slave 到 master 的角色转换。
3、无中心结构,所有的Redis节点通过(PING-PONG机制)彼此互联。
 
 

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

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

相关文章

Vagrant 安装 Centos7

首先准备VirtualBox, 当前实验版本为:7.0.4-154605-Win; 再次下载Vagrant windows版本:当前实验版本:vagrant_2.3.4_windows_i686 如果安装VirtualBox过程中提示缺少:Microsoft Visual C 2019 Redistributable &…

MySQL索引概述

索引的英文名叫 index 在数据库是一种帮助MySQL高效获取数据的数据结构 而且是一种有序的数据结构 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级找…

公钥基础设施 时间戳规范测评

声明 本文是学习信息安全技术 公钥基础设施 标准符合性测评. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 公钥基础设施 时间戳规范测评 时间戳的产生和颁发 申请和颁发方式 测评依据见GB/T 20520—2006中6.1的内容。 开发者应提供文档…

2.0、Linux-基础了解

2.0、开机关机和基本目录介绍 开机登录: 开会机会启动许多程序;他们在Windows叫做 "服务" ,在 Linux 中叫做 "守护进程"(daemon); 开机成功后,他会显示一个文本登录…

Tailoring Self-Supervision for Supervised Learning-读后总结

Tailoring Self-Supervision for Supervised Learning摘要文章思路一些值得读的参考文献和技术:值得一读的高引文献可视化技术摘要 近期,在监督学习中部署一个合适的自监督学习来提高监督学习的性能是一个具有前景的方式。然而,因为之前的前…

MP中定义全局常量用于xml的判断,List<String> list = new ArrayList<>(Arrays.asList(“test“));

,1.普通方式 mybatis-plus.configuration.variables.secretFilterSwitch0 yml的方式 mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.demo configuration: variables: userId: 456132465 userName: 李四 配置完成后在代…

人文社科类文献去哪些数据库检索下载

查找下载人文社科类文献的数据库大盘点: 1、文献党下载器(wxdown.org) 大型文献馆,几乎整合汇集了所有中外文献数据库资源,可附带权限进入文献数据库查找下载文献,覆盖全科包括查找下载人文社科类文献的众…

【C和数据结构-5+1】习题第一天

文章目录一.选择题1.整型在内存中的存储2.大小端字节序3.指针的大小4.形参一级指针或二级指针的区别5.二维数组传参降维成数组指针二.编程题1.自守数2.质数判断一.选择题 1.整型在内存中的存储 猜一猜打印的结果? int main() {char a 101;int sum 200;a 27; sum a;printf…

2023年,无所谓,我会出手整合SSM

目录 一、简介: 二、Maven构建框架: 三、依赖配置 四、web.xml配置文件 五、创建SpringMVC的配置文件 六、Spring.xml配置环境 七、其他配置 八、Mapper.xml配置文件: 九、mybatis-config.xml配置文件: 十、log4j.xml日志…

Dropout详解:Dropout解决过拟合问题

Dropout 是一种能够有效缓解过拟合的正则化技术,被广泛应用于深度神经网络当中。但是被 dropout 所丢掉的位置都有助于缓解过拟合的吗? 中山大学 和 Meta AI 在 NeurIPS 2022 接收的论文在研究了注意力中的 dropout 后发现:不同注意力位置对过…

C++string类介绍

目录 一、介绍 二、string类对象的构造 string类有如下构造方法: 类对象的容量操作 类对象访问及遍历 string对象的修改操作: std::string::insert std::string::erase std::string::c_str std::string::find std::string::substr 一、介绍…

Linux学习笔记 超详细 0基础学习(上)

定义 linux是一个操作系统,与Windows、macos一样,是常见的操作系统之一,一般服务器会部署在Linux操作系统中,稳定应用广泛,Android系统是基于Linux内核的,所以了解Linux相关知识对于程序员来说是很重要的。…

人脸AI识别实战:用AI生成了这些人一生的样貌变化 | 附源码

这是来自斯坦福和华盛顿大学研究员发表的论文,提出了基于GAN的新方法,仅需要一张照片即可生成一个人从小时候到老了的样子。 论文:https://arxiv.org/abs/2003.09764 项目地址: https://github.com/royorel/Lifespan_Age_Trans…

windows上安装并使用exiftool修改图像exif信息

使用exiftool可以对图像的exif信息进行读取、修改、写入等操作。在linux系统上可以直接通过命令行安装,非常方便。但是在windows上,一开始我看了这篇博客,感觉里面写的还挺详细的,就跟着做了一下。里面是说要先安装perl&#xff0…

特斯拉突飞猛进背后带给自己的深思

引言 2013年开始接触汽车行业,那时候所做的事情也是跟着导师去解析整车CAN信号(Message),也是从那时才知道车身现场总线——CAN总线。在那时候汽车给自己的感觉还是整车成本所占比重是机械高,软件比重低的可怜&#x…

【目标检测】语义分割之FCN算法学习

目录:FCN一、CNN与FCN的比较二、FCN上采样理论讲解2.1 双线性插值上采样2.2 反卷积上采样2.3 反池化上采样三、FCN的过程四、跳级结构一、CNN与FCN的比较 CNN:在传统的CNN网络中,在最后的卷积层之后会连接上若干个全连接层,将卷积…

字符串去重整理 哈希映射解题

目录 给你一个字符串数组,删除他们之间相同的元素,(保留一个重复值) 【方法一】使用迭代器进行区间删除 【方法二】原地删除 【方法三】使用计数跳过 1002. 查找共用字符 【解法一】我的第一个理解题意出错的解法 【解法二】初…

稀疏矩阵向量乘法的openmp并行优化

稀疏矩阵向量乘法 添加链接描述本人在这篇博客已经介绍过稀疏矩阵向量乘法以及相关的一些存储方式,这里重点开始介绍openmp的并行优化。 下面这个图片就是采用CSR格式读取稀疏矩阵向量乘法的主体架构,全称为Compressed Sparse Row Matrix压缩稀疏矩阵行格式,该格式对矩阵进…

MyBatis【MyBatis的增删改查操作与单元测试】

MyBatis【MyBatis的增删改查操作与单元测试】🍎一.单元测试🍒1.1 什么是单元测试?🍒1.2 单元测试好处🍒1.3 Spring Boot 框架 单元测试使用🍒1.4 单元测试实现🍒1.5 断言🍎二.MyBati…

性能测试-微服务性能压测监控和调优【重点】【杭州多测师_王sir】【杭州多测师】...

本文主要内容一、何为压力测试1.1、 大白话解释性能压测是什么:就是考察当前 软件和硬件环境下,系统所能承受的最大负荷,并帮助找出系统的瓶颈所在。性能压测的目的:为了系统在线上的 处理能力和稳定性维持在一个标准范围内&#…