redis导出csv_redis-rdb-tools来解析分析reidsdump⽂件及内
存使⽤量
⼀. 前⾔
oracle技术解析redis的dump.rdb⽂件,分析内存,以JSON格式导出数据。|
提供的功能有:
1. ⽣成内存报告
2. 转储⽂件到JSON
3. 使⽤标准的diff⼯具⽐较两个dump⽂件
Rdbtools是以python语⾔开发的。
⼆. 安装
2.1 前提条件
1. python
2.4以上版本 和 pip
2. redis-py可选,只运⾏在测试⽤例下
2.2 从PyPI安装(推荐)
# /usr/local/python/bin/easy_install pip
# /usr/local/python/bin/pip install rdbtools
1
2
# /usr/local/python/bin/easy_install pip
# /usr/local/python/bin/pip install rdbtools
2.3 从源码包安装
# unzip master
# cd redis-rdb-tools-master/
# python setup.py install
Downloading/unpacking rdbtools
Downloading rdbtools-0.1.
Running setup.py egg_info for package rdbtools
warning: no files found matching 'ile'
fopen s函数Installing collected packages: rdbtools
Running setup.py install for rdbtools
warning: no files found matching 'ile'
Installing redis-memory-for-key script to /usr/local/python/bin
Installing redis-profiler script to /usr/local/python/bin
Installing rdb script to /usr/local/python/bin
Successfully installed rdbtools
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# unzip master
# cd redis-rdb-tools-master/
# python setup.py install
Downloading/unpackingrdbtools
Downloadingrdbtools-0.1.
Runningsetup.pyegg_infoforpackagerdbtools
warning:ile' Installingcollectedpackages:rdbtools
Runningsetup.pyinstallforrdbtools
warning:ile'
Installingredis-memory-for-keyscriptto/usr/local/python/bin Installingredis-profilerscriptto/usr/local/python/bin Installingrdbscriptto/usr/local/python/bin
Successfullyinstalledrdbtools
<
三. 转换dump⽂件到JSON
# /usr/local/python/bin/rdb --help
Usage: rdb [options] /path/to/dump.rdb
Example : rdb --command json -k "user.*" /var/redis/6379/dump.rdb
Options:
-h, --help show this help message and exit
-c FILE, --command=FILE
要执⾏的命令json 或 diff
-f FILE, --file=FILE 输出⽂件名
-n DBS, --db=DBS 数据库ID。可以提供多个数据库。如果没有指定,包含所有数据库。
-
k KEYS, --key=KEYS 导出键。可以是正则表达式。
-t TYPES, --type=TYPES
数据类型。可能的值有:string, hash, set, sortedset, list。 可以提供多个类型。如果没有指定,所有数据类型都返回。1
2
3
4
5
6
7
篮网最新公布消息8
9
10
ueditor编辑器在线11
12
13
# /usr/local/python/bin/rdb --help
Usage:rdb[options]/path/to/dump.rdb
Example:rdb--commandjson-k"user.*"/var/redis/6379/dump.rdb
Options:
-h,--helpshowthishelpmessageandexit
-cFILE,--command=FILE
要执⾏的命令json或diff
-
fFILE,--file=FILE输出⽂件名
-nDBS,--db=DBS数据库ID。可以提供多个数据库。如果没有指定,包含所有数据库。
-kKEYS,--key=KEYS导出键。可以是正则表达式。
-tTYPES,--type=TYPES
数据类型。可能的值有:string,hash,set,sortedset,list。可以提供多个类型。如果没有指定,所有数据类型都返回。
3.1 解析dump⽂件并以JSON格式标准输出
# /usr/local/python/bin/rdb --command json /data/redis_data/6379/dump.rdb
1
# /usr/local/python/bin/rdb --command json /data/redis_data/6379/dump.rdb
3.2 只解析符合正则的keys
# /usr/local/python/bin/rdb --command json --key "sences_2.*" /data/redis_data/6379/dump.rdb
1
# /usr/local/python/bin/rdb --command json --key "sences_2.*" /data/redis_data/6379/dump.rdb
3.3 只解析以“a”为开头的hash且位于数据库ID为2的
# /usr/local/python/bin/rdb --command json --db 2 --type hash --key "a.*" /data/redis_data/6379/dump.rdb
1
# /usr/local/python/bin/rdb --command json --db 2 --type hash --key "a.*" /data/redis_data/6379/dump.rdb
四. ⽣成内存报告
⽣成CSV格式的内存报告。包含的列有:数据库ID,数据类型,key,内存使⽤量(byte),编码。内存使⽤量包含key、value和其他值。注意:内存使⽤量是近似的。在⼀般情况下,略低于实际值。
可以根据key或数据库ID或数据类型对报告的内容进⾏过滤。
内存报告有助于检测是否是应⽤程序逻辑导致的内存泄露,也有助于优化reids内存使⽤情况。
# /usr/local/python/bin/rdb -c memory /data/redis_data/6379/dump.rdb > redis_memory_report.csv
内容如下所⽰:
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,"ot_0_3b0703c01015ce05f76ef4b977dc020e820d0692",351,string,184,184
0,hash,"sences_98558",1703,hashtable,10,132
0,hash,"sences_170989",1698,hashtable,10,138
0,hash,"sences_34233",1673,hashtable,10,115
0,hash,"sence_messages2_favor_32783",358,ziplist,7,51
1
2
3
4
5
6
7
8
# /usr/local/python/bin/rdb -c memory /data/redis_data/6379/dump.rdb > redis_memory_report.csv
内容如下所⽰:
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,"ot_0_3b0703c01015ce05f76ef4b977dc020e820d0692",351,string,184,184
0,hash,"sences_98558",1703,hashtable,10,132
0,hash,"sences_170989",1698,hashtable,10,138
0,hash,"sences_34233",1673,hashtable,10,115
0,hash,"sence_messages2_favor_32783",358,ziplist,7,51
五. 单个key所使⽤的内存量
python解析json文件有时候,需要查询某个key所使⽤的内存。如果全部导出来在查将是很愚蠢且耗时的。对于这种情景,可以使⽤redis-memory-for-key 命令。
如果出现下⾯信息,需要安装redis模块。redis-memory-for-key依赖redis-py包。
Traceback (most recent call last):
File "/usr/local/python/bin/redis-memory-for-key", line 8, in
load_entry_point('rdbtools==0.1.5', 'console_scripts', 'redis-memory-for-key')()
from redis import StrictRedis
ImportError: No module named redis
1
2
3
4
5
Traceback(mostrecentcalllast):
File"/usr/local/python/bin/redis-memory-for-key",line8,in
load_entry_point('rdbtools==0.1.5','console_scripts','redis-memory-for-key')()
fromredisimportStrictRedis
estella英文名寓意ImportError:Nomodulenamedredis
# /usr/local/python/bin/pip install redis
或
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论