Redis rdb 工具分析步骤
-
通过
redis-cli -p 6380
命令进入到具体的redis server中,执行bgsave
命令,将会在/redis
目录下生成dump.rdb文件 -
将dump后的文件发送到163服务器(163服务器安装了rdb tools)
scp /redis/dump.rdb root@10.50.10.163:/var/lib/mysql-files/dump_6380.rdb
- 使用rdb tools 分析dump文件,并将分析结果保存进对应的csv文件(此过程耗时较久)
rdb -c memory /var/lib/mysql-files/dump_6380.rdb --bytes 128 -f /redis/dump_memory_6380_new.csv &
-
在mysql中创建对应端口的表
DROP TABLE IF EXISTS `memory_6380`; CREATE TABLE `memory_6380` ( `DATABASE` int(11) DEFAULT NULL, `type` varchar(255) DEFAULT NULL, `key` varchar(255) DEFAULT NULL, `size_in_bytes` int(11) DEFAULT NULL, `encoding` varchar(255) DEFAULT NULL, `num_elements` int(11) DEFAULT NULL, `len_largest_element` varchar(255) DEFAULT NULL, `expiry` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
将csv文件插入到数据库
LOAD DATA LOCAL INFILE '/redis/dump_memory_6380.csv' INTO TABLE rdb.memory_6380 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
-
输出字段说明
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过期时间
-
分析内存快照
- 查询key的个数
select count(*) from dump_memory;
- 查询总的内存占用
select sum(size_in_bytes) from dump_memory;
- 查询内存占用最高的10个key
select * from dump_memory order by size_in_bytes desc limit 10;
- 查询value个数1000个以上的list
select * from dump_memory where type=’list’ and num_elements > 1000;
- 查询未设置过期时间key的数量
SELECT type, count(*) FROM dump_memory where expiry = '' GROUP BY type;
- 查询未设置过期时间key的数量
SELECT type, count(*) FROM dump_memory where expiry <> '' GROUP BY type;