summaryrefslogtreecommitdiff
path: root/src/t_string.c
diff options
context:
space:
mode:
authorjudeng <abc3844@126.com>2023-01-03 15:37:47 +0800
committerGitHub <noreply@github.com>2023-01-03 09:37:47 +0200
commit884ca601b21ec6ef4d216ae850c0cf503f762623 (patch)
treeaf538c98ce6faafb5f26963bf014b7687b383f54 /src/t_string.c
parentd2d6bc18ebc63265c2ee55ed79ab6ad2044b3bc3 (diff)
downloadredis-884ca601b21ec6ef4d216ae850c0cf503f762623.tar.gz
Optimize the performance of msetnx command by call lookupkey only once (#11594)
This is a small addition to #9640 It improves performance by avoiding double lookup of the the key.
Diffstat (limited to 'src/t_string.c')
-rw-r--r--src/t_string.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/t_string.c b/src/t_string.c
index 7209b3ba7..125f8ee86 100644
--- a/src/t_string.c
+++ b/src/t_string.c
@@ -553,6 +553,7 @@ void mgetCommand(client *c) {
void msetGenericCommand(client *c, int nx) {
int j;
+ int setkey_flags = 0;
if ((c->argc % 2) == 0) {
addReplyErrorArity(c);
@@ -568,11 +569,12 @@ void msetGenericCommand(client *c, int nx) {
return;
}
}
+ setkey_flags |= SETKEY_DOESNT_EXIST;
}
for (j = 1; j < c->argc; j += 2) {
c->argv[j+1] = tryObjectEncoding(c->argv[j+1]);
- setKey(c,c->db,c->argv[j],c->argv[j+1],0);
+ setKey(c, c->db, c->argv[j], c->argv[j + 1], setkey_flags);
notifyKeyspaceEvent(NOTIFY_STRING,"set",c->argv[j],c->db->id);
}
server.dirty += (c->argc-1)/2;