redis-cli --hotkeys fixed to handle non-printable key names
This commit is contained in:
parent
6f8a8647de
commit
b23e251036
@ -7481,21 +7481,27 @@ static void getKeyFreqs(redisReply *keys, unsigned long long *freqs) {
|
|||||||
|
|
||||||
/* Pipeline OBJECT freq commands */
|
/* Pipeline OBJECT freq commands */
|
||||||
for(i=0;i<keys->elements;i++) {
|
for(i=0;i<keys->elements;i++) {
|
||||||
redisAppendCommand(context, "OBJECT freq %s", keys->element[i]->str);
|
const char* argv[] = {"OBJECT", "FREQ", keys->element[i]->str};
|
||||||
|
size_t lens[] = {6, 4, keys->element[i]->len};
|
||||||
|
redisAppendCommandArgv(context, 3, argv, lens);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve freqs */
|
/* Retrieve freqs */
|
||||||
for(i=0;i<keys->elements;i++) {
|
for(i=0;i<keys->elements;i++) {
|
||||||
if(redisGetReply(context, (void**)&reply)!=REDIS_OK) {
|
if(redisGetReply(context, (void**)&reply)!=REDIS_OK) {
|
||||||
|
sds keyname = sdscatrepr(sdsempty(), keys->element[i]->str, keys->element[i]->len);
|
||||||
fprintf(stderr, "Error getting freq for key '%s' (%d: %s)\n",
|
fprintf(stderr, "Error getting freq for key '%s' (%d: %s)\n",
|
||||||
keys->element[i]->str, context->err, context->errstr);
|
keyname, context->err, context->errstr);
|
||||||
|
sdsfree(keyname);
|
||||||
exit(1);
|
exit(1);
|
||||||
} else if(reply->type != REDIS_REPLY_INTEGER) {
|
} else if(reply->type != REDIS_REPLY_INTEGER) {
|
||||||
if(reply->type == REDIS_REPLY_ERROR) {
|
if(reply->type == REDIS_REPLY_ERROR) {
|
||||||
fprintf(stderr, "Error: %s\n", reply->str);
|
fprintf(stderr, "Error: %s\n", reply->str);
|
||||||
exit(1);
|
exit(1);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Warning: OBJECT freq on '%s' failed (may have been deleted)\n", keys->element[i]->str);
|
sds keyname = sdscatrepr(sdsempty(), keys->element[i]->str, keys->element[i]->len);
|
||||||
|
fprintf(stderr, "Warning: OBJECT freq on '%s' failed (may have been deleted)\n", keyname);
|
||||||
|
sdsfree(keyname);
|
||||||
freqs[i] = 0;
|
freqs[i] = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -7566,10 +7572,10 @@ static void findHotKeys(void) {
|
|||||||
memmove(hotkeys,hotkeys+1,sizeof(hotkeys[0])*k);
|
memmove(hotkeys,hotkeys+1,sizeof(hotkeys[0])*k);
|
||||||
}
|
}
|
||||||
counters[k] = freqs[i];
|
counters[k] = freqs[i];
|
||||||
hotkeys[k] = sdsnew(keys->element[i]->str);
|
hotkeys[k] = sdscatrepr(sdsempty(), keys->element[i]->str, keys->element[i]->len);
|
||||||
printf(
|
printf(
|
||||||
"[%05.2f%%] Hot key '%s' found so far with counter %llu\n",
|
"[%05.2f%%] Hot key '%s' found so far with counter %llu\n",
|
||||||
pct, keys->element[i]->str, freqs[i]);
|
pct, hotkeys[k], freqs[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sleep if we've been directed to do so */
|
/* Sleep if we've been directed to do so */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user