线上会经常遇到大key问题,这时候就需要通过–bigkeys来找出最大的key,但是往往和最大的key前缀相同的一类key都会比较大,所以打算一次性获取此类key中比较大的key,官方文档中查看获取value大小的时间成本较高,于是查看有关bigkeys分析这块的redis源码来获取查询命令
代码文件:redis-cli.c
入库函数:findBigKeys 中的主要逻辑
- 定义了不同数据类型对应的value大小单位
char *typename[] = {"string","list","set","hash","zset","stream","none"};
char *typeunit[] = {"bytes","items","members","fields","members","entries",""};
- 循环scan key 直到所取的key的数量是10万的倍数
每取一个key会调用两个函数获取type和value大小
/* Retreive types and then sizes */
getKeyTypes(keys, types);
getKeySizes(keys, types, sizes);
- getKeySizes中定义了每中类型对应的查询value的命令
char *sizecmds[] = {"STRLEN","LLEN","SCARD","HLEN","ZCARD"};