diff --git a/src/db.c b/src/db.c index d53dc322e49..277ae4de49b 100644 --- a/src/db.c +++ b/src/db.c @@ -901,7 +901,7 @@ void existsCommand(client *c) { int j; for (j = 1; j < c->argc; j++) { - if (lookupKeyReadWithFlags(c->db, c->argv[j], LOOKUP_NOTOUCH)) count++; + if (lookupKeyReadWithFlags(c->db, c->argv[j], LOOKUP_NOTOUCH | LOOKUP_NOSTATS)) count++; } addReplyLongLong(c, count); } diff --git a/tests/unit/keyspace.tcl b/tests/unit/keyspace.tcl index a6ae5110038..77982a6993b 100644 --- a/tests/unit/keyspace.tcl +++ b/tests/unit/keyspace.tcl @@ -67,6 +67,21 @@ start_server {tags {"keyspace"}} { append res [r exists newkey] } {10} + test {EXISTS does not update keyspace hits or misses} { + r set existskey value + set info [r info stats] + set hits_before [getInfoProperty $info keyspace_hits] + set misses_before [getInfoProperty $info keyspace_misses] + r exists existskey + r exists nonexistingkey + set info [r info stats] + set hits_after [getInfoProperty $info keyspace_hits] + set misses_after [getInfoProperty $info keyspace_misses] + assert_equal $hits_before $hits_after + assert_equal $misses_before $misses_after + r del existskey + } + test {Zero length value in key. SET/GET/EXISTS} { r set emptykey {} set res [r get emptykey]