You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试含TTL的Redis RDB文件:如何忽略过期保留键值?

解决Redis加载RDB时保留过期键的方案

嘿,这个问题我之前调试老系统的时候也碰到过,完全不用改系统时间,给你两个实用的方案:

方案一:直接解析RDB文件(最省心)

不用启动Redis,用专门的RDB解析工具直接提取所有键值,包括已过期的。推荐用rdbtools,这是个Python工具,能直接读取RDB文件的内容:

  1. 先安装工具:
pip install rdbtools python-lzf
  1. 导出所有键的JSON格式(包含过期时间和值):
rdb --command json /path/to/your/old.rdb > all_keys.json
  1. 如果想生成可以直接导入Redis的命令(不带过期时间),用dump模式:
rdb --command dump /path/to/your/old.rdb > restore_commands.txt

之后你可以把restore_commands.txt里的命令导入到Redis,所有键都会保留,不会被自动删除。

方案二:临时Redis实例+键复制(适合需要在Redis里调试的场景)

如果必须把键加载到Redis里调试,可以用这个方法,避免过期键被自动清理:

  1. 启动一个临时Redis实例,用独立端口(比如6380),关闭持久化避免覆盖文件:
redis-server --port 6380 --save "" --appendonly no --maxmemory-policy noeviction
  1. 停止这个临时实例,把你要调试的RDB文件替换成它的dump.rdb(默认路径是当前目录,你可以用--dir参数指定路径):
redis-cli -p 6380 SHUTDOWN
cp /path/to/your/old.rdb ./dump.rdb
  1. 重新启动临时实例:
redis-server --port 6380 --save "" --appendonly no --maxmemory-policy noeviction
  1. 立刻用脚本复制所有键,去掉过期时间(避免后续被删除):
redis-cli -p 6380 --scan | while read key; do
  # 导出键的二进制内容
  dump_value=$(redis-cli -p 6380 DUMP "$key")
  # 恢复成新的键(比如加个后缀),不设置过期时间
  redis-cli -p 6380 RESTORE "${key}_debug" 0 "$dump_value"
done

现在你就可以在这个临时实例里查看*_debug结尾的键了,它们不会被Redis自动过期删除。

小技巧

如果你只是要查看个别键,也可以用rdbtools的--key参数过滤,比如只看前缀为user:的键:

rdb --command json /path/to/your/old.rdb --key "user:*"

内容的提问来源于stack exchange,提问作者mguijarr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:37:57