redis的四种模式优缺点

redis简介

Redis是一个完全开源的内存数据结构存储工具,它支持多种数据结构,以及多种功能。Redis还提供了持久化功能,可以将数据存储到磁盘上,以便在重启后恢复数据。由于其高性能、可靠性和灵活性,Redis被广泛应用于缓存、会话管理、排行榜、实时分析、消息队列等领域。

应用场景

  • 缓存
  • 数据共享
  • 分布式锁
  • 计数器
  • 限流
  • 时间轴
  • 消息队列
  • 注册中心
  • 排行榜
  • 标签
  • 。。。。。

redis的四大模式

  1. 单机模式
  2. 主从模式
  3. 哨兵模式
  4. 集群模式

单机模式

    单机模式就是只在一台服务器上搭建单台redis服务,所有业务都通过该服务处理缓存等业务

读写不分离。

    优点:

  • 部署非常简单,单台服务器安装配置启动即可,好维护
  • 性能高,数据处理速度快,不需要同步数据
  • 成本相对非常低,不管是维护成本和服务器成本都是单项,没有其它开支

   缺点:

  • 单台服务器受限cpu的处理能力
  • 海量数据存储问题
  • Redis不具备自动容错和恢复功能,不保证数据的可靠性

 主从模式

      主从模式是指有多台redis服务器,其中一台为主服务,其它都为从服务,主服务只负责写入数据以及向从服务器发送同步最新的数据,从服务只负责复制主服务的数据与来自客户端读取数据

优点:

  • 读写分离,主写从读,可以根据访问量多少来定制从节点数量
  • 数据冗余,主从复制实现了对数据的热备份
  • 可用性,多节点提供服务时,其中一台宕机后,其它服务仍旧可以提供服务
  • 故障恢复,可以快速提升从服务为主服务
  • 负载均衡,多节点分摊数据访问压力

   缺点:

  •   主服务宕机后,从服务需要升级为主服务,需要手动切换,部分数据不能及时同步从服务,造成数据不一致
  • 从服务宕机恢复后,大量的同步给主服务造成一定的IO压力
  • 主从服务只有一个主服务,写数据的能力会收到单机的限制
  • 海量数据存储限制

 主从复制原理

全量复制

  1. 从服务连接到主服务,便开始进行数据同步,从节点发送psync命令给到主节点(psync包含两个参数runID主库的id以及offset进度位置)
    1.runID为实例启动自动生成的随机标识,当从服务第一次连接主服务是不知道
    主服务的runID的实际值,从而把runID设置为"?"对主服务进行询问,得到主服
    务给的回答后,后续便会把runID设置成主服务的实际值2.offset表示为同步进度的标识,第一次从服务连接主服务时,该标识为表示以
    前从未有复制过主服务的数据,把该值设置为-1,主从都各自维护自己的主从复
    制偏移量offset,当主节点有写入命令时,offset=offset+命令的字节长度。
    从节点在收到主节点发送的命令后,也会增加自己的offset,并把自己的offset
    发送给主节点。这样,主节点同时保存自己的master_repl_offset,从节点的
    slave_repl_offset,通过对比offset来判断主从节点数据是否一致
    
  2. 主服务收到psync命令之后,判断是否为第一次复制是的话返回FULLRESYNC {runId} {offset},如果回复 +CONTINUE,触发部分复制。   
  3. 从服务收到主服务给过来的信息后,将信息保存到info中
  4. 主服务发送FULLRESYNC后,执行 bgsave命令,生成RDB快照并将其发给从库,在从服务加载数据期间主服务写命令放入缓冲区replication buffer
  5. 从服务清理自己的数据,完成后开始加载RDB文件,将数据提取到自己的内存中
  6. 待从节点加载完成后,会将replication buffer中产生的该写操作发送给从服务
  7. 主从之间维护一个长连接,后续涉及到改/写的动作,主服务会比较offset给从服务发送增量数据给从服务同步

增量/部分复制

  1. 当从节点出现不可以预知的中断时,主服务会把收到的改/写等操作命令写入环形缓冲区主服务会记录自己所在的偏移位置,从服务也会有自己已经读到的进度偏移位置
  2. 从服务器恢复连接后,从服务会重新发送自己的psync,这时候offset是自己的偏移位置,给主服务比较,如果刚好存在缓冲区内,主服务会将增量数据发送给从服务
  3. 如果不存在,则需要进行再一次全量更新

哨兵模式

优点:

  • 读写分离,主写从读,可以根据访问量多少来定制从节点数量
  • 数据冗余,主从复制实现了对数据的热备份
  • 可用性,多节点提供服务时,其中一台宕机后,其它服务仍旧可以提供服务
  • 故障恢复,当主服务宕机时通过自定选举提升从服务为主服务,弥补了主从模式下的手动操作
  • 负载均衡,多节点分摊数据访问压力

