Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >redis驯不好,骑你头上跑

redis驯不好,骑你头上跑

作者头像
灬沙师弟
发布于 2023-03-20 08:01:13
发布于 2023-03-20 08:01:13
31700
代码可运行
举报
文章被收录于专栏:Java面试教程Java面试教程
运行总次数:0
代码可运行

前言:

你认为的主从关系:

实际上的主从关系:

哈哈~以上图片大家图一乐~ 你以为主从关系之间就是主在指导着全部,但是其实不是。在redis主从关系中,主从相辅相成。今天小面就和大家一起来唠一下redis主从复制的原理

正文:

什么情况下需要redis主从复制?

其实现在生产上,我们对于redis肯定是需要高可用的,为了防止一台机器挂掉,或者是网络崩了。比如主从复制,哨兵,集群。我们今天的主题就是主从复制,主从复制就是得到了数据备份和读写分离两个功能。

实现主从复制

假设我们有俩redis,A(master)与B(Slave) 我们使用SLAVEOF 去实现主从复制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   Aip:6379>SLAVEOF Bip 6379 

此时主从关系就已经建立

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   Aip:6379>SET a "abc"
   OK
   Bip:6379>GET a
   "abc"

从节点只能读,但是不能写会报错 READONLY 如果是想要取消主从复制,使用SLAVEOF NO ONE 命令

主从复制实现(Redis2.8之前的版本)

执行SLAVEOF命令后,

  1. 从 会向 主发送SYNC命令

2.从发送给主后,主收到了该命令就会去执行BGSAVE命令,BGSAVE命令执行后默认会在我们磁盘上回生成一个RDB文件,同时也会在缓冲区把之后的所有的命令都给保存下来。

3.主 讲rdb文件发给从,从 加载rdb文件。

4.主 将缓冲区的命令发送给从,从去执行这些命令 。

这就是redis2.8之前的同步操作,主有数据之后,主就会把自己执行过的命令集合发送给从服务器,从服务器接受到了这些命令后就会去执行,这样主和从就相同了。

缺点:如果说从因为网络等一些问题断线重连,每次都要去执行一次SYNC全量复制(SYNC命令是比较消耗资源的,要生成rdb文件,又要传输去从,从要再加载文件)

主从复制实现(Redis2.8之后的版本)

为了解决上述缺点,新版本的主从复制就可以解决。初次复制和原来的全量复制是一样的。断线后的复制,只需要把断线后主执行过的命令发送给从就可以了。

那么要怎么实现呢?那我们需要了解几个知识点,第一个知识点是复制积压缓冲区,顾名思义就是一个暂时存放的地方。第二个是复制偏移量。第三个是runId。主每次执行命令,主的偏移量就会去加向从传输的字节大小。从收到数据后执行后,从的偏移量就会加上传输的字节大小。

给大家举个例子 A是主,BC是从 原先ABC的偏移量都是10000,A传输了33字节的数据,B断开,C正常 此时A和C的偏移量都是10033,而B重连之后还是10000。

那么B该怎么获取数据?这就会涉及到了复制积压缓冲区,简单来说在A传输数据的时候,他会把命令往缓冲区去存入。不过我们也需要考虑一下情况,我们把复制积压缓冲区想象成一个圆形。初始的主从偏移量全部都在12点方向,主接受了一定量的数据,顺时针跑到了6点。那么此时 从断开重连后, 就是要去执行增量同步。如果主偏移量从12点顺时针跑了一圈又到了12点,再多跑了一点,有一部分数据已经被重新覆盖了,增量同步将不起作用,这部分被覆盖的数据就永远获取不到,所以此时就要做全量同步。

那么比如再重新选主的场景,我怎么知道我是不是复制的还是原来的主呢?这就涉及到runId,第一次全量复制的时候,主会把runId给从,从在做psync的时候会去携带runId,如果runid不一致,就直接全量同步

总结

