summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjudeng <abc3844@126.com>2023-04-16 18:02:47 +0800
committerGitHub <noreply@github.com>2023-04-16 13:02:47 +0300
commit1222b6087385aa431a412a9e9b59cf29ce55210e (patch)
tree780dac135ef28ff8548c87eef4fa28c0c6ae5f44
parentd5d56d0d95d295ed7fb6bff1bc6b0c182dacbfa2 (diff)
downloadredis-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.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/db.c b/src/db.c
index ddfb04ebb..31c8f69bd 100644
--- a/src/db.c
+++ b/src/db.c
@@ -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;