redis主从复制机器

1. 一个master支持多个slave

2. slave可以接受其他slave的连接,作为其他slave的master,从而形成一个master-slave的多级结构

3. 复制在master端是非阻塞的,也就是master在向client复制时可处理其他client的命令,而slave在第一次同步时是阻塞的

4. 复制被利用来提供可扩展性,比如可以将slave端用作数据冗余,也可以将耗时的命令(比如sort)发往某些slave从而避免master的阻塞,另外也可以用slave做持久化,这只需要将master的配置文件中的save指令注释掉。

client可以在一开始时作为slave连接master,也可以在运行后发布sync命令,从而跟master建立主从关系。

接下来我们分别从slave和master的视角概述下redis的主从复制的运行机制。

如果redis作为slave运行,则全局变量server.replstate的状态有REDIS_REPL_NONE(不处于复制状态)、 REDIS_REPL_CONNECT(需要跟master建立连接)、REDIS_REPL_CONNECTED(已跟master建立连接)三种。在读入slaveof配置或者发布slaveof命令后,server.replstate取值为REDIS_REPL_CONNECT,然后在syncWithMaster跟master执行第一次同步后,取值变为REDIS_REPL_CONNECTED。

如果redis作为master运行,则对应某个客户端连接的变量slave.replstate的状态有REDIS_REPL_WAIT_BGSAVE_START(等待bgsave运行)、REDIS_REPL_WAIT_BGSAVE_END(bgsave已dump db,该bulk传输了)、REDIS_REPL_SEND_BULK(正在bulk传输)、REDIS_REPL_ONLINE(已完成开始的bulk传输,以后只需发送更新了)。对于slave客户端(发布sync命令),一开始slave.replstate都处于REDIS_REPL_WAIT_BGSAVE_START状态(后面详解syncCommand函数),然后在后台dump db后(backgroundSaveDoneHandler函数),处于REDIS_REPL_WAIT_BGSAVE_END 状态,然后updateSlavesWaitingBgsave会将状态置为REDIS_REPL_SEND_BULK,并设置write事件的函数 sendBulkToSlave,在sendBulkToSlave运行后,状态就变为REDIS_REPL_ONLINE了,此后master会一直调用replicationFeedSlaves给处于REDIS_REPL_ONLINE状态的slave发送新命令。

1.在master机器上执行 info命令


 
这里链接的slaves是0个,
2.然后再slave机器上执行 slaveof masterid masterport ,这是master上只有12个kv值



 
3.然后再master再用info查看结果


 
已经链接了一个slave机器
4. 在master上写入一个新的值,然后查看slave机器,几乎同时在slave机器出现


 
在slave机器同时查看

转载于:https://www.cnblogs.com/zhwj184/archive/2012/05/31/3027508.html

redis学习总结2相关推荐

  1. Redis学习之路(一)--下载安装redis

    redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...

  2. Redis学习笔记 - 数据类型与API(1)Key

    Redis学习笔记 - 数据类型与API(1)Key Key相关命令 1. 常用命令 命令 含义 时间复杂度 keys 查找所有符合给定模式 pattern 的 key O(N), N 为数据库中 k ...

  3. 转-Redis学习手册(目录)

    为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...

  4. Redis学习笔记~Redis在windows环境下的安装

    Redis是一个key-value的存储系统,它最大的特点就是可以将数据序列化到文件中. redis存储在服务器的内存或者文件中,它不是session,不是cookies,它只是个更安全,更稳定,更可 ...

  5. Redis学习资料整理

    Redis学习资料: (1)Redis设计与实现 (2)十五分钟介绍 Redis数据结构 (3)redis安装 (4)redis指令手册中文版 Hiredis学习资料: (1)hiredis安装及测试 ...

  6. Redis学习(4)-数据类型set和zset

    Set数据类型及操作 Set集合是通过hash table实现的,所以添加.删除和查找的复杂度都是O(1),hash table会随着添加或者删除自动的调整大小,需要注意的是 hash table大小 ...

  7. Redis 学习资料整理

    菜鸟爬坑--Redis学习与探索(二):Redis的数据类型 http://www.cnblogs.com/codediary/archive/2015/02/20/redisstudy-2.html ...

  8. redis学习笔记-持久化

    redis学习笔记-持久化 前言 redis持久化有两种方式:RDB和AOF.分别对应着全量复制和增量复制.深刻理解各自的实现方式及适用场景对redis的使用和运维十分重要.下面就分别介绍. RDB持 ...

  9. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  10. Redis学习与实战之字符串命令

    字符串命令 一.基本字符串命令 1.基本字符串操作命令(设置.取值.删除.取长度) 命令名称 命令功能 执行时间复杂度 Set 为指定的一个键设置对应的值,如果已经存在,则直接覆盖原来的值 O(1) ...

最新文章

  1. 干货 | 2021年,深度学习还有哪些研究方向可以做?
  2. 盘一盘推荐系统里值得一读的那些论文
  3. Ubuntu中输入输出重定向及管道技术简述
  4. linux opencl(AMD) Example
  5. 使用TargetSources
  6. nodejs 最简单的文件接收
  7. MOS管正确选择的步骤
  8. matlab处理足球数据,如何用MATLAB画一个足球出来?
  9. Fundamentals of speech signal processing
  10. android 多线程互斥,Android同步类:Mutex和Condition
  11. 诺基亚N9开发者模式详解:谁的N9谁做主
  12. jvm内存结构与java内存模型
  13. 圣思园Java视频 学习笔记
  14. 小米真蓝牙耳机说明书_小米蓝牙耳机使用说明,开箱评测小米蓝牙耳机
  15. 计算机硬盘检测不到,硬盘检测不到怎么解决
  16. NHANES数据库的介绍及使用(二)
  17. Ardunio开发实例-BMM150数字地磁传感器
  18. python-opencv 读取摄像头并保存为.mp4视频
  19. 自媒体推广渠道,如何推广来看看这3步能帮到你
  20. linux系统定时器中断优先级,请教定时器中断与串口中断优先级配置问题

热门文章

  1. 信捷plc编程100例梯形图_PLC分类组成与梯形图编程语言
  2. 利用Python进行数据分析--数据规整化:清理、转换、合并、重塑
  3. 存到mysql的中文乱码_web项目存数据到数据库,中文乱码,解决过程
  4. 超分辨率分析(四)--Deep Image Prior
  5. 孙鑫-MFC笔记一--Windows程序内部运行机制
  6. awk取列 shell 读文件_大厂运维高手如何打造核心竞争力?这些Shell命令合集得知道!...
  7. Spring Boot文件目录介绍
  8. scala 泛型入门简介
  9. 记ICS的lab2--bomb实验
  10. 数据绑定(九)Binding的数据校验