缺点:

  • 从服务宕机恢复后,大量的同步给主服务造成一定的IO压力
  • 主从服务只有一个主服务,写数据的能力会收到单机的限制
  • 海量数据存储限制

主要功能

  • 建立集群监控,负责监控主从服务是否正常工作
  • 如果某个服务宕机,哨兵间传递消息
  • 自动故障转移,当主服务宕机后,会重新在从服务之间选举出新主

主服务看成执政的皇帝,从服务堪称国家的储君,当主服务还在执政期间,从服务都要好好配合皇帝工作,而哨兵就像是太医院,时刻关注着皇帝与皇子的身体健康,当检查到从服务不健康时,就直接把它除名告知天下,当检查到主服务不健康宕机了之后,当即会告知天下,然后在剩下的皇子中选举出新皇,然后安排新皇登基,其它皇子重新辅助新皇,而旧皇医治好后(重新上线),也只能承认失去皇权,也只能退居二线,重新辅佐新皇但是重新享有皇位继承权

 集群模式

不管上面的主从还是哨兵模式,都无法解决单节点写操作的问题。如果这时写操作的并发比较高。这是可以实验集群化模式【去中心化模式】

优点

  • 无中心架构,支持动态扩容
  • Cluster自动具备哨兵监控和故障转移(主从切换)能力
  • 客户端连接集群内部地址可自动发现
  • 高性能、高可用,有效解决了Redis分布式需求

缺点

  •  不支持原子操作:在Redis集群中,不同节点之间的数据访问会出现延迟,因此不支持原子操作,可能会导致数据的不一致性。

  • 需要配置复杂:Redis集群需要配置投票数、数据分片等参数,增加了配置的复杂度。

  • 高成本:Redis集群需要多台服务器运行,因此需要更多的硬件成本和维护成本。

只有主节点故障才需要故障转移。cluster集群模式不需要哨兵,自身已具备了故障转移功能。

节点通信:

Redis 集群中的节点通过 Gossip 协议进行通信。节点之间定期交换有关其自身状态和已知其他节点的信息,以便检测故障并作出相应调整。

故障检测:

每个节点向集群中其它节点每隔一定时间发送ping消息,如果该节点没在规定时间内返回pong消息,就会认为下线

故障转移步骤:

   1. 集群中的其他节点会检测到主节点已下线。
   2. 资格检查 每个从节点都要检查最后与主节点断线时间,判断是否有资格替换故障的主节点
   3. 准备选举时间 从节点符合故障转移资格后,更新触发故障选举时间,只有到达该时间才能执行后续流程。采用延迟触发机制,主要是对多个从节点使用不同的延迟选举时间来支持优先级。复制偏移量越大说明从节点延迟越低,那么它应该具有更高的优先级。
   4. 选举投票 只有持有槽的主节点才会处理故障选举消息,每个持有槽的节点在一个配置纪元内都有唯一的一张选票,当接到第一个请求投票的从节点消息,回复消息作为投票,之后相同配置纪元内其它从节点的选举消息将忽略。投票过程其实是一个领导者选举的过程。
   5. 替换主节点 当前从节点取消复制变为主节点,撤销故障主节点负责的槽,把这些槽委派给自己,并向集群广播告知所有节点当前从节点变为主节点。
 

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

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

相关文章

什么是 MyBatis?

经过前几篇博客的学习 Spring 系列的基本操作已经实现的差不多了,接下来,我们来学习更重要的知识,将前端传递的数据存储起来,或者查询数据库里面的数据。 一、MyBatis 是什么? MyBatis 是一款优秀的持久层框架&…

东南大学轴承故障诊断(Python代码,CNN模型,适合复合故障诊断研究)

运行代码要求: 代码运行环境要求:Keras版本>2.4.0,python版本>3.6.0 本次实验主要是在两种不同工况数据下,进行带有复合故障的诊断实验,没有复合故障的诊断实验。 实验结果证明,针对具有复合故障的…

面试—Redis相关

文章目录 一、概述二、缓存1、缓存穿透2、缓存击穿3、缓存雪崩4、双写一致性5、持久化6、数据过期策略7、数据淘汰策略 三、分布式锁四、其它面试题1、主从复制2、哨兵3、分片集群结构4、I/O多路复用 一、概述 使用场景: Redis的数据持久化策略有哪些什么是缓存穿透…

智能安全配电装置应用场景有哪些?

安科瑞 华楠 一、应用背景 电力作为一种清洁能源,给人们带来了舒适、便捷的电气化生活。与此同时,由于使用不当,维护不及时等原因引发的漏电触电和电气火灾事故,也给人们的生命和财产带来了巨大的威胁和损失。 为了防止低压配电…

SkyEye与Jenkins的DevOps持续集成解决方案

