Redis 如何进行存储持久化的两种方式RDB和AOF

RDB持久化可以在指定的时间间隔内生成数据集的时间点快照。

AOF持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。新命令以redis协议的格式追加在文件末尾。

Redis支持同时使用AOF和RDB持久化。
在这种情况下,当redis重启时,它会优先使用AOF文件来还原数据库。

RDB文件非常紧凑,保存了redis在某个时间点上的数据集。这种文件非常适合用于备份、灾备。RDB在恢复大数据集时的速度比AOF的恢复速度要快。
因为RDB文件需要保存整个数据集的状态,一旦发生故障停机,可能丢失几分钟的数据。redis在每次保存数据时fork出一个子进程,由它进行持久化工作。在数据集比较庞大时,fork可能会非常耗时,造成服务器在几毫秒内停止处理客户端,虽然AOF重写也需要进行fork,但是无论AOF重写的执行时间间隔有多长,数据的耐久性都不会有任何损失。

AOF 的优点:
AOF持久化会让redis变得非常耐久(durable),可以设置不同的fsync策略,比如每秒一次fsync,或者每次执行写入命令时fsync。AOF默认的策略为每秒钟fsync一次,(最多丢失一秒的数据)
追加的方式写入
Redis可以在AOF文件体积变得过大时,自动在后台对文件重写。
重写后的文件包含了恢复数据库所需要的最少命令集合。创建新文件进行重写,在此过程中,追加仍在老文件内进行。重写完毕后,切换到新文件进行追加。
AOF文件便于阅读,以redis协议格式保存。

缺点
AOF文件的体积通常要大于RDB文件的体积。
根据所使用的fsync策略,AOF的速度可能会慢于RDB。每秒fsync的性能仍然非常高,是最佳推荐。关闭fsync可以让AOF的速度和RDB一样快。

可以理解AOF相当于oracle的归档日志

RDB快照:
在默认情况下,redis将数据库快照保存在dump.Rdb的二进制文件中,
Save 60 1000 60s内至少有1000个键被改动时,自动保存一次数据集

写时复制copy-on-write
耐久能力 (full durability)
Appendonly yes 打开AOF功能
从现在开始每当redis执行一个改变数据集的命令时,这个命令就会被追加到AOF文件的末尾。

AOF重写:
比如计数器调用了100次INCR,为了保存当前值,AOF文件中需要使用100条记录entry。然而实际上,只需要使用一条set 命令就足够了。
因此,redis支持在线重建AOF文件,BGrewriteAOF,重建后的文件包含当前数据集所需的最少命令。

AOF损坏:
Redis-check-aof对文件进行修复

父进程 新的命令在缓存的同时仍然追加在原来的AOF文件中,子进程 新建一个AOF文件,当重写完毕后,通知父进程,将缓存的数据追加在新的AOF文件末尾,然后文件替换。

Config set save “” 关闭RDB功能
BGsave 和BGrewriteAOF 不会同时进行,防止后台进程同时对磁盘进行大量的IO操作。

欢迎关注个人微信公众号“一森咖记”
image.png

猜你喜欢

转载自blog.csdn.net/db_murphy/article/details/109799976