【面试官】Redis数据同步了解吗?
- 面试官:我看你们项目用的Redis主从,数据同步了解吗?
- 面试官:按你这么说,数据同步后主服务器某个键删除了,数据又不同步了怎么办?
- 面试官:如果主从服务器断线呢?还是用的RDB来同步吗?
- 面试官:那主服务器怎么知道断线期间执行了哪些命令?
- 面试官:知道服务器运行ID吗?
- 面试官:Redis心跳检测知道吧?
大家好,我是南哥。
一个Java学习与进阶的领路人,跟着南哥我们一起Java成长。
文章目录
- Redis数据同步
- 数据同步过程
- 命令传播
- 部分重同步
- 复制偏移量
- 服务器运行ID
- Redis心跳检测
1. Redis数据同步
1.1 数据同步过程
面试官:我看你们项目用的Redis主从,数据同步了解吗?
回答数据同步过程问题前,大家有没想过为什么Redis要数据同步?不会是MySQL主从架构要数据同步,Redis就照猫画虎吧。
虽然这两者有关系型数据库和非关系型数据库的差异,但都是作为存储数据的数据库系统。而主从架构的目的就在于对数据有多个"备份",有了多个"备份",就自然而然衍生出众多好处。如负载均衡、灾难恢复、数据备份。
既然要"备份",那数据同步就必不可少了。Redis主从数据同步大致的过程如下。
- 首先,从服务器会先向主服务器发送SYNC命令。
- 收到命令后,Redis主服务器会执行BGSAVE命令来生成一个RDB文件,并使用AOF缓冲区来记录在生成期间执行的写命令。关于BGSAVE命令和SAVE命令的区别,大家可以往前阅读我写的Redis系列文章。
- 完成第二步后,主服务器会将RDB文件发送给从服务器,让从服务器同步RDB文件数据。
- 当然这还没完,在生成RDB文件的过程中,仍然会有其他写命令到达服务器。Redis主服务器的AOF缓冲区会继续发送给从服务器,让它们之间的数据同步至最终状态。
1.2 命令传播
面试官:按你这么说,数据同步后主服务器某个键删除了,数据又不同步了怎么办?
有了AOF缓冲区的概念还没完,Redis主从复制还有一个命令传播的概念等着你去学。
从服务器使用SYNC进行初次数据同步后,主、从服务器的数据库状态并不是每时每刻都保持一致的,这种情况反而是常态。肯定不能为了一条写指令的差异就重新执行SYNC命令,因为SYNC命令是一个非常耗费资源的操作。
这种情况Redis主服务器会将造成主从服务器数据不一致的写命令,即最近执行的写命令,发送给从服务器执行。这便是的过程,当从服务器执行命令后,主从服务器的数据库状态也就保持了一致
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点! 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!