Redis持久化策略 RDB还是AOF,该选择哪一种?
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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。