- 生成内存快照dump.rdb
- 安装 redis-rdb-tools
- 使用redis-rdb-tools生成内存报告
- 将报告导入mysql,进行分析,或者使用excel、脚本统计
1、生成dump.rdb,使用redis客户端,执行bgsave命令,生成dump.rdb快照
2、安装redis-rdb-tools
源码安装
git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools
python setup.py install或者
pip install rdbtools
3、使用redis-rdb-tools生成内存报告
rdb -c memory d:\redis\dump.rdb > redis_memory_report.csv
4、使用python脚本统计
列头
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry
取size_in_bytes
脚本如下:
脚本统计以数组内容开头的key
#!/usr/bin/python
# -*- coding:UTF-8 -*-
import csv;
def analysis_json_report(key_list):
report_all = csv.reader(open('E:\\redis\\redis_memory_report.csv'))
result_list = {}
result_list["other"] = (long) (0)
for report in report_all:
if report.__len__() <= 4:
continue
isexists = False
for key in key_list:
if report[2].startswith(key) == True:
try:
isexists = True
if result_list.get(key) == None or result_list.get(key) == "":
result_list[key] = (long) (report[3])
else:
result_list[key] = (long)(result_list.get(key)) + (long)(report[3])
break
except BaseException , e:
print result_list
if isexists == False:
try:
result_list["other"] = (long)(result_list.get("other")) + (long)(report[3])
#result_list[report[2]] = (long) (report[3])
except BaseException , e:
print "error skip : " + str(report[2])
# print report[2]
with open('E:\\redis\\memory_report.csv', "wb+") as csvfile:
writer = csv.writer(csvfile)
for result in result_list:
result_list[result] = result_list[result] / 1024 / 1024
writer.writerow([result, result_list[result]])
print 'finished'
def main():
key_list = ['xx',
'yy',
'tt']
analysis_json_report(key_list)
if __name__ == '__main__':
main()
redis-migrate-tool:Redis 集群迁移工具,基于redis复制,快速,稳定