那一天,被Redis主从架构支配的恐惧

Docker基础教程(207)Docker Redis数据库镜像的使用:深度解锁Docker Redis:从入门到高手,让数据库管理变得酷炫! 本文深度剖析Docker Redis镜像的使用与构建,通过完整示例展示如何快速部署、配置优化及故障排除。涵盖单机到主从架构实践,帮助开发者提升数据库管理效率,解决传统安装繁琐问题,实现开发环境标准化。内容兼具实用性与技术深度,为现代应用提供可靠缓存解决方案。 阅读详情

面试官:要不你来讲讲你最近在看的点呗?可以拉出来一起讨论下(今天我也不知道要问什么)

候选者:最近在看「Redis」相关的内容

面试官:嗯,我记得已经问过Redis的基础和持久化了

面试官:要不你来讲讲你公司的Redis是什么架构的咯?

候选者:我前公司的Redis架构是「分片集群」,使用的是「Proxy」层来对Key进行分流到不同的Redis服务器上

候选者:支持动态扩容、故障恢复等等…

面试官:那你来聊下Proxy层的架构和基本实现原理?

候选者:抱歉,这块由中间件团队负责,具体我也没仔细看过

候选者:…

面试官:….

候选者:不过,我可以给你讲讲现有常见开源的Redis架构(:

面试官:那只能这样了,好吧,你开始吧

候选者:那我从基础讲起吧?

候选者:在之前提到了Redis有持久化机制,即便Redis重启了,可以依靠RDB或者AOF文件对数据进行重新加载

候选者:但在这时,只有一台Redis服务器存储着所有的数据,此时如果Redis服务器「暂时」没办法修复了,那依赖Redis的服务就没了

候选者:所以,为了Redis「高可用」,现在基本都会给Redis做「备份」:多启一台Redis服务器,形成「主从架构」

候选者:「从服务器」的数据由「主服务器」复制过去,主从服务器的数据是一致的

候选者:如果主服务器挂了,那可以「手动」把「从服务器」升级为「主服务器」,缩短不可用时间

面试官:那「主服务器」是如何把自身的数据「复制」给「从服务器」的呢?

候选者:「复制」也叫「同步」,在Redis使用的是「PSYNC」命令进行同步,该命令有两种模型:完全重同步和部分重同步

候选者:可以简单理解为:如果是第一次「同步」,从服务器没有复制过任何的主服务器,或者从服务器要复制的主服务器跟上次复制的主服务器不一样,那就会采用「完全重同步」模式进行复制

候选者:如果只是由于网络中断,只是「短时间」断连,那就会采用「部分重同步」模式进行复制

候选者:(假如主从服务器的数据差距实在是过大了,还是会采用「完全重同步」模式进行复制)

面试官:那「同步」的原理过程可以稍微讲下嘛?

候选者:嗯,没问题的

候选者:主服务器要复制数据到从服务器,首先是建立Socket「连接」,这个过程会干一些信息校验啊、身份校验啊等事情

候选者:然后从服务器就会发「PSYNC」命令给主服务器,要求同步(这时会带「服务器ID」RUNID和「复制进度」offset参数,如果从服务器是新的,那就没有)

候选者:主服务器发现这是一个新的从服务器(因为参数没带上来),就会采用「完全重同步」模式,并把「服务器ID」(runId)和「复制进度」(offset)发给从服务器,从服务器就会记下这些信息。

面试官:嗯…

候选者:随后,主服务器会在后台生成RDB文件,通过前面建立好的连接发给从服务器

候选者:从服务器收到RDB文件后,首先把自己的数据清空,然后对RDB文件进行加载恢复

候选者:这个过程中,主服务器也没闲着(继续接收着客户端的请求)

面试官:嗯…

候选者:主服务器把生成RDB文件「之后修改的命令」会用「buffer」记录下来,等到从服务器加载完RDB之后,主服务器会把「buffer」记录下的命令都发给从服务器

候选者:这样一来,主从服务器就达到了数据一致性了(复制过程是异步的,所以数据是『最终一致性』)

面试官:嗯…

面试官:那「部分重同步」的过程呢?

候选者:嗯,其实就是靠「offset」来进行部分重同步。每次主服务器传播命令的时候,都会把「offset」给到从服务器

候选者:主服务器和从服务器都会将「offset」保存起来(如果两边的offset存在差异,那么说明主从服务器数据未完全同步)

候选者:从服务器断连之后,就会发「PSYNC」命令给主服务器,同样也会带着RUNID和offset(重连之后,这些信息还是存在的)

面试官:嗯…

候选者:主服务器收到命令之后,看RUNID是否能对得上,对得上,说明这可能以前就复制过一部分了

候选者:接着检查该「offset」是否在主服务器记录的offset还存在

候选者:(这里解释下,因为主服务器记录offset使用的是一个环形buffer,如果该buffer满了,会覆盖以前的记录)

候选者:如果找到了,那就把从缺失的一部分offer开始,把对应的修改命令发给从服务器

候选者:如果从环形buffer没找到,那只能使用「完全重同步」模式再次进行主从复制了

面试官:主从复制这块我了解了,那你说到现在,Redis主库如果挂了,你还是得「手动」将从库升级为主库啊

面试官:你知道有什么办法能做到「自动」进行故障恢复吗?

候选者:必须的啊,接下来就到了「哨兵」登场了

面试官:开始你的表演吧。

候选者:「哨兵」干的事情主要就是:监控(监控主服务器的状态)、选主(主服务器挂了,在从服务器选出一个作为主服务器)、通知(故障发送消息给管理员)和配置(作为配置中心,提供当前主服务器的信息)

候选者:可以把「哨兵」当做是运行在「特殊」模式下的Redis服务器,为了「高可用」,哨兵也是集群架构的。

候选者:首先它需要跟Redis主从服务器创建对应的连接(获取它们的信息)

候选者:每个哨兵不断地用ping命令看主服务器有没有下线,如果主服务器在「配置时间」内没有正常响应,那当前哨兵就「主观」认为该主服务器下线了

候选者:其他「哨兵」同样也会ping该主服务器,如果「足够多」(还是看配置)的哨兵认为该主服务器已经下线,那就认为「客观下线」,这时就要对主服务器执行故障转移操作。

面试官:嗯…

候选者:「哨兵」之间会选出一个「领头」,选出领头的规则也比较多,总的来说就是先到先得(哪个快,就选哪个)

候选者:由「领头哨兵」对已下线的主服务器进行故障转移

面试官:嗯…

候选者:首先要在「从服务器」上挑选出一个,来作为主服务器

候选者:(这里也挑选讲究,比如:从库的配置优先级、要判断哪个从服务器的复制offset最大、RunID大小、跟master断开连接的时长…)

候选者:然后,以前的从服务器都需要跟新的主服务器进行「主从复制」

候选者:已经下线的主服务器,再次重连的时候,需要让他成为新的主服务器的从服务器

面试官:嗯…我想问问,Redis在主从复制的和故障转移的过程中会导致数据丢失吗

候选者:显然是会的,从上面的「主从复制」流程来看,这个过程是异步的(在复制的过程中:主服务器会一直接收请求,然后把修改命令发给从服务器)

候选者:假如主服务器的命令还没发完给从服务器,自己就挂掉了。这时候想要让从服务器顶上主服务器,但从服务器的数据是不全的(:

候选者:还有另一种情况就是:有可能哨兵认为主服务器挂了,但真实是主服务器并没有挂( 网络抖动),而哨兵已经选举了一台从服务器当做是主服务器了,此时「客户端」还没反应过来,还继续写向旧主服务器写数据

候选者:等到旧主服务器重连的时候,已经被纳入到新主服务器的从服务器了…所以,那段时间里,客户端写进旧主服务器的数据就丢了

候选者:上面这两种情况(主从复制延迟&&脑裂),都可以通过配置来「尽可能」避免数据的丢失

候选者:(达到一定的阈值,直接禁止主服务器接收写请求,企图减少数据丢失的风险)

面试官:要不再来聊聊Redis分片集群?

候选者:嗯…分片集群说白了就是往每个Redis服务器存储一部分数据,所有的Redis服务器数据加起来,才组成完整的数据(分布式)

候选者:要想组成分片集群,那就需要对不同的key进行「路由」(分片)

候选者:现在一般的路由方案有两种:「客户端路由」(SDK)和「服务端路由」(Proxy)

候选者:客户端路由的代表(Redis Cluster),服务端路由的代表(Codis)

面试官:要不来详细讲讲它们的区别呗?

候选者:今天有点儿困了,要不下次呗?

本文总结:

  • Redis实现高可用:

    • AOF/RDB持久化机制
    • 主从架构(主服务器挂了,手动由从服务器顶上)
    • 引入哨兵机制自动故障转义
  • 主从复制原理:

    • PSYNC命令两种模式:完全重同步、部分重同步
    • 完全重同步:主从服务器建立连接、主服务器生成RDB文件发给从服务器、主服务器不阻塞(相关修改命令记录至buffer)、将修改命令发给从服务器
    • 部分重同步:从服务器断线重连,发送RunId和offset给主服务器,主服务器判断offset和runId,将还未同步给从服务器的offset相关指令进行发送
  • 哨兵机制:

    • 哨兵可以理解为特殊的Redis服务器,一般会组成哨兵集群
    • 哨兵主要工作是监控、告警、配置以及选主
    • 当主服务器发生故障时,会「选出」一台从服务器来顶上「客观下线」的服务器,由「领头哨兵」进行切换
  • 数据丢失:

    • Redis的主从复制和故障转移阶段都有可能发生数据丢失问题(通过配置尽可能避免)

【对线面试官+从零编写Java项目】 持续高强度更新中!求star

原创不易!!求三连!!

基于OpenClaw框架构建公众号内容自动化运营系统 在当今内容创作领域,自动化与智能化技术正深刻改变着传统工作流。其核心原理在于通过智能体(Agent)框架,将感知、决策、执行与反馈环节串联,形成自动化闭环,从而将人力从重复性劳动中解放出来,聚焦于高价值创意。这一技术价值在于显著提升运营效率与内容产出稳定性,尤其适用于需要高频更新与快速响应的场景。本文以公众号运营为例,详细阐述了如何利用OpenClaw这一开源AI智能体框架,结合大语言模型(LLM)与微信公众号API,设计并实现一个涵盖热点追踪、内容生成、定时发布的L3级“自动驾驶”系统。该系统通过模块化的 阅读详情

相关推荐

基于JSP+Servlet+MySQL的校园活动管理系统设计与实现

校园活动组织常面临报名信息分散、签到低效、数据统计困难等痛点,数字化管理系统的核心价值在于将非结构化信息转化为可持续利用的数据资产。基于Java Web经典技术栈JSP、Servlet与MySQL,通过MVC分层架构实现活动发布、在线报名、二维码签到、数据统计等核心功能。该系统注重并发控制与防作弊设计,兼顾跨浏览器兼容性,并详细讲解场地冲突检测、数据库连接池调优等工程实践,可直接作为毕业设计或课程设计参考。本文从需求分析到部署实践,系统阐述了一整套校园活动管理系统的构建过程,帮助开发者深入理解Web开发核心

weixin_33806914的博客 399

Redis集群之数据分布

加减节点会造成哈希环中部分数据无法命中,如之前n1-n2之间的4个数据,由于n5节点的加入,当应用读取n5-n2之间的数据时,Redis会先去n5获取,获取不到就只能去存储层去获取,然后回写到n2节点。节点取余分区使用hash(key)%nodes(使用特定的数据,如Redis的键作为key和节点数量nodes)来计算哈希值,以决定数据映射到哪一个节点上。当节点数量变化时,如扩容或收缩节点,数据节点映射关系需要重新计算,会导致数据的重新迁移,其示意图如下所示。节点伸缩:数据节点关系变化,导致数据迁移。

zzy7075的专栏 626

武汉理工大学 python实验三

请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾),如无解则输出`“Data Error!题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有。编写一个宝塔上的琉璃灯的小程序,计算并输出每层各有多少盏琉璃灯。,如果有多个解,则分行输出,每行一个解;

2401_83472225的博客 5949

MySQL主从搭建-Centos实战

MySQL主从搭建与配置

做人如果没有梦想,那跟咸鱼有什么区别--周星驰 1848

基于AI Agent的数据治理实战:从架构设计到企业级落地

数据治理是确保企业数据质量、一致性与安全性的核心实践,其核心原理在于通过规范、流程与技术工具对数据进行全生命周期管理。传统人工治理模式效率低下且难以规模化,而大语言模型(LLM)与智能体(Agent)技术的发展,为数据治理的自动化与智能化带来了突破。通过将自然语言理解、任务规划与工具调用能力相结合,AI Agent能够将治理规则“代码化”与“智能化”,实现从被动响应到主动发现的模式转变。在应用场景上,AI Agent可扮演智能数据专员角色,自动执行元数据问答、数据质量探查、口径对齐等任务,显著提升数据团队效

weixin_34008805的博客 418

英飞凌TC3xx实战:PWM中点触发ADC采集+DMA自动搬运完整配置流程(基于ILLD库)

本文详细介绍了在英飞凌TC3xx系列微控制器上使用ILLD库实现PWM中点触发ADC采集并通过DMA自动搬运数据的完整配置流程。该方案适用于电机控制、电源管理等需要高精度定时采集的场景,通过GTM生成PWM信号、ADC采集和DMA传输实现全硬件自动化流程,显著提升系统效率。

weixin_42536058的博客 530

配置服务器主从同步的步骤方法

有很多种配置主从同步的方法,可以总结为如下的步骤: 1.在主服务器上,必须开启二进制日志机制和配置一个独立的ID 2.在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号 3.在开始复制进程前,在主服务器上记录二进制文件的位置信息 4.如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件) 5.配置...

sudo_r的博客 2713

VirtualBox安装Win10虚拟机超详细教程(附微软官方镜像下载)

本文提供了一份详细的VirtualBox安装Win10虚拟机教程,涵盖从环境准备、工具下载到系统安装与初始配置的全过程。特别推荐使用微软官方镜像下载,确保系统纯净安全。此外,还分享了性能优化技巧和常见问题解决方案,帮助用户高效搭建稳定的Windows测试环境。

weixin_29243279的博客 917

主从复制架构介绍和主从复制配置案例

每一个数据库的业务都对应着一个前端的业务,主从复制架构的必要性?第一点是两个服务器如果有一台服务器出现故障,那么另一台服务器可以正常工作,以保障前端业务可以被正常访问,第二点是两个服务器可以共同去处理数据,提升处理数据的读写操作。无论是要避免单点故障还是说要提升数据库的数据读写效率。基本的要求是要保证所有数据库服务器上的数据要是一致的,要是相同的。这样就算挂掉任何一个服务器都不会影响我数据的正常读写操作。那么如何实现多台数据库服务器之间的数据同步和数据一致。专业上的名词就是主从复制.

ZHX2285的博客 1365

【ROS机器人系统】实验4 ROS简单应用:激光SLAM与导航

ROS简单应用:激光SLAM与导航 (1)了解机器人和SLAM之间关系 (2)了解激光SLAM (3)了解gmapping和导航

南京大学软件工程硕士在读 2146

Centos7 yum 报错「Errno 256」No more mirrors to try 解决方法

首先该问题的出现是由于网络的震荡导致,这是重点。(1)将源更换成阿里云的官方源,步骤参考如上(2)同时将zabbix的官方源更换成阿里云里面的zabbix镜像源,因为zabbix官方源根本网络不通,因为国家防火墙的拦截,导致网络不通。这是阿里源的zabbix镜像地址: https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/修改系统中早期生成的zabbix.repo文件,如下:主要是把baseurl替换成阿里云的zabbix镜像地址即可。

专注基础架构领域 3873

防超卖策略-Redis队列分流库存方案

本文介绍了如何使用Redis队列来实现一个队列分流库存方案。首先,我们定义了一个类来管理每个商品的库存数量。接着,我们定义了一个类来实现队列分流库存的具体逻辑。最后,我们编写了一个启动方法来调用方法,并在新线程中持续地处理请求。使用Redis队列分流库存方案能够高效地管理库存数量和状态,避免竞争条件,并且具有高吞吐量、低延迟等特点。

qq_41194023的博客 596

Unity引擎开发:复杂动作系统_动作捕捉数据的应用与整合

通过以上步骤,我们可以在Unity中有效地应用和整合动作捕捉数据,以实现更加真实和流畅的动画效果。从导入文件格式的选择,到预处理和优化,再到实时应用和调试验证,每一步都至关重要。希望本文能帮助你在Unity项目中更好地利用动作捕捉数据,提升动画质量和性能。

chenlz2007的博客 957

那一天,我被Redis主从架构支配的恐惧

面试官:要不你来讲讲你最近在看的点呗?可以拉出来一起讨论下(今天我也不知道要问什么)候选者:最近在看「Redis」相关的内容面试官:嗯,我记得已经问过Redis的基础和持久化了面试官:要不你来讲讲你公司的Redis是什么架构的咯?候选者:我前公司的Redis架构是「分片集群」,使用的是「Proxy」层来对Key进行分流到不同的Redis服务器上候选者:支持动态扩容、故障恢复等等…面试官:那你来聊下Proxy层的架构和基本实现原理?候选者:抱歉,这块由中间件团队负责,具体我也没仔细看过候选者:…面试官:….候

m0_67322837的博客 104

HTML蓝色动态爱心(完整代码)

HTML语言实现蓝色动态爱心的完整代码。

AIGC 8万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

hadoop大数据开发技术学习笔记第一天:数据库介绍与MySQL安装与卸载(超详细)

hadoop大数据开发技术学习笔记第一天:数据库介绍1.数据 1.数据

qq_44647983的博客 601

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

AI旅行规划系统Roamly:从需求解析到智能行程生成的技术实践

在人工智能与软件工程领域,大语言模型(LLM)与约束求解算法的结合,正推动复杂决策系统的发展。其核心原理在于利用LLM进行自然语言理解与语义解析,将非结构化需求转化为机器可处理的结构化数据,再通过定制化算法(如基于图论和运筹学的优化引擎)进行精确的数学计算与多目标规划,从而在多重约束下寻求最优解。这种混合架构的技术价值在于平衡了AI的创意生成能力与算法的确定性效能,特别适用于需要处理模糊需求与硬性规则并存的场景。在工程实践中,这种模式被应用于智能旅行规划等垂直领域,例如Roamly项目通过构建分层知识库(包

weixin_30372371的博客 579

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spring Cloud 版本等

微服务 在 jsp 时代,应用前后端耦合,前后端 all in 一台服务器,随着流量的增大,代码数量的增加,单体应用不再适合互联网的发展,微服务顺应提出。 微服务是一种用于构建应用的架构方案。区别于更为传统的单体式方案,将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。 Spring Cloud 版本 在微服...

人生最遗憾的莫过于:轻易地放弃了不该放弃的,固执地坚持了不该坚持的 438

springcloud eureka搭建双节点_Spring Cloud 理论篇

show me the code and talk to me,做的出来更要说的明白github同步收录我是布尔bl,你的支持是我分享的动力!微服务在 jsp 时代,应用前后端耦合,前后端 all in 一台服务器,随着流量的增大,代码数量的增加,单体应用不再适合互联网的发展,微服务顺应提出。微服务是一种用于构建应用的架构方案。区别于更为传统的单体式方案,将应用拆分成多个核心功能。每个功能都被称...

weixin_39632524的博客 377

Spring Cloud 理论篇

微服务 在 jsp 时代,应用前后端耦合,前后端 all in 一台服务器,随着流量的增大,代码数量的增加,单体应用不再适合互联网的发展,微服务顺应提出。 微服务是一种用于构建应用的架构方案。区别于更为传统的单体式方案,将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。 参考:https://www.redhat.com...

qq18938308968的博客 265

java cloud_Spring Cloud 理论篇

微服务在 jsp 时代,应用前后端耦合,前后端 all in 一台服务器,随着流量的增大,代码数量的增加,单体应用不再适合互联网的发展,微服务顺应提出。微服务是一种用于构建应用的架构方案。区别于更为传统的单体式方案,将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。Spring Cloud 版本在微服务大哥的带领下,各种架构...

weixin_32541333的博客 362

redis主从哨兵模式搭建实例

最近因项目需要搭建redis环境,有多种模式可以选择,其中比较经典的一种模式是主从哨兵模式,下面进行这一模式的搭建演示 一台虚拟机搭建一个redis主从哨兵模式简单集群:一主、一从、一哨兵 虚拟机版本 Red Hat 4.1.2-48 内存1G redis版本 redis-2.8.19.tar.gz(仅举例用,版本不规定) 1、上传redis安装包及规划目录 root...

lixinyao5281的专栏 1050

MySQL主从介绍,配置主服务器,配置从服务器,实现主从同步

MySQL主从配置17.1 MySQL主从介绍MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步。MySQL主从是基于binlog的,主上须开启binlog才能进行主从。主从过程主将更改操作记录到binlog中从将主的binlog事件(SQL语句)同步到本机并记录在relaylog中从根据relaylog...

weixin_39663255的博客 8845

【运维知识进阶篇】如何部署数据库主从同步?

主从复制是指将一个数据库服务器的数据通过网络连接到其他几个数据库服务器,然后在这些服务器上创建一个和主服务器数据完全相同的拷贝。当主服务器中的数据发生改变时,这些改变会异步地传播到其他从服务器上,从而实现主从服务器之间的数据同步。本篇文章给大家介绍如何实现数据库的主从同步。

吾日三省吾身,想出类拔萃,要把知识学牢,学全,学深,学广。 2275
上一篇: 在后端中如何实现幂等和去重?
下一篇: 阿里面试官:Redis分片集群都不懂?还来面试?
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值