RDB:Redis DataBase
在指定时间间隔内将内存中的数据集快照写入磁盘; 实际操作使 fork一个子进程,先将数据集写入到一个临时文件中,再用临时文件替换之前的文件,文件是用二进制压缩存储;
优点 :
1) 整个 Redis 只有一个 dump.rdb 文件,方便持久化,方便备份;
2) 因为是 fork出一个子进程处理这些 I/O操作,主进程仍然继续处理命令,不进行这些 I/O操作,所以性能最大化,保证了Redis的高性能;
缺点:
数据安全性低, RDB持久化是每间隔一段时间进行的,若 redis发生故障,那么会出现最近一次持久化后到发生故障中间这段时间的数据丢失,所以这种方式适合于对数据要求不严谨的时候;
AOF: Append Only File
以日志形式记录 Redis的每一个 写,删除操作,查询操作不会记录,这些操作会记录在 AOF文件中,打开文件可以看到这些详细的操作记录;
优点:
1) 数据安全; 因为 Redis中提供了三种同步策略,每秒同步/每修改同步/不同步;假如每秒同步,即使发生故障,也只是丢失这一秒数据;每修改同步就相当于同步持久化,数据一修改就会立马进入到磁盘中;
2)因为操作使通过 append方式记录在 AOF文件中的,即使系统宕机也不会破坏已经存在的内容,即使 AOF文件出现损坏,也可以通过 Redis-check-aof 工具修复数据的一致性;
3) AOF机制的 rewrite模式,定期对 AOF文件重写,比如第一次操作修改一个值 为100,最后一次修改同一个值的操作,改值为 200,那么重写后会合并为改值 200的操作记录,在不影响结果的情况下压缩操作,将两个记录合并为一个,达到了压缩文件减小文件的目的;
缺点:
AOF文件比RDB文件大,恢复速度慢; AOF数据集大的时候启动慢,运行效率没有 RDB高;
区别
AOF更新频率比RDB高,优先使用AOF还原数据;
AOF比RDB更安全;
RDB的效率比AOF好;
如果Redis中这两种持久化都配置了,会优先加载AOF;