summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjudeng <abc3844@126.com>2023-01-03 15:37:47 +0800
committerOran Agra <oran@redislabs.com>2023-01-16 18:40:35 +0200
commitf9f48ef6742d2c745b8c6248d0ad85014222d3d4 (patch)
tree89b272bab32377f16a7544fece1ec5a877dcccb4
parentb7b78a2db2526cf95aa8ae3e86285abd7ccce652 (diff)
downloadredis-f9f48ef6742d2c745b8c6248d0ad85014222d3d4.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. (cherry picked from commit 884ca601b21ec6ef4d216ae850c0cf503f762623)
-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 7b67b78ce..c7d2d898e 100644
--- a/src/t_string.c
+++ b/src/t_string.c
@@ -555,6 +555,7 @@ void mgetCommand(client *c) {
void msetGenericCommand(client *c, int nx) {
int j;
+ int setkey_flags = 0;
if ((c->argc % 2) == 0) {
addReplyErrorArity(c);
@@ -570,11 +571,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;