《面试1v1》Redis主从架构

news2024/11/25 2:28:52

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪
🍅 技术交流:定期更新Java硬核干货,不定期送书活动
🍅 王哥多年工作总结:Java学习路线总结, 点击 突击面试
🍅 数十万人的面试选择: 面试说人话系列《面试1v1》

在这里插入图片描述

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。


《面试1v1》 连载中…


我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。

面试官: Redis主从架构是什么?它有什么用?

候选人: Redis 主从架构就是将一台 Redis 服务器设为主服务器,其他的 Redis 服务器设为从服务器。它的主要用途有:

  1. 高可用:当主服务器发生故障时,从服务器可以顶上继续提供服务,实现快速故障迁移。
  2. 负载均衡:主服务器处理写请求,从服务器处理读请求,分担服务器压力。
  3. 数据冗余:主服务器的数据可以在从服务器中备份,防止数据丢失。

面试官: Redis 主从复制的工作流程是怎样的?

候选人: Redis 主从复制的工作流程如下:

  1. 首次同步:从服务器连接主服务器,发送 sync 命令,主服务器执行 BGSAVE 生成 RDB 文件并发送给从服务器,从服务器载入 RDB 文件并获得数据集。同时主服务器也发送从服务器连接后产生的写命令给从服务器,使其状态与主服务器一致。
  2. 命令传播:主服务器继续接收写命令,并将写命令同步给从服务器。主从服务器保持数据一致。
  3. 断线重连:如果从服务器因网络故障与主服务器断开,会自动尝试重连。重连后再次执行同步操作,得到主服务器最新的数据。

主要的工作流程是:同步阶段+命令传播阶段,这两个阶段互相循环,实现主从复制和数据一致性的效果。

面试官: 主从复制的同步工作是如何实现的?能给出源码分析吗?

候选人: 主从复制的同步工作是在 replicaofCommand() 方法中实现的:

void replicaofCommand(client *c) {
    if (server.masterhost == NULL) { //如果是第一次同步
        server.master = createClient(NULL); //连接主机
        if (server.master == NULL) {
            addReplyError(c,"Can't connect to MASTER: Connection refused");
            return;
        }
        /* AUTH with the master if required. */
        if (server.masteruser && server.masterauth) {
            ...
        }
        /* Send SYNC and receive BGSAVE response. */
        server.replstate = REDIS_REPL_WAIT_BGSAVE_START; 
        serverLog(REDIS_NOTICE,"Waiting BGSAVE from master");
        if (syncWithMaster() != REDIS_OK) {  // 发送sync命令
            freeClient(server.master);        
            server.master = NULL;
        }
    } 
}

同步工作的流程如下:

  1. 从服务器连接主服务器,发送 sync 命令。
  2. 主服务器接收到 sync 命令,执行 BGSAVE,同时开始缓冲从服务器断开期间产生的写命令。
  3. BGSAVE 完成,主服务器将 RDB 文件发送给从服务器,同时也发送缓冲的写命令。
  4. 从服务器得到 RDB 文件后载入,执行写命令,数据同步完成。

这整个同步过程可以保证从服务器快速获取主服务器的数据,也为后续的命令传播阶段奠定基础,主从复制得以顺利进行。

面试官: 主从复制的同步实现,你解释得很详细,我现在全明白了!Redis 的主从架构以及同步原理,你都理解得非常透彻。

最近我在更新《面试1v1》系列文章,主要以场景化的方式,讲解我们在面试中遇到的问题,致力于让每一位工程师拿到自己心仪的offer,感兴趣可以关注JavaPub追更!


《面试1v1》 连载中…


🎁目录合集:

Gitee:https://gitee.com/rodert/JavaPub

GitHub:https://github.com/Rodert/JavaPub

http://javapub.net.cn

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

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

相关文章

crossover虚拟机软件好用吗?22.1.1版本有哪些优点

苹果系统虽然安全稳定,但有些应用程序并不提供苹果系统的安装包,使用双系统或在苹果电脑安装虚拟机可以帮我们提升设备使用效率,除了这两种解决方案外,还可以使用类虚拟机软件crossover,crossover mac的优点在于不会占…

使用HTTP/2实现服务端主动推送消息给客户端

77. 使用HTTP/2实现服务端主动推送消息给客户端 HTTP/2协议的服务器主动推送机制是通过服务器在接收到客户端请求后,主动向客户端推送相关资源的方式来实现的。下面将详细解释如何在服务器端和客户端实现HTTP/2的服务器主动推送,并给出相应的代码示例。…

华为OD机试真题(Java),素数伴侣(100%通过+复盘思路)

一、题目描述 若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的 N ( N 为偶数)个正整数中挑选出若干对组成“素数伴…

老鸟是这样实现springboot日志打印的~

文章目录 前言一、实现一个全局日志打印二、使用步骤1. 新增一个自定义注解2. 拦截注解,并实现相应的打印日志功能3. 使用 总结 前言 项目中有时候为了与前端,与后端(微服务/远程调用http) 等撕逼,我们不得不做好应对措施,最终的就是打印清晰我们的入参出参日志,这为以后撕逼,…

Nik Silver Efex 黑白胶片效果滤镜

