长久化
- 快照(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 就是监听故障,晋升从为主)