Code前端首页关于Code前端联系我们

Redis持久化策略 RDB还是AOF,该选择哪一种?

terry 2年前 (2023-09-26) 阅读数 45 #数据库

Redis 是一种高级键值数据库。数据可以存储并支持多种数据类型。有字符串、链表、数组和排序数组。它支持在服务器端计算集合的并、交、补(差),还支持各种排序功能。所以Redis也可以认为是一个数据结构服务器。

为了保证效率,Redis会对数据进行缓存。 Redis定期将更新的数据写入磁盘或将编辑操作写入其他记录文件,以保证数据的持久性。

Redis是一个支持持久化的内存数据库。它可以将内存中的数据同步到磁盘上进行持久化。

Redis持久化策略:2种

  • RDB:Snapshot格式,数据以dump文件的形式直接保存到内存,定期保存,保存策略。
  • AOF:将修改Redis服务器的所有命令保存到一个文件中,是命令的集合。 Redis 默认为快照 RDB 持久化状态

当 Redis 重启时,会优先使用 AOF 文件来恢复数据集,因为使用 AOF 文件存储的数据集通常比使用 RDB 文件存储的数据集更完整。您甚至可以关闭持久性,以便仅在服务器运行时保存数据。

RDB持久化

默认情况下,Redis以快照“RDB”、二进制文件、dump.rdb的形式将数据存储在磁盘上

工作原理简单介绍:当Redis需要继续运行时, Redis 获取一个子进程,子进程将数据写入磁盘上的临时 RDB 文件。当子进程写完临时文件后,原来的RDB就被覆盖了。这样做的优点是可以在您键入时进行复制。

默认情况下,Redis是快照RDB持久化方式。内存中的数据以快照的形式写入二进制文件。默认文件名为 dump.rdb。当然,我们也可以手动执行 save 或 bgsave 函数(异步)来拍摄快照。

Redis.conf 配置:默认为以下配置

save 900 1 
save 300 10
save 60 10000
复制代码
  • 如果更改多个键,快照记录将在 900 秒内开始。
  • 300 秒内,如果修改了超过 10 个按键,则快照将开始快照记录。
  • 如果 1 分钟内更改了 10,000 个密钥,将开始快照记录。

RDB优点:

这种文件非常适合备份:例如过去24小时内每小时备份一次RDB文件,每月每天备份一个RDB文件。 。这样,即使遇到问题,您也可以随时将数据集恢复到另一个版本。 RDB非常适合灾难恢复(disaster recovery)。

RDB 的缺点:

如果您想在服务器发生故障时最大程度地减少数据丢失,RDB 不适合您。虽然Redis允许设置不同的保存点来控制RDB文件的保存频率,但这并不是一个容易的操作,因为RDB文件必须存储整个数据集的状态。因此您可以至少每五分钟保存一次 RDB 文件。在这种情况下,如果中断几分钟,您可能会丢失数据。

AOF 持久化

使用 AOF 来获得持久化。每个写命令都通过 write 函数追加到appendonly.aof 文件中。配置方法:启用 AOF 持久化方法

Redis.conf 配置

appendfsync yes   
appendfsync always     #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec   #每秒钟同步一次,该策略为AOF的缺省策略。
复制代码

AOF 在配置文件中开启即可实现完全持久化(默认为否)。当使用appendonly yes启用AOF时,每当Redis执行修改数据的命令时,都会将其追加到AOF文件中。当Redis重新启动时,AOF文件会被读取并“重播”,以恢复Redis关闭前的最后一刻。

AOF 的优点

AOF 持久化使 Redis 更加耐用:您可以定义不同的 fsync 策略,例如不进行 fsync、每秒进行一次 fsync 或每次写入 fsync 命令。 AOF 的默认策略是每秒 fsync 一次。在这种配置下,Redis仍然可以保持良好的性能,即使发生故障,也只丢失一秒钟的数据(fsync是在后台线程中执行的,因此主线程可以继续处理命令请求的辛苦工作)。

AOF的缺点

同一数据集的AOF文件通常比RDB文件大。根据所使用的 fsync 策略,AOF 可能比 RDB 慢。正常情况下,fsync每秒的吞吐量还是很高的,关闭fsync可以让AOF和RDB一样快,即使在重负载的情况下也是如此。然而,RDB 在处理大量写入负载时可以提供有保证的最大延迟。

这两者的区别

  • RDB持久化是指在一定时间内将内存中数据集的快照写入磁盘。实际操作过程是创建一个子进程,首先将数据集写入临时文件。写入成功后,会覆盖之前的文件,并以二进制压缩方式保存。
  • AOF持久化以日志的形式记录服务器处理的所有写入和删除操作。查询操作不会保存,而是保存为文本。您可以打开该文件查看详细的操作信息。

RDB 和 AOF,该使用哪一个?

如果您非常关心数据,但仍然可以承受在几分钟内丢失数据的损失,那么您可以使用 RDB 持久性。 AOF 将 Redis 执行的所有命令追加到磁盘。处理大量写入会降低 Redis 性能。不知道你能否接受。数据库备份和灾难恢复:定期创建RDB快照对于数据库备份非常方便,并且RDB可以比AOF更快地恢复数据集。

Redis 支持同时打开 RDB 和 AOF。系统重启后,Redis优先使用AOF恢复数据,以最大程度地减少数据丢失。

作者:Innocence
来源:掘金

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门