希望你们的主从关系能够像这样和谐~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java面试教程 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入学习Redis:主从复制
https://www.cnblogs.com/kismetv/p/9236731.html
beifengtz
2019/06/03
7870
深入学习Redis:主从复制
跟随杠精的视角一起来了解Redis的主从复制
虽然说单机的Redis性能很好,也有完备的持久化机制,那如果你的业务体量真的很大,超过了单机能够承载的上限了怎么办?不做任何处理的话Redis挂了怎么办?带着这个问题开始我们今天的主题-「Redis高可用」,由于篇幅原因,本章就只聊聊主从复制。
SH的全栈笔记
2022/08/17
2930
跟随杠精的视角一起来了解Redis的主从复制
Redis主从复制是如何保证数据不丢失的?
在生产环境中,为了系统的可靠性,我们会对Redis搭建主从。这样当一个实例发生宕机,另一个实例中还有数据,还能继续提供服务。主从库之间采用的是读写分离的模式。
Java识堂
2021/01/20
2.1K0
Redis主从复制是如何保证数据不丢失的?
Redis:主从复制
Redis主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
灰子学技术
2020/10/10
4940
Redis:主从复制
Redis主从复制原理和复制方式分析
在之前的Redis持久化文章【看看Redis持久化RDB和AOF是怎么实现的!】, 通过学习我们知道通过持久化技术让服务器重启的情况下尽可能少或者不会丢失数据。
小许code
2023/12/11
3710
Redis主从复制原理和复制方式分析
redis 主从复制
在分布式系统中,为了解决单点问题,通常会把数据复制多个副本部署到其他节点,以便满足故障恢复和负载均衡等需求。redis也是如此,它为我们提供了复制功能,实现了相同数据的多个副本。复制功能是redis高可用的基础,不管是哪种集群方案,都是基于底层的主从复制原理进行的。 配置redis主从复制 在redis的主从复制中,和其他服务一样,都有master和slave两个角色,默认每个redis节点都是主节点,每个从节点也只能有一个主节点,而主节点可以配置多个从节点。
小手冰凉
2020/07/27
1.2K0
《Redis设计与实现》读书笔记(二十四) ——Redis主从复制原理
《Redis设计与实现》读书笔记(二十四) ——Redis主从复制原理 (原创内容,转载请注明来源,谢谢) 一、概述 redis中,可以用slaveof命令,或者在配置中设置slaveof选项,让一个服务器去复制另一个服务器。去复制的服务器称为从服务器(slave),被复制的称为主服务器(master)。 主服务器的增删改,在从服务器中都会一并有改动。 redis2.8之前(不含2.8)的版本(下称旧版),和之后(含2.8)的版本(下称新版),对于复制的做法有所不同,
用户1327360
2018/03/07
1.1K0
《Redis设计与实现》读书笔记(二十四)  ——Redis主从复制原理
《Redis设计与实现》读书笔记(二十五) ——Redis主从复制具体过程
《Redis设计与实现》读书笔记(二十五) ——Redis主从复制具体过程 (原创内容,转载请注明来源,谢谢) 一、PSYNC命令执行过程 psync是新版redis复制使用的命令
用户1327360
2018/03/07
8500
《Redis设计与实现》读书笔记(二十五)  ——Redis主从复制具体过程
Redis主从复制原理以及常见问题
主从复制就是现在有俩台redis服务器,把一台redis的数据同步到另一台redis数据库上。前者称之为主节点(master),后者为从节点(slave)。数据是只能master往slave同步单向。
全栈程序员站长
2022/07/23
9550
Redis主从复制原理以及常见问题
聊聊redis的主从复制实现与同步过程
我们在业务中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等要求
1014803
2020/02/17
1.4K0
聊聊redis的主从复制实现与同步过程
Redis的数据复制
Redis 的复制功能分为同步(sync)和命令传播(command propagate)这两个操作
真正的飞鱼
2022/12/21
8600
Redis主从复制与优化
每个redis节点启动后都会动态分配一个40位的十六进制字符串为运行ID。运行ID的主要作用是来唯一识别redis节点,比如从节点保存主节点的运行ID识别自已正在复制是哪个主节点。如果只使用ip+port的方式识别主节点,那么主节点重启变更了整体数据集(如替换RDB/AOF文件),从节点再基于偏移量复制数据将是不安全的,因此当运行ID变化后从节点将做全量复制。可以在info server命令查看当前节点的运行ID。
用户2781897
2020/12/15
2930
redis集群主从复制原理_主从关系紫音
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower) ; 数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。
全栈程序员站长
2022/09/22
2760
redis集群主从复制原理_主从关系紫音
Redis系列(三):深入解读Redis主从同步机制
为什么要提这个呢,因为Redis主从库目的呢其实就是为了实现高可靠。上篇文章中我们说过Redis的AOF、RDB日志其实就是为了减少数据丢失,这是高可靠的一部分。
程序员朱永胜
2023/08/18
2.4K0
Redis系列(三):深入解读Redis主从同步机制
深入Redis 主从复制原理
1、从节点执行 slaveof 命令 2、从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制 3、从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点 4、连接建立成功后,发送 ping 命令,希望得到 pong 命令响应,否则会进行重连 5、如果主节点设置了权限,那么就需要进行权限验证;如果验证失败,复制终止。 6、权限验证通过后,进行数据同步,这是耗时最长的操作,主节点将把所有的数据全部发送给从节点。 7、当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来,主节点就会持续的把写命令发送给从节点,保证主从数据一致性。
Bug开发工程师
2019/05/05
9010
深入Redis 主从复制原理
Redis源码阅读(五)主从复制与哨兵机制
Redis 单节点存在单点故障问题,为了解决单点问题,一般都需要对 Redis 配置从节点,然后使用哨兵来监听主节点的存活状态,如果主节点挂掉,从节点能继续提供缓存功能。
星沉
2022/01/28
6220
Redis 高可用篇:你管这叫主从架构数据同步原理?
在《Redis 核心篇:唯快不破的秘密》中,「码哥」揭秘了 Redis 五大数据类型底层的数据结构、IO 模型、线程模型、渐进式 rehash 掌握了 Redis 快的本质原因。
码哥字节
2021/03/16
7410
01 . Redis简介及部署主从复制
如下图所示,我摩恩碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存,这样,后面的请求就去缓存中读取,使得请求能够迅速响应.
iginkgo18
2020/09/27
1.2K0
01 . Redis简介及部署主从复制
Redis主从复制集群的介绍及搭建
Redis 主从复制是 Redis 数据备份和高可用性的重要机制之一。主从复制允许你有一个或多个从服务器复制主服务器的数据。这样,你可以在多个服务器上读取相同的数据,提高读取性能,同时也可以防止数据丢失。
栗筝i
2023/10/16
4770
Redis主从复制集群的介绍及搭建
一文搞定 Redis 复制(全会的举个手看看)
Step 2:从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制。
良月柒
2019/06/14
4270
一文搞定 Redis 复制(全会的举个手看看)
相关推荐
深入学习Redis:主从复制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验