redis学习总结2
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发送新命令。
转载于:https://www.cnblogs.com/zhwj184/archive/2012/05/31/3027508.html
redis学习总结2相关推荐
- Redis学习之路(一)--下载安装redis
redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...
- Redis学习笔记 - 数据类型与API(1)Key
Redis学习笔记 - 数据类型与API(1)Key Key相关命令 1. 常用命令 命令 含义 时间复杂度 keys 查找所有符合给定模式 pattern 的 key O(N), N 为数据库中 k ...
- 转-Redis学习手册(目录)
为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...
- Redis学习笔记~Redis在windows环境下的安装
Redis是一个key-value的存储系统,它最大的特点就是可以将数据序列化到文件中. redis存储在服务器的内存或者文件中,它不是session,不是cookies,它只是个更安全,更稳定,更可 ...
- Redis学习资料整理
Redis学习资料: (1)Redis设计与实现 (2)十五分钟介绍 Redis数据结构 (3)redis安装 (4)redis指令手册中文版 Hiredis学习资料: (1)hiredis安装及测试 ...
- Redis学习(4)-数据类型set和zset
Set数据类型及操作 Set集合是通过hash table实现的,所以添加.删除和查找的复杂度都是O(1),hash table会随着添加或者删除自动的调整大小,需要注意的是 hash table大小 ...
- Redis 学习资料整理
菜鸟爬坑--Redis学习与探索(二):Redis的数据类型 http://www.cnblogs.com/codediary/archive/2015/02/20/redisstudy-2.html ...
- redis学习笔记-持久化
redis学习笔记-持久化 前言 redis持久化有两种方式:RDB和AOF.分别对应着全量复制和增量复制.深刻理解各自的实现方式及适用场景对redis的使用和运维十分重要.下面就分别介绍. RDB持 ...
- StackExchange.Redis学习笔记(五) 发布和订阅
StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...
- Redis学习与实战之字符串命令
字符串命令 一.基本字符串命令 1.基本字符串操作命令(设置.取值.删除.取长度) 命令名称 命令功能 执行时间复杂度 Set 为指定的一个键设置对应的值,如果已经存在,则直接覆盖原来的值 O(1) ...
最新文章
- 干货 | 2021年,深度学习还有哪些研究方向可以做?
- 盘一盘推荐系统里值得一读的那些论文
- Ubuntu中输入输出重定向及管道技术简述
- linux opencl(AMD) Example
- 使用TargetSources
- nodejs 最简单的文件接收
- MOS管正确选择的步骤
- matlab处理足球数据,如何用MATLAB画一个足球出来?
- Fundamentals of speech signal processing
- android 多线程互斥,Android同步类:Mutex和Condition
- 诺基亚N9开发者模式详解:谁的N9谁做主
- jvm内存结构与java内存模型
- 圣思园Java视频 学习笔记
- 小米真蓝牙耳机说明书_小米蓝牙耳机使用说明,开箱评测小米蓝牙耳机
- 计算机硬盘检测不到,硬盘检测不到怎么解决
- NHANES数据库的介绍及使用(二)
- Ardunio开发实例-BMM150数字地磁传感器
- python-opencv 读取摄像头并保存为.mp4视频
- 自媒体推广渠道,如何推广来看看这3步能帮到你
- linux系统定时器中断优先级,请教定时器中断与串口中断优先级配置问题
热门文章
- 信捷plc编程100例梯形图_PLC分类组成与梯形图编程语言
- 利用Python进行数据分析--数据规整化:清理、转换、合并、重塑
- 存到mysql的中文乱码_web项目存数据到数据库,中文乱码,解决过程
- 超分辨率分析(四)--Deep Image Prior
- 孙鑫-MFC笔记一--Windows程序内部运行机制
- awk取列 shell 读文件_大厂运维高手如何打造核心竞争力?这些Shell命令合集得知道!...
- Spring Boot文件目录介绍
- scala 泛型入门简介
- 记ICS的lab2--bomb实验
- 数据绑定(九)Binding的数据校验