diff options
author | judeng <abc3844@126.com> | 2023-04-16 18:02:47 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-16 13:02:47 +0300 |
commit | 1222b6087385aa431a412a9e9b59cf29ce55210e (patch) | |
tree | 780dac135ef28ff8548c87eef4fa28c0c6ae5f44 | |
parent | d5d56d0d95d295ed7fb6bff1bc6b0c182dacbfa2 (diff) | |
download | redis-1222b6087385aa431a412a9e9b59cf29ce55210e.tar.gz |
improve performance of keys command by using static objects (#12036)
Improve performance by avoiding redundancy memory malloc/free
-rw-r--r-- | src/db.c | 9 |
1 files changed, 4 insertions, 5 deletions
@@ -774,17 +774,16 @@ void keysCommand(client *c) { di = dictGetSafeIterator(c->db->dict); allkeys = (pattern[0] == '*' && plen == 1); + robj keyobj; while((de = dictNext(di)) != NULL) { sds key = dictGetKey(de); - robj *keyobj; if (allkeys || stringmatchlen(pattern,plen,key,sdslen(key),0)) { - keyobj = createStringObject(key,sdslen(key)); - if (!keyIsExpired(c->db,keyobj)) { - addReplyBulk(c,keyobj); + initStaticStringObject(keyobj, key); + if (!keyIsExpired(c->db, &keyobj)) { + addReplyBulkCBuffer(c, key, sdslen(key)); numkeys++; } - decrRefCount(keyobj); } if (c->flags & CLIENT_CLOSE_ASAP) break; |