Client side caching: implement CLIENT GETREDIR.
This subcommand may simplify the writing of Redis client libraries using the tracking feature and/or improve observability and debugging capabilities.
This commit is contained in:
parent
923e4fb312
commit
c7aaf8db4d
@ -1954,20 +1954,21 @@ void clientCommand(client *c) {
|
|||||||
|
|
||||||
if (c->argc == 2 && !strcasecmp(c->argv[1]->ptr,"help")) {
|
if (c->argc == 2 && !strcasecmp(c->argv[1]->ptr,"help")) {
|
||||||
const char *help[] = {
|
const char *help[] = {
|
||||||
"id -- Return the ID of the current connection.",
|
"ID -- Return the ID of the current connection.",
|
||||||
"getname -- Return the name of the current connection.",
|
"GETNAME -- Return the name of the current connection.",
|
||||||
"kill <ip:port> -- Kill connection made from <ip:port>.",
|
"KILL <ip:port> -- Kill connection made from <ip:port>.",
|
||||||
"kill <option> <value> [option value ...] -- Kill connections. Options are:",
|
"KILL <option> <value> [option value ...] -- Kill connections. Options are:",
|
||||||
" addr <ip:port> -- Kill connection made from <ip:port>",
|
" ADDR <ip:port> -- Kill connection made from <ip:port>",
|
||||||
" type (normal|master|replica|pubsub) -- Kill connections by type.",
|
" TYPE (normal|master|replica|pubsub) -- Kill connections by type.",
|
||||||
" skipme (yes|no) -- Skip killing current connection (default: yes).",
|
" SKIPME (yes|no) -- Skip killing current connection (default: yes).",
|
||||||
"list [options ...] -- Return information about client connections. Options:",
|
"LIST [options ...] -- Return information about client connections. Options:",
|
||||||
" type (normal|master|replica|pubsub) -- Return clients of specified type.",
|
" TYPE (normal|master|replica|pubsub) -- Return clients of specified type.",
|
||||||
"pause <timeout> -- Suspend all Redis clients for <timout> milliseconds.",
|
"PAUSE <timeout> -- Suspend all Redis clients for <timout> milliseconds.",
|
||||||
"reply (on|off|skip) -- Control the replies sent to the current connection.",
|
"REPLY (on|off|skip) -- Control the replies sent to the current connection.",
|
||||||
"setname <name> -- Assign the name <name> to the current connection.",
|
"SETNAME <name> -- Assign the name <name> to the current connection.",
|
||||||
"unblock <clientid> [TIMEOUT|ERROR] -- Unblock the specified blocked client.",
|
"UNBLOCK <clientid> [TIMEOUT|ERROR] -- Unblock the specified blocked client.",
|
||||||
"tracking (on|off) [REDIRECT <id>] -- Enable client keys tracking for client side caching.",
|
"TRACKING (on|off) [REDIRECT <id>] -- Enable client keys tracking for client side caching.",
|
||||||
|
"GETREDIR -- Return the client ID we are redirecting to when tracking is enabled.",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
addReplyHelp(c, help);
|
addReplyHelp(c, help);
|
||||||
@ -2174,6 +2175,13 @@ NULL
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addReply(c,shared.ok);
|
addReply(c,shared.ok);
|
||||||
|
} else if (!strcasecmp(c->argv[1]->ptr,"getredir") && c->argc == 2) {
|
||||||
|
/* CLIENT GETREDIR */
|
||||||
|
if (c->flags & CLIENT_TRACKING) {
|
||||||
|
addReplyLongLong(c,c->client_tracking_redirection);
|
||||||
|
} else {
|
||||||
|
addReplyLongLong(c,-1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
addReplyErrorFormat(c, "Unknown subcommand or wrong number of arguments for '%s'. Try CLIENT HELP", (char*)c->argv[1]->ptr);
|
addReplyErrorFormat(c, "Unknown subcommand or wrong number of arguments for '%s'. Try CLIENT HELP", (char*)c->argv[1]->ptr);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user