Redis主从复制实现

Redis中的主从复制,也就是Master-Slave模型,其实现相对比较简单,一般使用在多个Redis实例间的数据同步以及Redis集群中用的比较多。• 工作原理• 特征说明• 如何配置• 验证使用

大家好,又见面了,我是你们的朋友全栈君。

Redis主从复制实现:

Redis中的主从复制,也就是Master-Slave模型,其实现相对比较简单,一般使用在多个Redis实例间的数据同步以及Redis集群中用的比较多。

 

·     工作原理

·     特征说明

·     如何配置

·     验证使用

 

1、工作原理

在Master和Slave互通之后,首先,Slave会发送sync同步指令,当Master收到指令后,将在后台启动存盘进程,同时收集所有来自Slave的修改数据集的指令信息,当后台进程完成之后,Master将发送对应的数据库文件到对应的Slave中,以完成一次完整的同步工作。其次Slave在接受到数据库文件之后,将其存盘并加载到内存中。最后,Master继续收集修改命令和新增的修改指令,并依次发送给Slave,其将在本次执行这些数据的修改命令,从而最终达到数据同步的实现。

 

NOTE:

A、 当Master与Slave出现当机时,Slave会自动重新连接并一次性完成同步;

B、 当Master收到多个Slave发送sync指令时,其会在后台开启个队列来保持多个Slave可以有序高效的执行;

 

2、特征说明

A、一个Master可以同步多个Slave,实现主从复制;

B、一个Slave同时也可以接收其它Slaves的连接和同步请求,以缓解Master同步的压力;

C、Master Server是以非阻塞的方式为Slave提供服务,所以其在与Slave同步时,也可以接受正常的查询和修改的指令;

D、Slave Server同样也是以非阻塞方式完成数据同步,在同步期间,也可以继续接受客户端的查询请求;

E、Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作;

 

3、如何配置

因为限于只有一台电脑设备,所以这里是在一台设备上同时启动两个Redis服务器实例,端口号分别为:6379和6380,具体如下操作:

A、创建6379和6380配置文件

redis.conf:6379为默认配置文件,作为Master服务配置;

redis_6380.conf:6380为同步配置,作为Slave服务配置;

 

B、配置slaveof同步指令

在Slave对应的conf配置文件中,添加以下内容:

slaveof 127.0.0.1 6379

 

NOTE:

添加slaveof指令,重启redis服务,生效Master-Slave同步执行;

修改该文件的port为6380,以及数据库文件存放为止dir,确保Master和Slave存放的数据不冲突和被覆盖;

 

4、验证使用

A、开启Master和Slave服务

$redis-server /redis/etc/redis.conf  // 6379实例-Master

$redis-server /redis/etc/redis_6380.conf // 6380实例-Slave

然后,在两个客户端打开redis-cli:

$redis-cli –p 6379  // 6379实例客户端

$redis-cli  -p 6380  // 6380实例客户端

 

B、在Master中添加mykey和mykey2键值

Redis主从复制实现

 

C、在Slave中检查mykey和mykey2是否存在

Redis主从复制实现

 

从上面的截图可以看出,Master和Slave已经同步完成,因为在Slave中没做任何的set/get操作,所有操作在Master进行,但是可以在Slave中查看到同样的操作。

 

D、在Master中删除mykey2,查看Slave中显示

在Master删除mykey2:

Redis主从复制实现

在Slave查看mykey2是否存在:

Redis主从复制实现

 

E、在Slave中新增和删除键可以吗?

默认在Slave中修改键会报错:

(error) READONLY You can’t write against a read only slave.

 

原因是需要设置slave-read-only为no,重启服务之后生效,然后再执行set/get是可以的,但是不会同步到Master中去,因为需要在Master的redis.conf添加slaveof<server>:<port>才行,此时Master也已经变为Slave了。

 

 

好了,到这里已经使用例子总结说明了,Redis的复制原理、特性以及主从复制的使用。

 

 

 

 

技术讨论群:

489451956(新)

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127044.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python开发mbus程序_MBUS 和MODBUS 什么关系啊

    python开发mbus程序_MBUS 和MODBUS 什么关系啊展开全部MBUS和MODBUS之间的关系:M-Bus是针对仪表(主要是热表)的单线制通讯总线标准,对于物理层62616964757a686964616fe58685e5aeb931333431343666、数据链路层、应用层和网络层都有严格的规定。Modbus则对物理层没有过多限制,在RS-232、RS-485、TCP/IP、光纤、红外等任意物理层上都可以跑,基本上来说,Modbus只包含应用层…

    2022年10月15日
  • CubieBoard2串口

    CubieBoard2串口CubieBoard2串口

    2022年7月22日
  • 数据结构面试常见问题总结怎么写_前端数据结构与算法面试题

    数据结构面试常见问题总结怎么写_前端数据结构与算法面试题数据结构面试常见问题总结写在前面本文记录了一些数据结构面试常见问题,本意用于考研复试,以下面试题为网上整理的问题以及自己加入的一些问题,答案仅供参考!Q:数据结构三要素A:逻辑结构、物理结构、数据运算Q:数组与链表有什么区别?A:数组静态分配内存,链表动态分配内存数组在内存中连续,链表不连续数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n)数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)Q:线性表的存储结构?A:顺序存储(内

    2022年9月15日
  • UFT常识

    UFT常识UFT也用了一段时间了,自己竟然还老犯同样的错误,遇到同样的问题。自己还不能单独解决,对不起导师,对不起自己。下面对UFT中的一些基本问题总结一下。1.关于DataTable导入:DataTable.ImportSheet(FileName,SheetSource,SheetDest)FileName: ThefullorrelativepathoftheExce

    2022年5月8日
  • 洗水管理系统_洗衣店信息管理系统课设

    洗水管理系统_洗衣店信息管理系统课设技术:Java、JSP等摘要:随着人们对生活物质的追求,人们对穿着有了更加深刻的体会以及认识,很多高档的服装可以给人们带来气质方面的展现和心情的愉悦。然后,对于高档服装的清洗也成为了实际性的问题,为此很多人们选择送去洗衣店去清洗,其目的是既清洗的干净,而且还方便。这就给洗衣店带来非常大的管理压力,尤其是记录用户的收费信息等。本次系统设计之初就考虑到这一点来进行需求调查的,系统主要的模块由用户登录模块,注册模块,办卡管理,充值管理,寄存衣服办理,报表统计管理等基本实现功能模块,系统主要采取的是B/S开发模式

    2022年10月31日
  • php 死链查询,seo网站死链解决方法 死链查询检测工具

    php 死链查询,seo网站死链解决方法 死链查询检测工具死链是指服务器的地址已经改变了.无法找到当前地址位置,包括协议死链和内容死链两种形式。死链出现的原因有网站服务器设置错误;某文件夹名称修改,路径错误链接变成死链等。我们都知道死链对seo排名的危害是非常大的。死链对网站的危害一、有可能会让搜索引擎降权二、用户体验较差死链检测方法:Xenu死链查询工具今天教大家如何使用Xenu死链接检测工具对网站死链接(什么是网站死链)进行处理,有图有真相,轻松四步…

    2022年7月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号