redis 主从实现

一:Redis 数据存储方式

Redis 数据库中的所有数据存储在内存中,为了数据安全,同时也会进行数据持久化处理。Redis 持久化的方式主要有两种: RDB方式和AOF方式。

 

1RDB方式:RDB的持久化是通过快照来完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照,并存储在硬盘上。进行快照的参数可以有配置文件指定,主要由两个参数构成:时间和改动的键的个数。 RDB是redis采用的默认持久化方式,默认情况下使用save命令指定了3个条件,所有条件之间是“或”的关系。例如 save 900 1 即 15分钟(900秒)内至少有一个键被更改则进行快照。

  Redis快照过程如下:

1.      当触发Redis快照条件时,Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)

2.      父进程继续接收并处理客户端发过来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件;

3.      当子进程写完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照的操作就完成了。

这时候就会有疑问了,如果子进程在快照期间,父进程写了某片数据,子进程怎么办呢?

在执行frok函数时,操作系统(类Unix系统)会使用写时复制(copy–on-wirte)的策略,即fork函数发生的一刻父进程和子进程共享一个内存数据,当父进程修改某片数据时,操作系统会将该片数据复制一份以保证子进程不受影响,所以RDB快照时fork函数执行一刻的Redis数据库快照。

2AOF方式:AOF(append only file)是每执行一条更改Reids中数据的命令,Redis就会将该命令写入磁盘中的AOF文件中。这样做是为了确保实时的持久化所有的数据,减少数据的丢失的可能性,但是事实上,由于操作系统的缓存机制,数据并没有真正的写入磁盘,而是写入了硬盘缓存中。所以默认情况下是每30秒执行一次同步操作,以便将数据真正写入磁盘中。

二:Redis复制原理

Redis 复制配置只需要在从库的配置文件中开启 SLAVEOF host post就可以了。当配置完从数据库,启动数据时。从库就会向 SLAVE 所填写的host主键的 post端口发送 SYNC命令,主库接收到SYNC命令时,就会开始在后台进行快照,并且保存期间接收到的客户端命令缓存起来。当快照完成后,主数据库就会将快照文件以及缓存的命令发送到从数据库。从数据库接收后,会加载二进制快照文件并执行缓存命令。当主从数据库断开重连后会重新执行从数据发送SYNC命令到从数据库加载二进制快照文件执行缓存命令操作,因为Redis不支持断点续传。

 

三:复制实现过程

1.      查看从数据的keys


2.      开启从数据库的SLAVEOF 命令


3.      重启从数据库,如果主库有设置密码,从库需要设置masterauth 密码为主库密码

4.      用redis-cli登录使用info命令查看从库信息


5.      查看数据是否同步

通过验证Redis主从同步是可行的,删除已经同步过来的key再重启从服务器,从服务器删除的keys会重新同步过来。即主数据库会通过最新的快照和缓存命令到从服务器。

验证主数据会同步最新快照如下:

1.删除从服务器对应的dump.rdb文件(先停服务)


2.查看从服务器的keys是否为空(关闭slave,再重启)


3.重新开启slave,查看同步的keys,通过检测和主服务器的keys相同。

四:主从同步监控

可以在从数据库和主数据库分别使用info命令来查看主从同步的状态。

从数据库:


主数据库:


五:同步性能

//todo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值