运行时会 -c memory生成一个CSV报告,其中包含该密钥使用的近似内存。--bytes C并且‘--largest N可用于将输出限制为大于C字节的键或N个最大键。
> rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv> cat memory.csvdatabase,type,key,size_in_bytes,encoding,num_elements,len_largest_element0,list,lizards,241,quicklist,5,190,list,user_list,190,quicklist,3,72,hash,baloon,138,ziplist,3,112,list,armadillo,231,quicklist,5,202,hash,aroma,129,ziplist,3,11
生成的CSV具有以下列 - 数据库号,数据类型,密钥,字节中使用的内存和RDB编码类型。内存使用包括密钥,值和任何其他开销。
请注意,内存使用情况是近似值。一般来说,使用的实际内存将略高于报告的内存。
您可以筛选密钥或数据库号或数据类型的报告。
内存报告应该可以帮助您检测由应用程序逻辑引起的内存泄漏。它还将帮助您优化Redis内存使用。
查找单键使用的内存
有时您只想找到特定密钥使用的内存,并且在转储文件上运行整个内存报告是耗时的。
在这种情况下,您可以使用以下redis-memory-for-key命令:
> redis-memory-for-key person:1> redis-memory-for-key -s localhost -p 6379 -a mypassword person:1Key person:1Bytes111TypehashEncodingziplistNumber of Elements2Length of Largest Element8
注意 :
这被添加到redis-rdb-tools版本0.1.3
这个命令依赖于redis-py包
比较RDB文件
首先,使用--command diff选项,并将输出管道输送到标准排序实用程序
> rdb --command diff /var/redis/6379/dump1.rdb | sort > dump1.txt> rdb --command diff /var/redis/6379/dump2.rdb | sort > dump2.txt
然后,运行你最喜欢的diff程序
> kdiff3 dump1.txt dump2.txt
要限制文件的大小,您可以使用该--key选项过滤键
发出Redis协议
您可以使用该命令将RDB文件转换为redis协议流protocol。
> rdb --c protocol /var/redis/6379/dump.rdb*4$4HSET$9users:123$9firstname$8Sripathi
您可以将输出管道传输到netcat并重新导入数据的一个子集。例如,如果要将数据分割成两个redis实例,可以使用--key标志来选择一个数据子集,然后将输出管道传输到正在运行的redis实例以加载该数据。阅读Redis Mass Insert了解更多信息。
当打印协议输出时,该--escape选项可用于printable或utf8避免不可打印/控制字符。
使用解析器
from rdbtools import RdbParser, RdbCallbackfrom rdbtools.encodehelpers import bytes_to_unicodeclass MyCallback(RdbCallback): ‘‘‘ Simple example to show how callback works. See RdbCallback for all available callback methods. See JsonCallback for a concrete example ‘‘‘ def __init__(self): super(MyCallback, self).__init__(string_escape=None) def encode_key(self, key): return bytes_to_unicode(key, self._escape, skip_printable=True) def encode_value(self, val): return bytes_to_unicode(val, self._escape) def set(self, key, value, expiry, info): print(‘%s = %s‘ % (self.encode_key(key), self.encode_value(value))) def hset(self, key, field, value): print(‘%s.%s = %s‘ % (self.encode_key(key), self.encode_key(field), self.encode_value(value))) def sadd(self, key, member): print(‘%s has {%s}‘ % (self.encode_key(key), self.encode_value(member))) def rpush(self, key, value): print(‘%s has [%s]‘ % (self.encode_key(key), self.encode_value(value))) def zadd(self, key, score, member): print(‘%s has {%s : %s}‘ % (str(key), str(member), str(score)))callback = MyCallback()parser = RdbParser(callback)parser.parse(‘/var/redis/6379/dump.rdb‘)
redis快照文件dump.rdb解析工具--redis-rdb-tools
标签:redis-rdb-tools
小编还为您整理了以下内容,可能对您也有帮助:
redis中的数据占用内存大小分析
如今越来越来的系统中使用 redis 作为缓存系统,但是随着用户量的增长,业务数据不断增多,redis服务器的内存空间有可能会到瓶颈了,及时观察redis中的各种键内存占用多少,会方便我们评估何时升级redis服务器规格,以及对于是否需要进行程序优化来设计合理的存储结构都会有很大帮助,下面给大家介绍两款工具 rdr 和 redis-rdb-tools ,可以很好的满足我们的需要
详细使用参考官方仓库:https://github.com/xueqiu/rdr
rdr提供了linux/OSX/Windows下的可执行文件,直接点击下载,我这里演示Windows下的使用方式
下载下来后存储到d:/dev路径下
1.首先要去redis服务器端将rdb文件复制到本地,为了方便,我将rdb文件放到了rdr工具所在目录
这里再说下redis rdb文件该怎么找到,通过查看redis服务器配置文件 redis.conf ,搜索 dbfilename 可以快速定位到该配置,按照路径就可以找到redis rdb备份文件了
2.在rdr工具所在的路径下打开命令行窗口,执行指令
可以看到指令执行成功后,在本地启动了server,监听端口8080
3.打开浏览器,访问http://localhost:8080/,能看到详细的内存占用数据报告,包括键数量、不同的数据类型、元素计数等
不过通过网页版的数据报告中有个小问题,对于redis中的不同数据库没有明显的区分展示~,混在一起,不是太清晰
详细使用参考官方仓库:https://github.com/sripathikrishnan/redis-rdb-tools/
1.安装python环境,我这里安装了python2.7.15
2.通过pip安装redis-rdb-tools
我这里python-lzf库没有安装成功,不过不影响实际使用,这个库是为了加速rdb文件解析速度~
3.安装完成后就可以在命令行中使用了,输入指令生成内存报告文件
等待一段时间,命令阻塞执行完成后,就会在-f参数指定的路径下生成对应的文件
用excel打开生成的csv文件,可以看到详细的统计结果,包含了所有数据库下所有key的内存占用情况~
redis-rdb-tools中还带了一个很有用的命令,能帮助我们直接查询单个key的内存占用情况,命令格式如下
执行测试下效果,可以看到命令执行完成后,直接回显出指定key对应的内存占用情况了
注意该操作在生产环境下慎用,视key大小情况再行决定是否执行,有可能会阻塞执行很长时间才能计算出结果~
redis文件中的dump.rdb文件是怎么生成的
1、使用CRT远程登录装有redis的机器。
2、登录redis,执行命令redis-cli -h 127.0.0.1 -p 6379,其中127.0.0.1为redis的ip地址,6379为redis端口号,执行save命令保存数据,该命令将在redis安装目录中创建mp.rdb文件。
3、如果忘记了 redis 安装目录,执行config get dir。
4、进入redis安装目录,拷贝生成的mp.rdb。
5、如果需要恢复数据,拷贝备份文件 mp.rdb到安装目录 。
6、启动redis服务端,/etc/init.d/redis_6355 start。
redis怎么用知道的dump.rdb文件,怎么样不用生成的dump.rdb,自己有缓存的dump.rdb数据文件
1、查看redis.conf文件中(三项)
dbfilename mp.rdb
dir ./
appendonly no
2、shutdown redis服务;
3、cp mp.rdb文件到 配置的目录下
4、chomd mp.rdb 的权限 一般777肯定没问题
5、启动redis服务;
6、数据成功加载到了redis。