工具基本说明
工具主要通过解析redis的dump.rdb文件,分析占用内存,以JSON格式导出数据。提供的功能有:
- 生成内存报告
- 转储文件到JSON
- 使用标准的diff工具比较两个dump文件 Rdbtools是以python语言开发的。
工具安装
-
下载工具源码
wget https://github.com/sripathikrishnan/redis-rdb-tools/archive/master.zip
-
下载提速工具
pip install python-lzf
-
安装rdb工具,项目根目录
python setup.py install
指令说明
主要命令
-
生成csv分析报告
rdb -c memory ./dump.rdb > redis_memory_report.csv
-
生成json
rdb -c json ./dump.rdb > redis_json_report.json
-
比较dump
rdb -c diff ./dump1.rdb | sort > dump1.txt
rdb -c diff ./dump2.rdb | sort > dump2.txt
kdiff3 dump1.txt dump2.txt
注:需先安装kdiff3,指令:yum install kdiff3
其他命令
代码分析时一同说明
源码说明
分三个部分来讲:rdb解析入口rdb.py,call回调,rdb解析器parser.py
rdb解析入口rdb.py
#1 指令说明
#2 参数准备
#3 为解析器配置合适的回调方法
#4 执行解析
#这边仅解读步骤3
def main():
......
try:
callback = {
'diff': lambda f: DiffCallback(f, string_escape=options.escape),
'json': lambda f: JSONCallback(f, string_escape=options.escape),
'justkeys': lambda f: KeysOnlyCallback(f, string_escape=options.escape),
'justkeyvals': lambda f: KeyValsOnlyCallback(f, string_escape=options.escape),
'memory': lambda f: MemoryCallback(PrintAllKeys(f, options.bytes, options.largest),64, string_escape=options.escape),
'protocol': lambda f: ProtocolCallback(f, string_escape=options.escape)
}[options.command](out_file_obj)
except Exception, e:
eprint(''+str(e))
raise Exception('Invalid Command %s' % options.command)
......
parser = RdbParser(callback, filters=filters)
......