redis驯不好,骑你头上跑

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: redis驯不好,骑你头上跑

前言:

你认为的主从关系:

实际上的主从关系:

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

正文:

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

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

实现主从复制

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

Aip:6379>SLAVEOF Bip 6379

此时主从关系就已经建立

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不一致,就直接全量同步

总结

相关文章
|
12月前
|
XML Java 数据格式
探索Spring之利剑:ApplicationContext接口
本文深入介绍了Spring框架中的核心接口ApplicationContext,解释了其作为应用容器的功能,包括事件发布、国际化支持等,并通过基于XML和注解的配置示例展示了如何使用ApplicationContext管理Bean实例。
551 6
|
存储 安全 数据安全/隐私保护
Django 后端架构开发:富文本编辑器权限管理与 UEditor 、Wiki接入,实现 Markdown 文本编辑器
Django 后端架构开发:富文本编辑器权限管理与 UEditor 、Wiki接入,实现 Markdown 文本编辑器
649 0
|
弹性计算 运维 安全
阿里云无影云电脑详细介绍(原无影云桌面)
阿里云无影云电脑详细介绍(原无影云桌面),什么是阿里云无影云电脑?无影云电脑(原云桌面)是一种快速构建、高效管理桌面办公环境,无影云电脑可用于远程办公、多分支机构、安全OA、短期使用、专业制图等使用场景,阿里云百科分享无影云桌面的详细介绍、租用价格、云电脑的优势、使用场景、网络架构、无影云电脑与云服务器的区别以及关于无影云电脑的常见问题解答FAQ
1283 0
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
426 1
|
前端开发 容器
使用纯css制作类似轮播图效果
通过纯CSS实现流畅的页面切换效果,利用三个全屏大小的盒子放置于一个宽300vw的容器内。用户可通过点击底部按钮切换不同页面,每个按钮对应一个隐藏的单选按钮,选中时会触发容器的水平位移,从而展现不同的背景色页面。动画效果由`transition`属性完成,平滑过渡至下一个页面。此外,还提供了渐变色生成网站供参考,以丰富页面视觉效果。
170 1
|
机器学习/深度学习 缓存 TensorFlow
TensorFlow 数据管道优化超重要!掌握这些关键技巧,大幅提升模型训练效率!
【8月更文挑战第31天】在机器学习领域,高效的数据处理对构建优秀模型至关重要。TensorFlow作为深度学习框架,其数据管道优化能显著提升模型训练效率。数据管道如同模型生命线,负责将原始数据转化为可理解形式。低效的数据管道会限制模型性能,即便模型架构先进。优化方法包括:合理利用数据加载与预处理功能,使用`tf.data.Dataset` API并行读取文件;使用`tf.image`进行图像数据增强;缓存数据避免重复读取,使用`cache`和`prefetch`方法提高效率。通过这些方法,可以大幅提升数据管道效率,加快模型训练速度。
294 0
|
12月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
Java 数据库连接 数据库
告别繁琐 SQL!Hibernate 入门指南带你轻松玩转 ORM,解锁高效数据库操作新姿势
【8月更文挑战第31天】Hibernate 是一款流行的 Java 持久层框架,简化了对象关系映射(ORM)过程,使开发者能以面向对象的方式进行数据持久化操作而无需直接编写 SQL 语句。本文提供 Hibernate 入门指南,介绍核心概念及示例代码,涵盖依赖引入、配置文件设置、实体类定义、工具类构建及基本 CRUD 操作。通过学习,你将掌握使用 Hibernate 简化数据持久化的技巧,为实际项目应用打下基础。
943 0
|
存储 数据安全/隐私保护 Windows
逆向学习Windows篇:进程句柄操作详解
逆向学习Windows篇:进程句柄操作详解
736 0
|
存储 搜索推荐 算法
【数据结构入门精讲 | 第九篇】考研408排序算法专项练习(一)
【数据结构入门精讲 | 第九篇】考研408排序算法专项练习(一)
1346 1