本文是关于redis的两种持久性方法的优缺点。我觉得边肖很实用,就和大家分享一下作为参考。让我们跟着边肖看一看。
Redis:坚持的两种方式
RDB持久性可以在指定的时间间隔内生成数据集的时间点快照。
AOF持久地记录服务器执行的所有写操作命令,当服务器启动时,通过重新执行这些命令来恢复数据集。所有的AOF文件都以redis协议的格式保存,新的命令将被附加到文件的末尾。redis还可以在后台重写AOF文件,文件大小不会超过保存数据集状态所需的实际大小。
Redis也可以同时使用AOF持久性和RDB持久性。在这种情况下,当redis重新启动时,它将使用AOF文件以有限的方式恢复数据集,因为AOF文件保存的数据集通常比RDB文件保存的数据集更完整。
RDB的优势
1.RDB是一个非常紧凑的文件,它保存了Redis在某个时间点的数据集。这种文件非常适合备份:例如,您可以在过去24小时内每小时备份一个RDB文件,也可以在每个月的每一天备份一个RDB文件。这样,即使遇到问题,也可以随时将数据集还原到不同的版本。
2.RDB非常适合灾难恢复:它只有一个文件,内容非常紧凑,所以可以传输到其他数据中心或亚马逊S3(加密后)。
3.RDB可以最大化Redis的性能:保存RDB文件时,父进程唯一要做的就是分叉出一个子进程,然后这个子进程将处理所有下一步的保存工作,而父进程不需要执行任何磁盘I/O操作。
4.RDB恢复大型数据集的速度比AOF快。
RDB的缺点
1.如果您需要尽量避免在服务器出现故障时丢失数据,那么RDB不适合您。虽然Redis允许您设置不同的保存点来控制保存RDB文件的频率,但这并不是一个容易的操作,因为RDB文件需要保存整个数据集的状态。因此,您可以至少每5分钟保存一次RDB文件。在这种情况下,如果停机,您可能会丢失几分钟的数据。
每次保存RDB时,Redis都必须分叉出一个子过程,这个子过程将执行实际的持久性工作。当数据集庞大时,fork()可能非常耗时,导致服务器在某毫秒内停止处理客户端;如果数据集很大,CPU时间很紧,停止时间甚至可能长达一整秒。虽然AOF重写也需要fork(),但无论AOF重写的执行间隔多长,都不会丢失数据持久性。
AOF的优势
使用AOF持久性将使Redis更加持久:您可以设置不同的fsync策略,如无fsync、每秒一次fsync或每次执行写命令时fsync。AOF的默认策略是每秒一次fsync。在这种配置下,Redis仍然可以保持良好的性能,即使发生宕机,最多也只会丢失一秒钟的数据(fsync将在后台线程中执行,因此主线程可以继续努力处理命令请求)。
AOF文件是一个仅附加的日志文件,因此不需要寻找来写入AOF文件。即使日志由于某些原因包含不完整的命令(如写入时磁盘已满、写入时停止等)。),redis-check-aof工具可以轻松解决这个问题。
当AOF文件的卷变得太大时,Redis可以在后台自动重写AOF:重写的新AOF文件包含恢复当前数据集所需的最小命令集。整个重写操作是绝对安全的,因为Redis在创建新的AOF文件的过程中会继续向现有的AOF文件追加命令,即使重写过程停止,现有的AOF文件也不会丢失。一旦创建了新的AOF文件,Redis将从旧的AOF文件切换到新的AOF文件,并开始追加新的AOF文件。
AOF文件将所有对数据库的写操作有序地保留下来,这些写操作是以Redis协议的格式存储的,所以AOF文件的内容非常容易被人们读取,也很容易解析文件。导出AOF文件也很简单:例如,如果您不小心执行了Flushal命令,但只要AOF文件没有被重写,只需停止服务器,删除AOF文件末尾的Flushal命令,然后重新启动Redis,将数据集恢复到Flushal执行之前的状态。
AOF的缺点
对于同一数据集,AOF文件的容量通常大于RDB文件。
根据fsync使用的策略,AOF可能比RDB慢。一般来说,每秒fs
ync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。
AOF 在过去曾经发生过这样的 bug : 因为个别命令的原因,导致 AOF 文件在重新载入时,无法将数据集恢复成保存时的原样。 (举个例子,阻塞命令 BRPOPLPUSH 就曾经引起过这样的 bug 。) 测试套件里为这种情况添加了测试: 它们会自动生成随机的、复杂的数据集, 并通过重新载入这些数据来确保一切正常。 虽然这种 bug 在 AOF 文件中并不常见, 但是对比来说, RDB 几乎是不可能出现这种 bug 的.
感谢各位的阅读!关于“redis两种持久化方式的优缺点是什么”这篇文章就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/107002.html