长久化
- 快照(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-size
和auto-aof-rewrite-percentage
来主动执行重写。
复制
主从同步
主用于写,从用于读。master的rdb文件先交给slave去写入本人内存,再将同步期间master收到的写命令放入缓冲区,rdb复原完后,会再次接管master缓冲区传来的写命令。而后master都将aof定期交给slave实现同步。客户端写入master,读取拜访slave。
相干配置:
- 主:
dir
和dbfilename
必须配好。 - 从:
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就是监听故障,晋升从为主)