redis分析big key的方法
【背景】
对redis数据库分析big key的方法步骤
【方法】
1、redis-cli自带--bigkeys,例如:redis-cli -h <hostip> -a <password> --bigkeys
2、获取生产Redis的rdb文件,通过rdbtools分析rdb生成csv文件,再导入MySQL或其他数据库中进行分析统计,根据size_in_bytes统计bigkey
3、使用redisinsight分析
4、其他第三方工具,例如:redis-rdb-cli 地址:https://github.com/leonchen83/redis-rdb-cli
【使用】
redis-cli -h <hostip> -a <password> --bigkeys
rdbtools分析
地址:https://github.com/sripathikrishnan/redis-rdb-tools
pip install rdbtools python-lzf
git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools
sudo python setup.py install
生成内存报告
> rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv
输出字段说明:
database :key在redis的db
type :key类型
key :key值
size_in_bytes :key的内存大小(byte)
encoding :value的存储编码形式
num_elements :key中的value的个数
len_largest_element :key中的value的长度
expiry :key过期时间
可以导入MySQL中进行SQL查询分析
创建表:
CREATE TABLE `parse_redis_memory` (
`database` int(128) DEFAULT NULL,
`type` varchar(128) DEFAULT NULL,
`KEY` varchar(1000) not NULL,
`size_in_bytes` bigint(20) DEFAULT NULL,
`encoding` varchar(128) DEFAULT NULL,
`num_elements` bigint(20) DEFAULT NULL,
`len_largest_element` varchar(128) DEFAULT NULL,
`expiry` int(128) DEFAULT NULL
);
可以直接用Navicat导入,根据SQL查询key信息
1、查询key的个数
select count(*) from memory;
2、查询总的内存占用
select sum(size_in_bytes) from memory;
3、查询内存占用最高的10个key
select * from memory order by size_in_bytes desc limit 10;
4、查询value个数1000个以上的list
select * from memory where type='list' and num_elements > 1000;
效果:
生成HTML报告
redis-profiler yufab.rdb -f yufab.html
使用redisinsight导入rdb文件分析
分析结果
使用其他第三方工具,例如:redis-rdb-cli
待补充