初识Redis同步原理

Redis同步原理

Redis的主从部署,主服务器执行写操作命令,从服务器则会通过主服务器的数据变化,同步数据到从服务器,如果主服务器下线,那么从服务器无法连接到主服务器,那数据同步如何拿到连接不上主服务器这段时间的命令?

  • 主从配置:
主从复制的配置十分简单:把下面这行加入到从服务器的配置文件中即可。
slaveof 192.168.1.1 6379
 
当然你需要把其中的192.168.1.1 6379替换为你自己的主服务器IP(或者主机名hostname)和端口。另外你可以调用SLAVEOF命令,
主服务器就会开始与从服务器同步。
 
关于部分重新同步,还有一些针对复制内存缓冲区的优化参数。查看Redis介质中的Redis.conf示例获得更多信息。
 
使用repl-diskless-sync配置参数来启动无磁盘复制。使用repl-diskless-sync-delay 参数来配置传输开始的延迟时间,以便等待
更多的从服务器连接上来。查看Redis介质中的Redis.conf示例获得更多信息。

主从复制中的主从服务器的双方的数据库保存相同的数据,概念上将这种现象称为数据库状态一致。
如何实现同步那就需要了解redis数据库中持久化有两种方式:

  • RDB全量持久化和AOF增量持久化;
  1. RDB全量持久化(默认)
  2. AOF增量持久化:
    默认情况下Redis没有开启AOF(append only file)方式的持久化,可以在redis.conf中通过appendonly参数开启:
    appendonly yes
    在启动时Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相 较RDB会慢一些
    开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。A
    数据同步的步骤:
  3. 在redis2.8之前使用旧版本复制功能SYNC,这是一个非常耗资源的操作
    主服务器需要执行BGSAVE命令来生成RDB文件,这个生成操作会耗费主服务器大量的CPU、内存、磁盘读写资源。
    主服务器将RDB文件发送给服务器,这个发送操作会耗费主从服务器的大量网络宽带和流量,并对主服务器响应命令
    请求的时间产生影响,接受到RDB文件的从服务在载入文件的过程是阻塞的,无法处理命令请求。
  4. 在2.8之后使用PSYNC,就有完整重同步和部分重同步两种模式
    第一种完整重同步:
    在第一次主从服务器建立连接时就将主中的RDB文件存储复制到从服务器上,之后再将命令发送到缓存区中,进行增量同步;
    第二种部分重同步:
    第二种方法一般用于断线后的重复制情况,也就是将断线后的写命令放入到缓存区中,当主服务器下线后,就将在断线期间的写命令发送给从服务器。
    功能由三部分构成:
  • 主服务的复制偏移量和从服务器的复制偏移量。
  • 主服务器的复制积压缓冲区,默认大小为1m
  • 服务器的运行ID,用于存储服务器标识:如果从服务器断线重新连接,获取主服务器的运行ID与重接后的主服务器ID进行对比,判断是否是原来的主服务器,从而决定是执行部分重同步,还是执行完整重同步。
  • 两个版本的redis数据同步功能对比:
  1. 无磁盘化
    通常来讲,一个完全重新同步需要在磁盘上创建一个RDB文件,然后加载这个文件以便为从服务器发送数据。
    如果使用比较低速的磁盘,这种操作会给主服务器带来较大的压力。Redis从2.8.18版本开始尝试支持无磁盘的 复制。
    使用这种设置时,子进程直接将RDB通过网络发送给从服务器,不使用磁盘作为中间存储。
  2. 同步方法大概一致,只是在两服务器的传输上增加了缓存区,并对缓存区加以利用。
详细文章:https://www.cnblogs.com/daofaziran/p/10978628.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值