Redis 持久化管理

RedisBeginner
立即练习

介绍

在本实验中,我们将探索 Redis 持久化管理,重点关注如何配置和管理数据持久性。我们将首先使用 CONFIG SET 命令配置 Redis 数据库 (RDB) 持久化,该命令允许我们创建 Redis 数据的时点快照。我们还将介绍启用追加文件 (AOF) 持久化、手动保存数据、检查最后保存时间以及重写 AOF 文件以优化其大小。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 92%。获得了学习者 95% 的好评率。

配置 RDB 持久化

在此步骤中,我们将配置 Redis 数据库 (RDB) 持久化。RDB 在指定的时间间隔创建数据集的时点快照。我们将使用 CONFIG SET 命令动态修改 Redis 服务器配置,而无需重启服务器。

首先,使用 Redis 命令行界面 (redis-cli) 连接到 Redis 服务器。打开你的终端并运行以下命令:

redis-cli

你将看到 redis-cli 提示符,它看起来像 127.0.0.1:6379>

让我们使用 CONFIG GET 命令检查当前的 RDB 保存配置。

CONFIG GET save

默认输出显示了几个保存点:

1) "save"
2) "900 1 300 10 60 10000"

这意味着如果 900 秒内至少有 1 个键发生更改,或者 300 秒内至少有 10 个键发生更改,或者 60 秒内至少有 10000 个键发生更改,Redis 就会保存数据库。

现在,让我们将其修改为单个保存点:如果 60 秒内至少有 1 个键发生更改,则保存数据库。

CONFIG SET save "60 1"

你应该看到 OK 作为输出,确认更改。

OK

验证配置是否已更新:

CONFIG GET save

输出现在应该反映我们的新设置:

1) "save"
2) "60 1"

接下来,我们将配置 Redis 存储其 RDB 文件 (dump.rdb) 的目录。首先,退出 redis-cli 以运行一些 shell 命令。

exit

现在,创建一个新目录并设置正确的权限。Redis 服务器以 redis 用户身份运行,因此它需要目录的所有权才能写入文件。

sudo mkdir -p /var/lib/redis/labex_data
sudo chown redis:redis /var/lib/redis/labex_data

重新连接到 Redis 并将 dir 配置设置为新路径。

redis-cli
CONFIG SET dir /var/lib/redis/labex_data

你应该看到 OK。验证更改:

CONFIG GET dir

输出将确认新目录:

1) "dir"
2) "/var/lib/redis/labex_data"

现在 Redis 将把其持久化文件保存到 /var/lib/redis/labex_data 目录。

为确保你的进度已正确保存和验证,请退出 redis-cli 会话。

exit

启用 AOF 持久化

在此步骤中,我们将启用追加文件 (AOF) 持久化。AOF 会记录服务器收到的每一个写操作。这比 RDB 提供了更好的持久性,因为数据写入日志的频率更高。

首先,连接到 Redis 服务器:

redis-cli

使用 CONFIG GET 命令检查 AOF 当前是否已启用。

CONFIG GET appendonly

默认情况下,它是禁用的:

1) "appendonly"
2) "no"

要启用 AOF,请将 appendonly 参数设置为 yes

CONFIG SET appendonly yes

你将看到 OK 作为输出。现在,验证更改:

CONFIG GET appendonly

输出应确认 AOF 现在已启用:

1) "appendonly"
2) "yes"

启用 AOF 后,Redis 会将所有写命令记录到位于我们上一步配置的目录 (/var/lib/redis/labex_data) 中的 appendonly.aof 文件。

让我们添加一些数据来观察 AOF 的运行。此 SET 命令将被写入 AOF 文件。

SET mykey "myvalue"

你应该看到以下输出:

OK

为确保你的进度已正确保存和验证,请退出 redis-cli 会话。

exit

使用 SAVE 命令手动保存数据

在此步骤中,你将学习如何使用 SAVE 命令手动触发 RDB 快照。虽然 Redis 会根据你的配置自动保存数据,但手动保存对于创建备份或确保数据在计划维护事件之前已持久化非常有用。

首先,连接到 Redis 服务器:

redis-cli

让我们添加一些新数据,以便有内容可以保存。

SET anotherkey "anothervalue"

你应该看到以下输出:

OK

现在,使用 SAVE 命令手动触发保存到磁盘。

SAVE

SAVE 命令执行同步保存,这意味着它将阻塞所有其他客户端请求,直到保存操作完成。对于大型数据库,这可能会导致明显的停顿。

保存完成后,你将看到 OK

OK

这证实了 Redis 已成功将当前数据集写入 /var/lib/redis/labex_data 目录中的 dump.rdb 文件。对于生产环境,通常更推荐使用非阻塞的 BGSAVE 命令。

为确保你的进度已正确保存和验证,请退出 redis-cli 会话。

exit

使用 LASTSAVE 查看最后保存时间

在此步骤中,我们将使用 LASTSAVE 命令来检查最后一次成功 RDB 保存的时间戳。此命令对于监控和验证你的持久化策略是否按预期工作非常有用。

首先,连接到 Redis 服务器:

redis-cli

要获取最后一次成功保存的时间戳,请运行 LASTSAVE 命令。

LASTSAVE

该命令返回一个 Unix 时间戳,即自 1970 年 1 月 1 日 (UTC) 起经过的秒数。输出看起来会像这样,但具体数字对你来说会有所不同:

(integer) 1678886400

此时间戳对应于你在上一步执行 SAVE 命令的时间。

让我们看看时间戳的更新。我们将添加更多数据,执行另一次手动保存,然后再次检查最后保存时间。

SET anotherkey2 "anothervalue2"
SAVE
LASTSAVE

运行这些命令后,第二次 LASTSAVE 命令将返回一个新的、更近的时间戳,确认已创建新的快照。

为确保你的进度已正确保存和验证,请退出 redis-cli 会话。

exit

使用 BGREWRITEAOF 重写 AOF 文件

在此步骤中,你将学习如何使用 BGREWRITEAOF 命令重写 AOF 文件。随着你的应用程序运行,AOF 文件会越来越大。它可能包含许多冗余命令(例如,多次递增计数器)。重写 AOF 文件会创建一个新的、紧凑的文件,其中包含重建当前数据集所需的最小命令集,这可以显著提高 Redis 的启动时间。

首先,连接到 Redis 服务器:

redis-cli

为了演示重写的效果,让我们执行一些操作,这些操作会向 AOF 日志添加不必要的命令。

SET key1 "value1"
SET key2 "value2"
DEL key1
SET key3 "value3"

AOF 文件现在包含四个命令。但是,要重建当前状态,我们只需要设置 key2key3。与 key1 相关的命令是冗余的。

现在,触发 AOF 文件的后台重写。

BGREWRITEAOF

你将看到一条确认消息,表明进程已启动:

Background append only file rewriting started

Redis 在后台执行此操作,因此不会阻塞客户端请求。它会创建一个临时的 AOF 文件,以最高效的方式将当前数据集写入其中,然后原子地用新文件替换旧的 AOF 文件。

重写完成后,appendonly.aof 文件将变小,并且只包含设置 key2key3 的命令。

为确保你的进度已正确保存和验证,请退出 redis-cli 会话。

exit

总结

在本实验中,你学习了 Redis 持久化管理的基础知识。你通过 CONFIG SET 练习了配置 RDB 和 AOF 持久化机制。你还学习了如何使用 SAVE 命令执行手动数据保存,使用 LASTSAVE 检查最后保存时间,以及使用 BGREWRITEAOF 优化 AOF 文件。这些技能对于确保数据持久性和维护健康的 Redis 实例至关重要。