redis-cli --bigkeys fixed to handle non-printable key names
This commit is contained in:
parent
5977a94842
commit
6f8a8647de
@ -7246,7 +7246,9 @@ static void getKeyTypes(dict *types_dict, redisReply *keys, typeinfo **types) {
|
|||||||
|
|
||||||
/* Pipeline TYPE commands */
|
/* Pipeline TYPE commands */
|
||||||
for(i=0;i<keys->elements;i++) {
|
for(i=0;i<keys->elements;i++) {
|
||||||
redisAppendCommand(context, "TYPE %s", keys->element[i]->str);
|
const char* argv[] = {"TYPE", keys->element[i]->str};
|
||||||
|
size_t lens[] = {4, keys->element[i]->len};
|
||||||
|
redisAppendCommandArgv(context, 2, argv, lens);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve types */
|
/* Retrieve types */
|
||||||
@ -7292,15 +7294,21 @@ static void getKeySizes(redisReply *keys, typeinfo **types,
|
|||||||
if(!types[i] || (!types[i]->sizecmd && !memkeys))
|
if(!types[i] || (!types[i]->sizecmd && !memkeys))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!memkeys)
|
if (!memkeys) {
|
||||||
redisAppendCommand(context, "%s %s",
|
const char* argv[] = {types[i]->sizecmd, keys->element[i]->str};
|
||||||
types[i]->sizecmd, keys->element[i]->str);
|
size_t lens[] = {strlen(types[i]->sizecmd), keys->element[i]->len};
|
||||||
else if (memkeys_samples==0)
|
redisAppendCommandArgv(context, 2, argv, lens);
|
||||||
redisAppendCommand(context, "%s %s %s",
|
} else if (memkeys_samples==0) {
|
||||||
"MEMORY", "USAGE", keys->element[i]->str);
|
const char* argv[] = {"MEMORY", "USAGE", keys->element[i]->str};
|
||||||
else
|
size_t lens[] = {6, 5, keys->element[i]->len};
|
||||||
redisAppendCommand(context, "%s %s %s SAMPLES %u",
|
redisAppendCommandArgv(context, 3, argv, lens);
|
||||||
"MEMORY", "USAGE", keys->element[i]->str, memkeys_samples);
|
} else {
|
||||||
|
sds samplesstr = sdsfromlonglong(memkeys_samples);
|
||||||
|
const char* argv[] = {"MEMORY", "USAGE", keys->element[i]->str, "SAMPLES", samplesstr};
|
||||||
|
size_t lens[] = {6, 5, keys->element[i]->len, 7, sdslen(samplesstr)};
|
||||||
|
redisAppendCommandArgv(context, 5, argv, lens);
|
||||||
|
sdsfree(samplesstr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve sizes */
|
/* Retrieve sizes */
|
||||||
@ -7396,20 +7404,20 @@ static void findBigKeys(int memkeys, unsigned memkeys_samples) {
|
|||||||
sampled++;
|
sampled++;
|
||||||
|
|
||||||
if(type->biggest<sizes[i]) {
|
if(type->biggest<sizes[i]) {
|
||||||
printf(
|
|
||||||
"[%05.2f%%] Biggest %-6s found so far '%s' with %llu %s\n",
|
|
||||||
pct, type->name, keys->element[i]->str, sizes[i],
|
|
||||||
!memkeys? type->sizeunit: "bytes");
|
|
||||||
|
|
||||||
/* Keep track of biggest key name for this type */
|
/* Keep track of biggest key name for this type */
|
||||||
if (type->biggest_key)
|
if (type->biggest_key)
|
||||||
sdsfree(type->biggest_key);
|
sdsfree(type->biggest_key);
|
||||||
type->biggest_key = sdsnew(keys->element[i]->str);
|
type->biggest_key = sdscatrepr(sdsempty(), keys->element[i]->str, keys->element[i]->len);
|
||||||
if(!type->biggest_key) {
|
if(!type->biggest_key) {
|
||||||
fprintf(stderr, "Failed to allocate memory for key!\n");
|
fprintf(stderr, "Failed to allocate memory for key!\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf(
|
||||||
|
"[%05.2f%%] Biggest %-6s found so far '%s' with %llu %s\n",
|
||||||
|
pct, type->name, type->biggest_key, sizes[i],
|
||||||
|
!memkeys? type->sizeunit: "bytes");
|
||||||
|
|
||||||
/* Keep track of the biggest size for this type */
|
/* Keep track of the biggest size for this type */
|
||||||
type->biggest = sizes[i];
|
type->biggest = sizes[i];
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user