redis的四种模式优缺点

news2024/12/24 9:36:20

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.coloradmin.cn/o/797276.html

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

相关文章

JavaSwing+MySQL的医药销售管理系统

点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/88108217?spm1001.2014.3001.5503 JDK1.8 MySQL5.7 功能:用户管理,药品库存管理,进销管理,营销管理

产品解读|有了JMeter,为什么还需要MeterSphere?

提起JMeter,相信大部分的测试人员应该都很熟悉。JMeter因其小巧轻量、开源,加上支持多种协议的接口和性能测试,在测试领域拥有广泛的用户群体。一方面,测试人员会将其安装在个人的PC上,用以满足日常测试工作的需要&…

【Claude2体验】继ChatGPT,文心一言,Bing等大模型后,初次对话Claude2的体验

文章目录 🌺注意事项🤖什么是Claude2⭐与之前版本的进步🛸官网的讲解🍔功能介绍🎄使用体验🎆查看不知道如何才能打开的文档 的内容🎆日常需求✨Claude✨ChatGPT3.5 🤖总结 &#x1f…

CC1310F128系列 超低功耗低于1GHz射频 微控制器芯片

CC1310F128 是一款经济高效型超低功耗低于1GHz射频器件,凭借极低的有源射频和MCU电流消耗以及灵活的低功耗模式,CC1310F128可确保卓越的电池寿命,并能够在小型纽扣电池供电的情况下以及在能量采集应用中实现远距离工作。 改芯片有三个后缀&am…

redis-cluster 创建及监控

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

小程序商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

libhv之hloop_process_ios源码分析

上一篇文章对hloop源码大概逻辑和思想进行了一个简单的分析&#xff0c;其中主要涉及三类&#xff08;timer>io>idles&#xff09;事件处理。下面将对hloop_process_ios事件做一下简单的分析。 int hloop_process_ios(hloop_t* loop, int timeout) {// That is to call …

vr禁毒毒驾模拟体验从源头拒绝毒品,预防毒品

俗话说&#xff0c;一念天堂&#xff0c;一念地狱。吸毒一口&#xff0c;掉入虎口。吸毒对人体的危害非常大&#xff0c;普通人吸毒会导致家破人亡&#xff0c;明星吸毒会毁掉自己的大好星途。没有感同身受&#xff0c;何来悲喜相通&#xff0c;毒品危害认知VR模拟情景体验是VR…

助力工业物联网,工业大数据之油站事实指标需求分析【十九】

文章目录 01&#xff1a;油站事实指标需求分析02&#xff1a;油站事实指标构建 01&#xff1a;油站事实指标需求分析 目标&#xff1a;掌握DWB层油站事实指标表的需求分析 路径 step1&#xff1a;目标需求step2&#xff1a;数据来源 实施 目标需求&#xff1a;基于油站信息及…

Blend for Visual Sdudio创建C++工程

&#xff08;1&#xff09;打开Blend for Visual Sdudio &#xff08;2&#xff09;点击“创建新项目” &#xff08;3&#xff09;在最右侧下拉到最底部&#xff0c;点击“安装多个工具和功能” &#xff08;4&#xff09;在最底部点击“关闭” &#xff08;5&#xff09;点击…

【电压和电压稳定指数研究】带多台配电发电机 (DG) 的径向配电系统研究【IEEE33节点】(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 电压和电压稳定指数研究是关于电力系统中电压水平和其稳定性的研究。电力系统中的电压是指电网中的电压水平&#xff0c;通常以相电压&#xf…

树莓派本地快速搭建web服务器,并发布公网访问

文章目录 树莓派本地快速搭建web服务器&#xff0c;并发布公网访问 树莓派本地快速搭建web服务器&#xff0c;并发布公网访问 随着科技的发展&#xff0c;电子工业也在不断进步&#xff0c;我们身边的电子设备也在朝着小型化和多功能化演进&#xff0c;以往体积庞大的电脑也在…

vue3 - 报错 Cannot use ‘in‘ operator to search for ‘path‘ in undefined (完美解决)

问题描述 在vue3项目中,浏览器控制台报错 Cannot use ‘in’ operator to search for ‘path’ in undefined 详细解决方案。 解决方案 在创建vue3的路由时,报了这样的错:Cannot use ‘in’ operator to search for ‘path’ in undefined,

flutter开发实战-父子Widget组件调用方法

flutter开发实战-父子Widget组件调用方法 在最近开发中遇到了需要父组件调用子组件方法&#xff0c;子组件调用父组件的方法。这里记录一下方案。 一、使用GlobalKey 父组件使用globalKey.currentState调用子组件具体方法&#xff0c;子组件通过方法回调callback方法调用父组…

U盘里的资料丢失怎么恢复,分享两种有效解决方法

平常我们在用u盘拉文件的时候&#xff0c;有时候会突然发现&#xff0c;本来好好的文件就无缘无故丢失了&#xff0c;这是因为什么情况呢&#xff1f;一般来说&#xff0c;出现这种问题&#xff0c;可能是因为u盘文件被格式化&#xff0c;或者u盘存储损坏了。但是呢&#xff0c…

一键式三分钟轻松打造线上展厅

导语&#xff1a; 在数字时代&#xff0c;线上展厅已成为企业展示品牌和产品的重要方式。随着虚拟现实&#xff08;VR&#xff09;技术的发展&#xff0c;蛙色VR平台成为众多企业选择的首选&#xff0c;因其独特的优势和特点&#xff0c;让线上展厅的打造变得轻松、高效且令人…

使用C#基于ComPDFKit SDK快速构建PDF阅读器

在当今世界&#xff0c;Windows 应用程序对我们的工作至关重要。随着处理 PDF 文档的需求不断增加&#xff0c;将 ComPDFKit PDF 查看和编辑功能集成到您的 Windows 应用程序或系统中&#xff0c;可以极大地为您的用户带来美妙的体验。 在本博客中&#xff0c;我们将首先探索集…

JGIT获取远程仓库、本地仓库提交版本号

https://www.freesion.com/article/50181381474/ JGIT获取远程仓库、本地仓库提交版本号 一、环境搭建二、项目结构二、代码部分 GitUtils.javaGitInfoAtom.java三、运行结果&#xff1a;总结 一、环境搭建 Maven依赖导入 <dependency><groupId>org.eclipse.jg…

进入linux系统中修改网段-ip

第一步 &#xff1a;开启虚拟机 cd 到 /etc/sysconfig/network-scripts 目录下&#xff0c;输入命令给ls,展示这个目录下文件和文件夹 第二步&#xff1a;进入到以ifcfg开头的文件 # ifcfg开头的文件&#xff0c;如果有多个网卡&#xff0c;有多个ifcfg-ensxx文件 命令…

【从零开始学爬虫】采集全国各行业经销商网点数据

l 采集网站 【场景描述】采集全国各行业经销商网点数据&#xff0c;以建材行业为例。 【源网站介绍】买购网MAIGOO.COM建材家居频道&#xff0c;专门提供地面材料、墙顶饰材、洁具五金、门窗楼梯、水电电工、外墙材料、照明灯饰、家纺布艺、家具定制等行业&#xff0c;最新品…