Redis持久化
一.RDB
在默认情况下,Redis将数据库快照保存为dump.rdb的二进制文件。
方式:
1.阻塞方式
客户端中执行save命令
2.非阻塞方式
策略
1.自动,按照配置文件中的条件满足就执行bgsave
2.手动,客户端发起save,bgsave命令
优点
1.完全备份,不同时间的数据备份可以做到多版本恢复【需要手动拷贝备份文件,不然会覆盖,只留最新的】
2.紧凑的单一文件,方便网络传输,适合灾难恢复
3.恢复大数据集的速度比AOF快
缺点
1.会丢失最近写入,修改未能持久化的数据
2.fork过程非常耗时,会造成毫秒级不能响应客户端请求
二.AOF【Append only file】
采用以追加的方式保存。记录所有的写操作命令,在服务器启动的时候使用这些命令可以还原数据库。调整AOF持久化策略,可以在服务出现故障时不丢失任何数据,也可以丢失一秒的数据。相对于RDB损失小得多。
默认文件appendonly.aof
1.AOF写入策略
AOF方式不能保证数据绝对不丢失,Redis不会直接将内容写入磁盘,而是现将内容放入一个内存缓冲区中,等缓冲区满了或用户执行了写磁盘操作后才会将存储在内存缓冲区的数据写入磁盘中,未写入磁盘之前,数据可能丢失。
2.AOF写入磁盘机制
设置appendfsync选项,可以为:always,everysec或no
1.always
服务器没写入一个命令,就调用一次fdatasync,将内存缓冲区的命令写入硬盘,这种模式不会丢失数据。
2.everysec【默认】
服务器每一秒调用一次fdatasync,将内存缓冲区中的命令写入硬盘,这种模式最多只会丢失一秒钟的数据。
3.no
服务器不主动调用fdatasyno,由操作系统决定何时将内存缓冲区的命令写入硬盘,这种模式下,丢失的数据是不确定的。
备注:always执行速度慢,everysec和no都执行很快!
3.AOF重写机制
当AOF文件过大时会合并重复操作,AOF会使用尽可能少的命令来记录。
启用AOF重写机制需配置:
auto-aof-rewrite-min-size:重写触发执行的aof文件大小,默认64M
auto-aof-rewrite-percentage:AOF文件增量大于此百分比时启用重写机制,默认为100,表示到增量等于之前的量试启用重写机制。
备注:一定要注意FLUSHALL操作命令,执行FLUSHALL会清空当前实例的所有数据。只要AOF未被重写,停止服务移除AOF文件末尾FLUSHALL命令,重启Redis就可以恢复到FLUSHALL执行之前的状态。