利用rdbtools分析redis大key

2021/7/16 19:06:07

本文主要是介绍利用rdbtools分析redis大key,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

#pip安装分析工具:
#pip install rdbtools python-lzf
#或者源码安装
git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools
python setup.py install
apt install python-lzf

#分析rdb工具,21G,5200W个key的rdb文件最终生成4G的csv文件
nohup /usr/rdbtools/redis-rdb-tools/rdbtools/cli/rdb.py --command memory dump.rdb > memory.csv &
#或者用以下命令,其中–bytes 1048576 可以限制只输出大于1M以上的key值,减小生成的csv文件大小。
nohup /usr/rdbtools/redis-rdb-tools/rdbtools/cli/rdb.py --command memory --bytes 1048576 dump.rdb > memory.csv &

#如果项目redis中使用到了包含",“的key,csv文件导入数据库时会将key中的”,“当成分隔符,把对应的统计数据插入到错误的字段中去
#有这种情况的话,需要将”,“换成其他符号,下面语句把”,“换成”."
cat memory.csv|awk -F “,” ‘{if(NF>8){key=$3;for (i=4;i<=NF-4;i++){key=key"."$i;} print $1","$2",“key”,"$NF-4","$NF-3","$NF-2","$NF-1","$NF;} else print $0}’ > memoryfinal.csv

#生成csv文件后,要先建表,如果项目redis没有分多个库的话,索引’idx_size’中的database字段可以去掉,提高数据插入速度,或者根据需要自行设定索引,提高查询速度
CREATE TABLE memory
(
id int(11) NOT NULL AUTO_INCREMENT,
database int(2) DEFAULT 0,
type varchar(32) DEFAULT ‘’,
key varchar(32) DEFAULT ‘’,
size_in_bytes int(11) DEFAULT 0,
encoding varchar(32) DEFAULT ‘’,
num_elements int(32) DEFAULT 0,
len_largest_element int(32) DEFAULT 0,
expiry varchar(32) DEFAULT ‘’,
primary key (id) using btree,
INDEX idx_size(database,size_in_bytes)
) ENGINE=INNODB CHARACTER SET=utf8 ;

#csv文件导入数据表(mysql中执行)
load data infile ‘/usr/redis-4.0.9/data/memoryfinal.csv’
into table memory
fields terminated by ‘,’
lines terminated by ‘\n’ ignore 1 lines
(database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry);

#查询占用内容前100个大key
select m.* from memory m join (select id from memory where memory.database=2 order by size_in_bytes desc limit 100) ids on ids.id=m.id;
#查询无过期时间大key
select m.* from memory m join (select id from memory where memory.database=2 and memory.expiry="" order by size_in_bytes desc limit 100) ids on ids.id=m.id;



这篇关于利用rdbtools分析redis大key的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程