前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【怒怼大厂面试官】听说你精通Redis?Redis数据同步懂吗

【怒怼大厂面试官】听说你精通Redis?Redis数据同步懂吗

原创
作者头像
思考的陈
修改2024-03-08 20:45:27
630
修改2024-03-08 20:45:27
举报

面试官:咳咳咳,看你简历写了精通Redis,那我就随便考考你吧

面试官:不用慌尽管说,错了也没关系😊。。。

每日分享大厂面试演练,感兴趣就关注我吧❤️

面试官:我看你们项目用的Redis集群,数据同步了解吗

好的面试官。数据同步主要是利用了RDB文件来进行数据同步。

  1. 首先,从服务器会先向主服务器发送SYNC命令
  2. 收到命令后,主服务器会执行BGSAVE命令来生成一个RDB文件,并使用AOF缓冲区来记录在生成期间执行的写命令
  3. 完成第二步后,主服务器会将RDB文件发送给从服务器,让从服务器同步RDB文件数据
  4. 当然这还没完,主服务器的AOF缓冲区还会发送给从服务器,让它们之间的数据同步至最终状态

面试官歪了歪脑袋,想了想…

面试官:按你这么说,数据同步后主服务器某个键删除了,数据又不同步了怎么办

噢噢好的。是这样的,Redis有一个叫命令传播的概念。

如果像面试官说的这种场景,再使用上面我提到的AOF缓冲区就有点浪费内存空间了。所以Redis会将主服务器的这条Del删除命令,发送给从服务器

当从服务执行命令后,数据也就同步了。

面试官想:还知道命令传播,继续深入考你…

面试官:如果主从服务器断线呢?还是用的RDB来同步吗

不是的面试官。用的RDB来数据同步太消耗资源了,比如像CPU、内存、磁盘IO消耗。

如果是短时间断线,根本没有必要使用这么浪费资源的笨方法…

Redis它其实有一个叫PSYNC命令,主从服务器断线后,从服务器会发送一个PSYNC命令给主服务器。收到命令后主服务器会发送给从服务器断线期间执行的写命令

这样从服务器执行命令后,它们的数据也就同步了。这种同步方式也叫部分重同步

面试官思考中…

面试官:考你点深入些的,主服务器怎么知道断线期间执行了哪些命令呢

emmmmm我想想。

其实每个Redis节点都有维护一个复制偏移量,例如主从服务器的初始偏移量都是0,主服务器发送给从服务器N字节数据,主从服务器的偏移量就会+N。

通过这种形式来记录同步状态。

另外主服务器不是会进行命令传播吗,同时它还会把命令传播的命令保存在一个有复制偏移量标识的复制积压缓冲区队列。

所以从服务器发送PSYNC命令同时发送复制偏移量,主服务器只要根据复制偏移量在队列中找到对应的命令就可以了。

面试官想:可以的小伙子

面试官:你知道服务器运行ID吗

哦哦知道的,每个Redis节点都有自己的服务器运行ID。

当从服务器对主服务器进行初次复制时,主服务器会将自己的运行ID传送给从服务器,而从服务器则会将这个运行ID保存起来。

断线后数据同步时,从服务器将向当前连接的主服务器发送之前保存的运行ID

如果此时主服务器发现从服务器发送的运行ID,和自己的不一致。说明此时的主服务器是新的主服务器,它也没有复制积压缓冲区队列,也就不能进行部分重同步

所以此时主服务器会向从服务器发送RDB文件来进行数据同步,服务器运行ID主要是这个作用

面试官有点慌了不知道还能问啥…

面试官:Redis心跳检测知道吧

知道的,面试官。

从服务器默认会每秒一次向主服务器发送命令,如果主服务器超过1s没有收到replconf命令,说明主从服务器的网络连接有问题了。

代码语言:js
复制
REPLCONF ACK <replication_offset>

同时这个心跳检测命令还会附带传送一个复制偏移量,也就是replication_offset

如果心跳检测时,主服务器发现他们的复制偏移量不一致,就会通过该偏移量找到从服务器丢失的写命令,发送给从服务器保持同步。

心跳检测也有检测命令丢失的功能。

面试官抓抓脑袋,继续看你的简历...... 得想想考点你不懂的😰

未完待续。。。。。。

好了,今天的分享就先到这,我们下期继续。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面试官:我看你们项目用的Redis集群,数据同步了解吗
  • 面试官:按你这么说,数据同步后主服务器某个键删除了,数据又不同步了怎么办
  • 面试官:如果主从服务器断线呢?还是用的RDB来同步吗
  • 面试官:考你点深入些的,主服务器怎么知道断线期间执行了哪些命令呢
  • 面试官:你知道服务器运行ID吗
  • 面试官:Redis心跳检测知道吧
  • 未完待续。。。。。。
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档