Redis持久化数据到磁盘上

Redis数据驻留在内存中,这使得写入和读取数据的速度非常快,但是在服务器崩溃的情况下,您将丢失内存中的所有内容,对于某些应用程序,在崩溃的情况下可以丢失这些数据,而对于其他应用程序应用,请务必在服务器重启后重新加载Redis数据。

在本文中,我们将讨论Redis提供的两个持久性选项:

快照

在以下情况下,Redis将数据快照存储到磁盘上的dump.rdb文件中:

  1. 每分钟更改1000个密钥
  2. 如果更改了10个按键,则每5分钟显示
  3. 如果更改了1个密钥,则每15分钟

因此,如果您正在做繁重的工作并更改许多键,则每分钟将为您生成一个快照,以防万一您所做的更改影响的key不是那么多,则每5分钟产生一个快照,如果实际上更改影响的key还不是那么多,则每15分钟将会生成一个快照。

万一Redis无法创建数据快照,它将挂起并停止接受任何新写入,并给您一个错误,以便您知道出了点问题。

要在损坏时备份数据,您可以每隔x间隔将rdb文件传输到Amazon S3。

您可以更改拍摄这些快照的频率,还可以使用“保存”命令在运行时手动创建快照。

仅追加文件

这的工作原理有所不同,每次将命令发送到Redis时,它都会存储在一个文件中,以后您可以使用该文件来重建整个数据集。

一段时间后,此文件可能会变得非常大,因为它包含每个键的全部历史记录,因为该Redis会不时地重写该文件,以使其尽可能小,因此它开始存储文件的整个历史记录,而不是存储它以及该键的最新状态。

// instead of
increment counter
increment counter
increment counter

// it stores
set counter 3

您可以根据当前文件的大小以及自最近一次重写以来的允许增加百分比来配置这种重写发生的频率。

即使Redis发送了要添加到文件的新命令,操作系统通常也会将这些命令保留在缓冲区中,并每隔X秒钟刷新一次该缓冲区,这意味着如果这些命令仍在缓冲区中并且未存储到存储时发生了某些情况到磁盘上却丢失了。为此,Redis会强制缓冲区每1秒刷新一次,这样您就不会丢失任何内容。

但是,您可以将Redis配置为对每个命令强制刷新,而不仅仅是每秒执行一次刷新,但这会使每个命令的Redis响应速度非常慢,不建议这样做,但这是最安全的。

服务器重启后会发生什么

Redis将从备份文件中加载数据,并将其放入内存。如果同时使用快照文件和仅附加文件,则Redis将使用AOF(Append-only file),因为它保证具有最新数据。

我应该使用哪种持久性策略?

默认情况下,Redis配置为使用快照,只有在可以丢失几分钟的数据的情况下才可以继续使用快照,但是如果您确实需要确保没有数据丢失,则可以使用AOF,因此可以同时使用两种策略您将使用快照策略对数据进行干净备份,并且还有一个仅附加文件。

每日一句话科技资讯 | 20200708
每日一句话科技资讯 | 20200707