直接用 rdb 命令加 --key 参数即可离线提取 rdb 数据,无需启动 redis 服务;--key 支持 python 风格正则(如 "user:123.*"),需引号包裹防 shell 解析;--not-key 可排除键;justkeyvals 模式输出 tab 分隔纯文本,轻量高效;--type 可按数据类型过滤,提升大文件解析速度;注意 rdb 版本兼容性及压缩格式依赖(如 python-lzf)。

直接用 rdb 命令加 --key 参数就能提取,不需要写代码或起Redis服务
很多用户误以为必须启动 Redis 实例、用 SCAN 或 KEYS 才能捞数据,其实 RDB 是完整快照,rdb 工具在离线状态下就能精准匹配并导出——只要正则写对,秒级完成。
关键点在于:--key 接收的是 Python 风格正则表达式,不是 glob 通配符。比如想提所有 user:123 开头的键,得写 --key "user:123.*",而不是 --key "user:123*"。
-
--key和--not-key可同时使用,例如排除测试键:rdb -c json --key "user:.*" --not-key "user:test.*" dump.rdb - 正则中若含特殊字符(如
.、+、?),必须转义或包在引号里,否则 shell 会提前解析 - 不加引号时,bash 可能将
.*展开为当前目录文件,导致命令报错ERROR: No such file or directory
rdb -c justkeyvals 比 -c json 更轻量,适合只取值不关心结构的场景
如果你只需要键值对列表(比如导入到其他数据库、做简单统计),justkeyvals 输出是 tab 分隔的纯文本:key\tvalue,没有 JSON 的嵌套和转义开销,解析更快、体积更小。
对比示例:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
rdb -c json --key "config:.*" dump.rdb
# 输出:{"database":0,"type":"string","key":"config:timeout","value":"30"}...
rdb -c justkeyvals --key "config:.*" dump.rdb # 输出:config:timeout 30
- 当 value 是复杂结构(如哈希、集合)时,
justkeyvals会把整个序列化后的内容当字符串输出,不解析内部字段 - 如果后续要进 CSV 或数据库,
justkeyvals+awk或cut处理比解析 JSON 更快 -
justkeyvals不支持--db多库筛选,它默认只处理第一个非空数据库;如需多库,请改用json模式再过滤
按数据类型进一步过滤:用 --type 缩小范围,避免误提大体积结构
RDB 文件里一个 sortedset 可能占几 MB,而你只想看 string 类型的配置项。加 --type string 能跳过其他类型解析,显著提速,尤其在大 RDB(>1GB)上效果明显。
- 可用类型值:
string、hash、set、sortedset、list—— 注意大小写敏感,不能写成String或SET - 可多次使用
--type,例如同时提字符串和哈希:rdb -c json --type string --type hash --key "feature:.*" dump.rdb - 如果指定了
--type但该类型在匹配的 key 中不存在,工具不会报错,只是对应输出为空 - 注意:某些 Redis 模块(如 RedisJSON、RediSearch)生成的类型无法被
rdbtools识别,会被跳过,此时日志里会出现Unknown object type提示
导出前务必确认 RDB 版本兼容性,老版本工具解析新 RDB 会静默丢数据
rdbtools 对 Redis 7.0+ 新增的 stream 压缩格式、module 数据支持有限。如果你用的是较新 Redis(如 7.2),但装的是旧版 rdbtools(比如 PyPI 上 0.1.15),--command json 可能跳过 stream 键、或把 module 数据解析成乱码,且不报错。
- 检查方法:运行
rdb --help,看是否列出stream在--type支持列表中;未列出即不支持 - 稳妥做法:从 GitHub 主分支安装最新版:
pip install git+https://github.com/sripathikrishnan/redis-rdb-tools.git - 验证是否完整:先用
rdb -c justkeys dump.rdb | wc -l统计总 key 数,再用redis-cli --rdb dump.rdb keys '*' | wc -l(需 Redis 7.0+)对比,差异大说明解析不全
真正容易被忽略的是:RDB 文件本身可能被压缩(lz4 或 zstd),而默认 rdbtools 只支持 lzf。没装 python-lzf 时,工具会降级为逐字节扫描,不仅慢,还可能漏掉部分 key —— 这个依赖不是“可选优化”,而是功能必需。










