redis持久化之RDB和AOF比较

名词解释

1)持久化——将数据从内存保存到磁盘中的动作
2)RDB——在指定时间间隔内,执行指定次数的写操作,将内存数据写入磁盘。
3)AOF——以追加的方式记录redis操作日志的文件,在服务器启动时,重新执行这些命令来还原数据集。

优缺点比较

RDB

1)RDB持久化,是指在指定的时间间隔内,执行指定次数的写操作,将内存中的数据集快照写入磁盘中,它是Redis默认的持久化方式。执行完操作后,在指定目录下会生成一个dump.rdb文件,Redis重启的时候,通过加载dump.rdb文件来恢复数据。
2)存储的是二进制文件,传输较快,适用于备份。
3)redis默认使用RDB持久化方式。
4)主从复制依赖于RDB持久化方式。

缺点是,设置时间间隔的写入操作会使部分操作未达到“快照”要求,没有进行持久化,部分数据丢失。
例如,在配置文件中设置如下参数
save 900 10
900秒内,有十个写操作,才会快照备份,进行持久化。

AOF

1)AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作。可以最大程度保证数据安全。
2)AOF是执行完命令才记录日志。如果先记录日志,命令可能会有语法错误,日志就记录错误的命令,用日志恢复数据时也出错。
3)执行完命令再记录日志,不会阻塞当前的写操作,但会阻塞下一个操作。
4)随着AOF文件增大影响系统性能,AOF的重写机制会将过期、无效、冗余命令合并为一个命令,压缩空间,由后台子进程执行。

缺点是
1)由于要记录所有的写操作,日志记录量很大。
2)如果执行完命令还没有记录日志,数据会丢失。
3)相同的数据集,AOF文件体积大于RDB文件。数据恢复也比较慢。

因此AOF有三种写回策略(appendfsync)。

—always 同步写回,每个子命令执行完,会立即写到日志。
—everysec 每个命令执行完,只是先把日志写到AOF内存缓冲区,每隔一秒同步到磁盘。
—no 只是先把日志写到AOF内存缓冲区,由操作系统去决定何时写入磁盘。

实际选择

1)如果数据不能丢失,RDB和AOF混用
2)如果只作为缓存使用,可以承受几分钟的数据丢失的话,可以只使用RDB。
3)如果只使用AOF,优先使用everysec的写回策略。

你可能感兴趣的:(Redis,redis,数据库)