Nik Silver Efex 为获得优质黑白效果而精心设计算法,是世界领先级的黑白胶片滤镜集。 内置 64 个黑白(包括单色、双色等)预设供选择,主要分为经典 Classic、现代 Modern、复古 Vintage、阿弗格 En Vogue等四大风格,另外…

银行数字化转型导师坚鹏:兴业银行《天才与算法》读书拆解培训

兴业银行杭州分行《天才与算法》读书拆解培训圆满结束 兴业银行股份有限公司(简称“兴业银行”)成立于1988年8月,2022年总资产9.27万亿元,是经国务院、中国人民银行批准成立的首批股份制商业银行之一,总行设在福州市。…

【MySQL 高级(进阶)SQL 语句】

目录 一、命令操作1、select ----显示表格中一个或数个字段的所有数据记录2、select 指定字段的显示顺序3、select distinct 不显示重复的数据记录4、where 有条件的查询5、and和or 命令 ---- 且和或6、in 显示已知的值的数据记录7、between 显示两个值范围内的数据记录8、通配…

最短路径算法(Python数学建模)

0. 前言 最短路径算法是一种用于计算图中两个节点之间最短路径的算法。在图论中,最短路径通常指的是图中连接两个节点的路径中具有最小权重(或成本)的路径。 以下是两种常见的最短路径算法: Dijkstra算法:Dijkstra算…

Python对csv文件一键多值保存为json本地文件再读取加速效率(3)

最近发现做办公自动化表格匹配的时候还是csv格式的文件最快、效率是最高的 今天接到一个需求就是大致内容之这样的 1、给我一张表格直邮一列A列,内容是运单号 2、需要用相同的单号去另外一张表格匹配数据 3、其实就是Excel中的常见的vlookup 但是想要匹配的表格有几…

D351周赛复盘:美丽下标对数目(互质/数学运算)+数组划分若干子数组

文章目录 6466.美丽下标对数目思路互质的含义 python写法cpp写法 6910. 将数组划分成若干好子数组的方式思路完整版ans (ans * (ls[i 1] - ls[i]))含义重要问题1:为什么ls[i 1] - ls[i]能代表所有这两个1划分出来的子数组?重要问题2:为什么…

java 版本企业招标投标管理系统源码,多个行业+及时准确+全程电子化

计算机与网络技术的不断发展,推动了社会各行业信息化的步伐。时至今日,电子政务、电子商务已经非常普及,云计算、大数据、工业4.0、“互联网”等发展理念也逐步深入人心,如何将传统行业与互联网科技有效结合起来,产生1…

谷歌浏览器无法翻译成中文,谷歌翻译,最新(沉浸式翻译和划词翻译,chrome无法翻译,谷歌浏览器无法翻译此网页)

简介:谷歌浏览器自带的翻译功能,对我们来说用处很大,但有的时候突然就会变成“无法翻译此网页”,之前给大家提供过两种无法翻译此网页的解决方案,这次再给大家分享下两款别的翻译方法; 一、上次介绍&#x…

如何用ChatGPT使开发效率提高50%以上?

简介 ChatGPT是一个大型语言模型,由OpenAI开发。它被训练用于进行对话式交互,能够理解和生成自然语言文本。ChatGPT可以用于多种任务和场景,包括但不限于:智能助手、创意生成、语言学习、编程辅助等。ChatGPT的优势在于它的广泛知…

搭建个人音乐库-navidrome

文章目录 前言navidrome 服务搭建准备音乐材料客户端 前言 搭建个人音乐库。好玩而已。 没有做过多的筛选。在navidrome 和 koel 之间,选择了navidrome来搭建音乐库。 主要分为这几个步骤: 在服务器上搭建navidrome服务(web端)。准备音乐材料。手机上…

免费去除视频水印的几个方法!记得收藏好!

怎么去除视频水印?相信大家应该不难发现,现在很多网上的视频保存下来都会有水印,原本是想拿这些视频当作素材来使用,结果就是让人很苦恼,但其实我们可以借助记灵在线工具将它们的水印去掉,下面我给大家分享…

谷歌带走了我最爱的全文翻译,连夜找来1个复活方法和6个替代神器!

想必前段时间大家都被谷歌翻译退出中国的相关文章刷屏过了 虽然表面上谷歌官方给出的原因是中国用户太少、使用率太低了,所以才选择退出中国市场。但根据网上的猜测,更大的可能应该是因为给谷歌翻译接入的 googleapis.com 在9月28日因某种神秘力量而国内…

JVM原理简介

前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点。 运行流程 我们都知道java一直宣传的口号是:…

应急响应篇之Linux入侵排查

0x00 前言 当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系 统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措…

【CV】从分类到回归:常见算法评价指标,如ROC,MAP等

目录 分类问题准确率(Accuracy)精确率(Precision)召回率或真正率(Recall)假正率(False Positive Rate, FPR)特异性(Specificity)ROC曲线P-R曲线(精…

AI换脸背后的产业链详解,往后神仙姐姐背后有可能是......

近期在各大平台都可以看到换脸新闻,和大家分享一下最近让我心痛的一张图片 那除了大家用来恶搞之外,AI诈骗的新闻层出不穷。我们国内目前今天最大的是下面这起事件: 而国外,因为技术更加成熟一点,所以被诈骗的金额高达…