RDB:
描述:快照存储,具体是将Redis某一时刻的内存数据保存到硬盘文件中,默认保存文件名是dump.rdb。Redis服务启动时,会重新加载dump。rdb中的和数据到内存中恢复数据。
开启方式:
(1)save,save是同步的,服务器会阻塞save命令之后的其他客户端的请求;
(2)bgsave,bgsave是异步的,客户端发出bgsave请求时,Redis服务器主进程会forks一个子进程来同步数据,此时forks子进程是同步的,完毕后保存到rdb文件中,子进程退出。
(3)服务器配置自动触发,达到指定配置的条件就可以触发RDB持久化,比如设置多少秒内多少个key有写操作。
优点:RDB持久化方式恢复数据更快;适合数据备份;异步持久化,对性能影响较小。
缺点:RDB容易丢失某个时段的数据;bgsave在forks子进程时,如果数据量过大,也会发生阻塞;forks子进程耗费内存。
AOF:
描述:AOF持久化会记录客户端对服务器的每一次写操作命令,并将这些命令存储到aof文件中。Redis重启时,会加载并运行aof文件中的命令,达到数据恢复的目的。Redis默认不开启AOF。
写入策略:
(1)appendfsync always,客户端的每一次写操作都保存到aof文件中,但是比较耗费IO,较慢。
(2)appendfsync everysec,服务器每秒写入一次aof文件,因此,最多丢失1秒的数据。
(3)appendfsync no,服务器不负责写入aof,而是由操作系统来处理什么时候写入aof文件。不推荐使用。
重写方式:
(1)no-appendfsync-on-rewrite no,默认不开启重写,因为每次fsync都重写会影响性能。
(2)bgrewriteaof,同样也是forks一个子进程异步重写aof文件。
优点:丢失数据较少;aof只是追加日志,速度更快。
缺点:恢复数据比较慢;aof日志文件比较大。
综合:当两种持久化方式都开启时,Redis优先选择AOF日志来恢复数据,因为AOF保存的文件更加完整。