diff options
author | antirez <antirez@gmail.com> | 2019-07-03 12:42:16 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2019-07-03 12:42:16 +0200 |
commit | 506764b3f87789bfe219da0b07b79f01917bff9f (patch) | |
tree | 4498cd6b311249e569aef0e9a48c645cec7068f6 | |
parent | db16a861a1ca2f43f340c68c00a47b69a15a6f03 (diff) | |
download | redis-506764b3f87789bfe219da0b07b79f01917bff9f.tar.gz |
Client side caching: hook inside call() for tracking.
-rw-r--r-- | src/server.c | 11 | ||||
-rw-r--r-- | src/server.h | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/server.c b/src/server.c index 4b87b6ac2..bb891594b 100644 --- a/src/server.c +++ b/src/server.c @@ -3194,6 +3194,7 @@ void call(client *c, int flags) { latencyAddSampleIfNeeded(latency_event,duration/1000); slowlogPushEntryIfNeeded(c,c->argv,c->argc,duration); } + if (flags & CMD_CALL_STATS) { /* use the real command that was executed (cmd and lastamc) may be * different, in case of MULTI-EXEC or re-written commands such as @@ -3261,6 +3262,16 @@ void call(client *c, int flags) { redisOpArrayFree(&server.also_propagate); } server.also_propagate = prev_also_propagate; + + /* If the client has keys tracking enabled for client side caching, + * make sure to remember the keys it fetched via this command. */ + if (c->cmd->flags & CMD_READONLY) { + client *caller = (c->flags & CLIENT_LUA && server.lua_caller) ? + server.lua_caller : c; + if (caller->flags & CLIENT_TRACKING) + trackingRememberKeys(caller); + } + server.stat_numcommands++; } diff --git a/src/server.h b/src/server.h index 8c97f83f6..022e48304 100644 --- a/src/server.h +++ b/src/server.h @@ -1617,6 +1617,7 @@ void addReplyStatusFormat(client *c, const char *fmt, ...); /* Client side caching (tracking mode) */ void enableTracking(client *c, uint64_t redirect_to); void disableTracking(client *c); +void trackingRememberKeys(client *c); /* List data type */ void listTypeTryConversion(robj *subject, robj *value); |