Redis中rdb文件键key过期了如何恢复并导入

Redis中rdb文件键key过期了如何恢复并导入

💡 原文中文,约3200字,阅读约需8分钟。
📝

内容提要

本文介绍了如何在Docker容器中恢复Redis数据。首先,将Redis数据导出为JSON格式,然后编写Python脚本生成相应的Redis命令,最后将这些命令导入到Docker中的Redis容器以恢复数据。

🔎

延伸解读

过期键恢复的挑战

文章指出,当Redis中的键已过期时,直接导入RDB备份文件可能无法恢复数据,因为这些键在导入时会被视为已过期而自动删除。作者在恢复busuanzi数据时遇到了此问题,因此采用了将RDB转换为JSON再生成Redis命令的方法,以绕过过期机制,重新插入数据。

转换工具与平台选择

作者使用HDT3213/rdb工具将RDB文件转换为JSON格式,并强调在Linux服务器上执行转换,因为Mac版工具可能无法正常工作。具体步骤包括下载rdb-linux-amd64、重命名为rdb并放入/usr/local/bin目录,然后运行命令生成dump.json。这为后续处理提供了结构化数据。

Python脚本生成导入命令

通过Python脚本读取JSON文件,根据数据类型(string、list、set、hash、zset、stream)生成对应的Redis命令,如SET、RPUSH、SADD等,并先执行DEL删除原有键。生成的命令写入redis_commands.txt,便于批量导入。这种方法能灵活处理各种数据结构,并避免过期键的影响。

Docker容器内导入操作

将生成的redis_commands.txt复制到Docker容器内的/tmp目录,并授予644权限,然后通过redis-cli执行文件中的命令来恢复数据。这要求容器内已安装redis-cli,且路径正确。整个过程在Docker环境中完成,适用于自搭建服务的恢复场景。

❓

Q&A

如何将Redis的rdb文件转换为json格式?

使用rdb工具,执行命令:rdb -c json -o dump.json dump.rdb。

在Docker中如何恢复Redis数据?

将生成的Redis命令写入redis_commands.txt文件,并通过redis-cli执行导入命令。

如何编写Python脚本来生成Redis命令?

读取JSON文件,根据不同类型生成对应的Redis命令,并写入redis_commands.txt文件。

在Linux服务器上如何安装rdb工具?

下载rdb-linux-amd64并重命名为rdb,放入/usr/local/bin目录。

如何处理Redis中键过期的问题?

通过导出数据为JSON格式并重新导入来恢复过期的键。

如何在Docker容器中授予文件权限?

使用命令:docker exec -it <容器名> /bin/sh chmod 644 /tmp/redis_commands.txt。

🏷️

标签

➡️

继续阅读