介绍

Redis支持简单的主从(master-slave)复制功能,当主Redis服务器更新数据时能将数据同步到从Redis服务器

配置

在Redis中使用复制功能非常容易

  • 在从Redis服务器的redis.conf中写入slaveof masterip masterport即可,主Redis服务器不需要做任何配置
  • 在启动Redis服务器的时候,指定主服务器,redis-server --slaveof masterip masterport
  • 在客户端指定主服务器,redis> SLAVEOF masterip masterport,SLAVEOF命令会停止与原有主服务器的同步,转而向新主服务器进行同步

复制运行原理

当从Redis服务器启动时会向主Redis服务器发送SYNC命令,主Redis服务器接收到SYNC命令后开始进行RDB持久化,并将这期间接收到的写入操作命令都缓存起来,等RDB持久化完成后,将快照和缓存起来的命令一并发送给从Redis服务器,从Redis服务器接收到后开始载入快照和命令,这一过程称之为复制初始化。复制初始化完成后,每当主Redis接收到写入命令后,就会将命令同步给从Redis服务器,保证主从数据一致。

增量复制

在Redis2.6之前,主从断开重连后,一定会进行一次快照操作然后将快照发送给从数据库,即使断开期间只有几条命令被执行,这就使得断开重连后的数据恢复过程效率很低。在Redis2.8之后,主从断开重连后会根据断开之前最新的命令偏移量进行增量复制
1)主服务器在同步命令到从服务器的时候,会先将命令放入一个缓冲队列中并记录一个复制偏移量,同时主从服务器都会记录一个主服务器的运行ID。
2)当主从断开重连后,会判断主服务器保存的运行ID和从服务器发送过来的运行ID是否相同,相同则将从复制偏移量开始往后的所有命令一并发送给从服务器。如果不同,则进行一次复制初始化(将RDB快照和和这期间缓存起来的命令一并发送给主服务器)。
3)缓冲队列的大小默认是1MB,可以在redis.conf中的配置项repl-backlog-size进行设置,还有一个配置项repl-backlog-ttl,表示当主从断开后,缓冲队列的缓存时间。

最新文章

  1. php工作笔记3-php基础加强
  2. 值得 Web 开发人员收藏的16款 HTML5 工具
  3. map遍历方法
  4. oracle 语句 字段拼接(可换行)
  5. Galaxy Classification
  6. JavaWeb(李兴华著)开发笔记
  7. EF容器---代理类对象
  8. Linq专题之Lambda表达式
  9. 面向对象设计原则OO
  10. BootStrap2学习日记8---表单
  11. vijosP1902学姐的清晨问候
  12. 【树形动规】HDU 5834 Magic boy Bi Luo with his excited tree
  13. Freemarket学习笔记(一)
  14. Android去除系统自带动画的两种方法
  15. bzoj1858[Scoi2010]序列操作 线段树
  16. ios 在工程中使用字体
  17. [UE4]Grab抓取
  18. Python socket套接字简单例子
  19. 使用 Emmet 生成 HTML 的语法详解
  20. 使用MSF发现主机和端口扫描

热门文章

  1. ios unrecognized selector sent to instance出现的原因和解决方案
  2. Android - XML序列化
  3. angular -- ng-class该如何使用?
  4. 扫描二维码的实现(barcode) ---- HTML5+
  5. javascript 之获取 百度地址参数方法
  6. Yii2 高级模板不使用Apache配置目录,将前后台入口移到根目录
  7. poj1934 Trip【线性DP】【输出方案】
  8. LightBGM之Dataset
  9. ArrayList遍历的三种方式 array arrayList转换
  10. Linux学习 -->解决Ubuntu系统上 No command 'crond' found