在技术飞速发展的当下,随着各行各业的软件逻辑复杂程度提升带来的需求变更,传统测试已无法满足与之相对应的一系列测试任务,有必要引入一个自动化、可持续集成构建的DevOps平台来解决此类问题。本文将主要介绍SkyEye与Jenkins的持续集成解决方…

C++OpenCV(5):图像模糊操作(四种滤波方法)

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 🔆 OpenCV项目地址及源代码:点击这里 文章目录 图像模糊操作均值滤波高斯滤波中值滤波双边滤波 图像模糊操作 关于图片的噪声:指的是图片中存在的不必要或者多余的干扰数…

windows下搭建php开发环境

http://wed.xjx100.cn/news/139397.html?actiononClick https://www.bilibili.com/read/cv23429835/ https://www.php.cn/faq/498307.html 安装iis 选择卸载程序 安装php 官网https://www.php.net/下载 选择线程安全 国内地址 下载完成后解压放到想存放的路径 添加p…

数据可视化 - 动态柱状图

基础柱状图 通过Bar构建基础柱状图 from pyecharts.charts import Bar from pyecharts.options import LabelOpts # 使用Bar构建基础柱状图 bar Bar() # 添加X轴 bar.add_xaxis(["中国", "美国", "英国"]) # 添加Y轴 # 设置数值标签在右侧 b…

深入浅出之Docker Compose详解

目录 1.Docker Compose概述 1.1 Docker Compose 定义 1.2 Docker Compose产生背景 1.3 Docker Compose 核心概念 1.4 Docker Compose 使用步骤 1.5 Docker Compose 常用命令 2. Docker Compose 实战 2.1 Docker Compose下载和卸载 2.2 Docker Compose 项目概述 2.3 Do…

北航投资已投企业四象科技成功发射三颗卫星

1箭4星!2023年7月23日10时50分,我国在太原卫星发射中心使用长征二号丁运载火箭,成功将四象科技“矿大南湖号”SAR遥感卫星、“虹口复兴号”光学遥感卫星、“中电农创号”热红外遥感卫星以及银河航天灵犀03星共4颗卫星发射升空,卫星…

idea springBoot 部署多个项目打开Run Dashboard 窗口

在部署springcloud 项目的时候 本地调试,有可能需要全部启动所有服务,单个部署比较麻烦,通过Run DashBoard 窗口可以完美实现 1.先打开项目的文件地址找到workspace.xml文件,在项目下的.idea\workspace.xml 2. ctrlf 找到RunDash…

SpringMVC-mybatis,SQL语句中误用了desc关键字,导致报错。

17-Jul-2023 21:26:22.295 淇℃伅 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath 17-Jul-2023 21:26:22.621 淇℃伅 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalin…

小白的机器学习之路(四)神经网络的初步认识:基于pytorch搭建自己的神经网络

小白的机器学习之路(四) 引子神经网络的基本结构反向传播算法和激活函数优化器如何通过pytorch搭建自己的BP network 引子 当前交通大数据业务的需要,需要承担一部分算法工作(数据处理),考虑到上次研究深度…

springboot开放实验室管理系统【纯干货分享,免费领源码03361】

摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是使用动态网页开发技术java作为系统的开发语言,M…

【Leetcode】二叉树进阶面试题

文章目录 二叉树创建字符串二叉树分层遍历(从前开始)二叉树分层遍历(从后开始)二叉树的最近公共祖先二叉搜索树与双向链表从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树二叉树的前序遍历(非递归&…

GitLab 删除项目

1.点击头像 2.点击Profile 3.选择要删除的项目点进去 4.settings-general-Advances-expand 5.然后在弹出框中输入你要删除的项目名称即可

Java - 注解开发

注解开发定义bean Component的衍生注解 Service: 服务层的注解 Repository: 数据层的注解 Controller: 控制层的注解 纯注解开发 bean管理 bean作用范围 在类上面添加Scope(“singleton”) // prototype: 非单例 bean生命周期 PostCon…

关于Spring的bean的相关注解以及其简单使用方法

一、前置工作 第一步&#xff1a;创建一个maven项目 第二步&#xff1a;在resource中创建一个名字叫做spring-config.xml的文件&#xff0c;并把以下代码复制粘贴 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.sprin…

redis-cluster 创建及监控

集群命令 cluster info&#xff1a;打印集群的信息。 cluster nodes&#xff1a;列出集群当前已知的所有节点&#xff08;node&#xff09;的相关信息。 cluster meet <ip> <port>&#xff1a;将ip和port所指定的节点添加到集群当中。 cluster addslots <slot…

《Federated Unlearning via Active Forgetting》论文精读

文章目录 1、概述2、方法实验主要贡献框架概述 3、实验结果比较方法实验结果忘却完整性忘却效率模型实用性 4、总结 原文链接&#xff1a; Federated Unlearning via Active Forgetting 1、概述 对机器学习模型隐私的⽇益关注催化了对机器学习的探索&#xff0c;即消除训练数…