Redis之持久化和主从同步

  Redis做为内存数据库,全部数据都保存在内存中, 一旦程序中止工做, 数据都将丢失. 须要咱们从新从其余地方加载数据. 不过Redis提供了两种方式保存Redis中的数据一种是dump内存直接存入rdb文件中,一种是存在aof文件中,aof文件存储的是一条一条存储和修改数据的命令,相似于mysql的二进制日志形式。mysql

  rdb文件格式因为直接dump内存数据结构,所以从新加载rdb文件速度更快,直接将文件内容读入内存中便可。Redis进行主从同步时,首先slave链接上master,master建立一个进程,将内存中的数据存储为rdb格式到磁盘上,而后经过网络将文件数据发送至slave,rdb文件生成和传输过程当中,客户端对master进行的修改都以一条条的命令保存在内存中,rdb文件传输完毕,再将这些命令传递给slave执行。若是参数repl-diskless-sync设置了值,则master建立一个进程不会将数据存储在磁盘中,而是直接发送给slave,其余操做一致。sql

  若是同时有几个slave链接到master上,则master同时只会建立一个进程将内存中数据dump到磁盘上,所以Redis建议若是一台机器上只有一个Redis实例,则设置的最大内存物理内存的通常左右,确保fork新的进程时,不会将物理内存耗光,致使程序崩溃。数据库

  若是客户端修改master上面数据,则master会将命令同步给slave节点,大部分时候slave链接master全部的数据都会从新同步一次,若是master和slave网络断开时间不长,slave从新链接master,slave会首先发送一个上次同步位置的psync命令,master验证psync命令中同步位置有效,则master不会要求slave同步全部数据,而是从slave发送的位置开始同步,psync命令中同步位置一旦无效,master会要求slave同步全部的数据。网络

相关文章
相关标签/搜索