长久化

  • 快照(rdb):保留某个工夫点内存中所有数据的正本。(BGSAVE/SAVE)
毛病:存在数据失落:下一次快照创立过程中,若产生解体,会失落上次快照后的所有数据。
  • AOF:保留写命令到AOF文件开端,记录数据变动。(相似Mysql的binlog)
毛病:保留的文件可能会比拟宏大,占用很多硬盘空间。


两者既能够独自应用,也能够协同应用。

RDB


BGSAVE会创立子过程来进行贮存,会与主过程竞争资源;而SAVE则间接阻塞客户端申请,转而去备份。

对于占用几十个GB内存的Redis服务器,BGSAVE创立过程要花费15秒,备份完须要15~20分钟。而SAVE仅须要3~5分钟。所以罕用做法是,写一个脚本,在中午去手动SAVE。

AOF

审慎应用appendfsync:always。尤其是固态,个别举荐应用everysec。

bgrewriteaof命令:相似bgsave,新建子线程,用于精简AOF文件,删除冗余命令,重写AOF文件。可通过auto-aof-rewrite-min-sizeauto-aof-rewrite-percentage来主动执行重写。

复制

主从同步

主用于写,从用于读。master的rdb文件先交给slave去写入本人内存,再将同步期间master收到的写命令放入缓冲区,rdb复原完后,会再次接管master缓冲区传来的写命令。而后master都将aof定期交给slave实现同步。客户端写入master,读取拜访slave。
相干配置:

  • 主:dirdbfilename必须配好。
  • 从:slaveof host port这个为必须的。

即可在conf配置文件设置salveof来选定从服务器,也可通过slaveof命令来设置。
slave同步前会清空之前的所有数据。
redis不反对主-主复制。(相互设成对方的slave,不反对!)
毛病:如果主挂了,那就没有写服务器了。(主从连,sentinel模式能够改善这一毛病)

主从连

从服务器能够领有本人的从服务器。

主从复制与从从复制的惟一区别:在主服务器A,从服务器X有一个从服务器Y的模式下,在X与A同步时X写入rdb至内存时,会与Y断开连接,导致Y从新同步。(与主同步时,断开本人从的连贯)

实用场景:读的需要一台从服务器不能满足,须要更多的读服务器。
注:查看是否已全副写入硬盘:info中aof-pending-bio-fsync属性是否为0

更换主服务器

在主服务器A,从服务器B,A挂了的场景下。


法一:另寻新主。晋升C为主服务器。
作法:B进行一次SAVE,而后将快照交给C,C启动redis,而后B改设为C的从。

法二:本人作主。B本人作为主服务器,再创立新的从服务器C。(redis sentinel就是监听故障,晋升从为主)