目录
1 持久化选项
两种持久化方法:一种是快照-----snapshotting;一种是只追加文件------append-only file(AOF)
1> 快照 将某一时刻的所有数据都写入到硬盘中;
2> AOF 在执行写命令时,将被执行的命令复制到硬盘中;
1.1 快照持久化
通过定义可知,创建某个时刻数据的副本到硬盘中。 如果Redis、系统、硬件出现故障,则系统会丢失最近一次备份成功之后的所有数据。所以,快照持久化适用于丢失一部分数据不会造成问题的场景。
常用的快照持久化方法:
1> 客户端通过向Redis发送BGSAVE命令创建快照:除WINDOWS外,会创建一个fork子进程,负责将快照写入硬盘,父进程继续接受命令写入;
2> 客户端还可以通过向Redis发送SAVE命令创建快照:创建完毕之前不接受其他命令写入;
3> 如果配置了 SAVE 60 10000命令时,从最近创建的快照时间节点算起,60秒内写入的次数达到10000次时就会执行BGSAVE创建快照
4> 当Redis接受到服务器SHUTDOWN指令时,或者接收到标准TRIM信号时,会执行SAVE命令,阻塞客户端,即不执行客户端的任何命令,快照创建完成后关闭服务器;
5> 两个Redis服务器连接时,如果接收到另一个服务器的同步命令时,主服务器未执行BGSAVE或者没有刚执行完的BGSAVE,则会执行一次BGSAVE创建快照。
1.2 AOF持久化
1> AOF持久化会将被执行的命令写入到文件的末尾,以记录数据的变化。
appendsync配置选项对AOF文件的同步频率的影响如下
always:每个redis写命令都要同步硬盘
everysecond: 每秒执行一次同步,显示的将多个写命令写入到硬盘中
no: 让操作系统来决定合适同步
上述的同步频率,always 对硬盘写入的性能考验太大,一般使用每秒执行一次同步,no选项有两个问题:一是系统崩溃,丢失的不定量数据无法预估,硬盘写入速度不够时,当缓冲区等待写入的数据填满时,写入操作会变慢。
2> 重写/压缩AOF
由于每秒同步写入命令,AOF文件的SIZE会变得很大,有可能会用完硬盘空间,导致宕机。同时体积大的时候还原操作时间会非常长,因此有必要对对文件进行重写。
Redis提供BGREWRITEAOF命令重写文件,移除冗余命令实现文件的压缩。常用参数如下
auto-aof-rewrite-percentage 用来判断比上一次同步时体积的倍数
auto-aof-rewrite-min-size 设置重写的最小文件大小比如 auto-aof-rewrite-min-size 64mb
数据持久化非常重要,除此之外还需要对文件进行备份。
2 复制
复制可以让其他服务器有一个不断更新的副本,用来处理客户端的请求。