当前位置:   article > 正文

使用redis-rdb-tools解析reids dump.rdb文件及分析内存使用量

查看dump.rdb内容

Oschina的编辑器依旧这么的蛋疼 ,哎写一篇文章改好多次格式问题。

redis文件中的dump.rdb文件是怎么生成的

   简而言之,dump.rdb是由Redis服务器自动生成的。
  1.    默认情况下 每隔一段时间redis服务器程序会自动对数据库做一次遍历,把内存快照写在一个叫做“dump.rdb”的文件
  2. 里,这个持久化机制叫做SNAPSHOT。有了SNAPSHOT后,如果服务器宕机,重新启动redis服务器程序时redis会自动加载
  3. dump.rdb,将数据库状态恢复到上一次做SNAPSHOT时的状态。
  4.   至于多久做一次SNAPSHOT,SNAPSHOT文件的路径和文件名,你可以在redis的conf文件里指定。除了SNAPSHOT,
  5. redis还支持AOF持久化。

ps:(自己备注)

查看方法一:使用string方法可以查看

查看方法二:如下

现在越来越多人开始使用Redis了,主要是因为它十分高效、性能强劲、扩展性好。

Rdbtools是一个解析dump.rdb文件,并生成内存报告的分析工具,对我们更好地使用Redis非常有帮助,是一个不可多得的利器。

下面,简单介绍一个使用情况:

1. 开始安装,使用pip,一个pythoner喜欢用的工具:

# /usr/local/python/bin/easy_install pip
# /usr/local/python/bin/pip install rdbtools 

注意pip的版本问题,pip为pip==1.5.6的时候,需要设置sudo easy_install requests==2.3.0,此时的python版本为2.7
后来看pip官方说在pip1.6的时候进行了修复,未测试(后续遇到了再说)

如果您想从源码安装,可以这样做,当前前提是您已有git客户端:

  1. git clone https://github.com/sripathikrishnan/redis-rdb-tools
  2. cd redis-rdb-tools
  3. sudo python setup.py install

2. 好了,让我们来看一下如何转换dump.rdb文件为JSON格式,查看帮助:

  1. # /usr/local/python/bin/rdb --help
  2. Usage: rdb [options] /path/to/dump.rdb
  3. Example : rdb --command json -k "user.*" /var/redis/6379/dump.rdb
  4. Options:
  5. -h, --help show this help message and exit
  6. -c FILE, --command=FILE
  7. 要执行的命令json 或 diff
  8. -f FILE, --file=FILE 输出文件名
  9. -n DBS, --db=DBS 数据库ID。可以提供多个数据库。如果没有指定,包含所有数据库。
  10. -k KEYS, --key=KEYS 导出键。可以是正则表达式。
  11. -t TYPES, --type=TYPES 数据类型。可能的值有:string, hash, set, sortedset, list。 可以提供多个类型。如果没有指定,所有数据类型都返回。

看了上面帮助,大概知道怎么操作了:

  1. # 解析并向屏幕打印输出json数据
  2. rdb --command json /var/redis/6379/dump.rdb
  3. # 只输出匹配某个key的数据
  4. rdb --command json --key "user.*" /var/redis/6379/dump.rdb
  5. # 只解析位于数据库ID为2且以“a”为开头的hash数据
  6. rdb --command json --db 2 --type hash --key "a.*" /var/redis/6379/dump.rdb

3. 生成内存数据报告:

rdb -c memory /var/redis/6379/dump.rdb > memory.csv
生成CSV格式的内存报告。
包含的列有:数据库ID,数据类型,key,内存使用量(byte),编码。
内存使用量包含key、value和其他值。
注意:内存使用量是近似的。在一般情况下,略低于实际值。
可以根据key或数据库ID或数据类型对报告的内容进行过滤。
内存报告有助于检测是否是应用程序逻辑导致的内存泄露,也有助于优化reids内存使用情况。

4. 查看某个key的内存使用情况:

有时候,需要查询某个key所使用的内存,如果全部导出来在查找将是很愚蠢且耗时的,对于这种情景,可以使用redis-memory-for-key命令。

  1. redis-memory-for-key person:1
  2. redis-memory-for-key -s localhost -p 6379 -a mypassword person:1
  3. # 将会输出 :
  4. Key "person:1"
  5. Bytes 111
  6. Type hash
  7. Encoding ziplist
  8. Number of Elements 2
  9. Length of Largest Element 8

如果出现以下错误信息,请记得安装redis模块,因为redis-memory-for-key依赖redis-py包。

  1. Traceback (most recent call last):
  2. File "/usr/local/python/bin/redis-memory-for-key", line 8, in <module>
  3. load_entry_point('rdbtools==0.1.5', 'console_scripts', 'redis-memory-for-key')()
  4. from redis import StrictRedis
  5. ImportError: No module named redis
5. 比较两个dump.rdb文件:

主要使用 --command diff 选项,并通过管道来排序。

  1. rdb --command diff /var/redis/6379/dump1.rdb | sort > dump1.txt
  2. rdb --command diff /var/redis/6379/dump2.rdb | sort > dump2.txt
  3. # 然后使用命令 diff
  4. diff dump1.txt dump2.txt

但如果想显示得更直观些,可以使用kdiff3,因为Kdiff3是图形化工具:

kdiff3 dump1.txt dump2.txt 

同样,按照官方介绍,你也可以使用解析器来分析,示例代码如下:

  1. import sys
  2. from rdbtools import RdbParser, RdbCallback
  3. class MyCallback(RdbCallback) :
  4. ''' Simple example to show how callback works.
  5. See RdbCallback for all available callback methods.
  6. See JsonCallback for a concrete example
  7. '''
  8. def set(self, key, value, expiry):
  9. print('%s = %s' % (str(key), str(value)))
  10. def hset(self, key, field, value):
  11. print('%s.%s = %s' % (str(key), str(field), str(value)))
  12. def sadd(self, key, member):
  13. print('%s has {%s}' % (str(key), str(member)))
  14. def rpush(self, key, value) :
  15. print('%s has [%s]' % (str(key), str(value)))
  16. def zadd(self, key, score, member):
  17. print('%s has {%s : %s}' % (str(key), str(member), str(score)))
  18. callback = MyCallback()
  19. parser = RdbParser(callback)
  20. parser.parse('/var/redis/6379/dump.rdb')

 参考来源

使用redis-rdb-tools分析:http://space.wudiweb.com/phychion/blog/95
redis-rdb-tools官方:https://github.com/sripathikrishnan/redis-rdb-tools
 

redis的.rdb是什么:http://zhidao.baidu.com/link?url=PR5zyWATKdIwF2qPRtev-KheJdF_qxOtV8Dyyl0JTeCKScG4SVkFZEJm9ZhP68clDkLNiD6RdzhJ2r2tk4C_VftzzaPeGRUzM3qxNNA0Moe

转载于:https://my.oschina.net/u/1188877/blog/346789

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/591485
推荐阅读
相关标签
  

闽ICP备14008679号