提交 a2a69d58 编写于 作者: P Pieter Noordhuis

Refactor help-related code into redis-cli.c

上级 50d0e82d
/* Automatically generated by utils/generate-command-help.rb, do not edit. */
// Auto-generated, do not edit. #ifndef __REDIS_HELP_H
#define __REDIS_HELP_H
#include <stdio.h> static char *commandGroups[] = {
#include <string.h> "generic",
"string",
/* "list",
* List command groups. "set",
*/ "sorted_set",
"hash",
#define GROUPS \ "pubsub",
G(UNKNOWN, "unknown") \ "transactions",
G(SET, "set") \ "connection",
G(LIST, "list") \ "server"
G(HASH, "hash") \
G(GENERIC, "generic") \
G(PUBSUB, "pubsub") \
G(STRING, "string") \
G(SERVER, "server") \
G(CONNECTION, "connection") \
G(TRANSACTIONS, "transactions") \
G(SORTED_SET, "sorted_set")
/*
* Command group types.
*/
typedef enum {
#define G(GROUP, _) COMMAND_GROUP_##GROUP,
GROUPS
#undef G
COMMAND_GROUP_LENGTH
} command_group_type_t;
/*
* Command group type names.
*/
static char *command_group_type_names[] = {
#define G(_, STR) STR,
GROUPS
#undef G
}; };
/* struct commandHelp {
* Command help struct.
*/
struct command_help {
char *name; char *name;
char *params; char *params;
char *summary; char *summary;
command_group_type_t group; int group;
char *since; char *since;
} command_help[] = { } commandHelp[] = {
{ "APPEND", { "APPEND",
"key value", "key value",
"Append a value to a key", "Append a value to a key",
COMMAND_GROUP_STRING, 1,
"1.3.3" } "1.3.3" },
, { "AUTH", { "AUTH",
"password", "password",
"Authenticate to the server", "Authenticate to the server",
COMMAND_GROUP_CONNECTION, 8,
"0.08" } "0.08" },
, { "BGREWRITEAOF", { "BGREWRITEAOF",
"-", "-",
"Asynchronously rewrite the append-only file", "Asynchronously rewrite the append-only file",
COMMAND_GROUP_SERVER, 9,
"1.07" } "1.07" },
, { "BGSAVE", { "BGSAVE",
"-", "-",
"Asynchronously save the dataset to disk", "Asynchronously save the dataset to disk",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "BLPOP", { "BLPOP",
"key [key ...] timeout", "key [key ...] timeout",
"Remove and get the first element in a list, or block until one is available", "Remove and get the first element in a list, or block until one is available",
COMMAND_GROUP_LIST, 2,
"1.3.1" } "1.3.1" },
, { "BRPOP", { "BRPOP",
"key [key ...] timeout", "key [key ...] timeout",
"Remove and get the last element in a list, or block until one is available", "Remove and get the last element in a list, or block until one is available",
COMMAND_GROUP_LIST, 2,
"1.3.1" } "1.3.1" },
, { "CONFIG GET", { "CONFIG GET",
"parameter", "parameter",
"Get the value of a configuration parameter", "Get the value of a configuration parameter",
COMMAND_GROUP_SERVER, 9,
"2.0" } "2.0" },
, { "CONFIG SET", { "CONFIG SET",
"parameter value", "parameter value",
"Set a configuration parameter to the given value", "Set a configuration parameter to the given value",
COMMAND_GROUP_SERVER, 9,
"2.0" } "2.0" },
, { "DBSIZE", { "DBSIZE",
"-", "-",
"Return the number of keys in the selected database", "Return the number of keys in the selected database",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "DEBUG OBJECT", { "DEBUG OBJECT",
"key", "key",
"Get debugging information about a key", "Get debugging information about a key",
COMMAND_GROUP_SERVER, 9,
"0.101" } "0.101" },
, { "DEBUG SEGFAULT", { "DEBUG SEGFAULT",
"-", "-",
"Make the server crash", "Make the server crash",
COMMAND_GROUP_SERVER, 9,
"0.101" } "0.101" },
, { "DECR", { "DECR",
"key decrement", "key decrement",
"Decrement the integer value of a key by one", "Decrement the integer value of a key by one",
COMMAND_GROUP_STRING, 1,
"0.07" } "0.07" },
, { "DECRBY", { "DECRBY",
"key decrement", "key decrement",
"Decrement the integer value of a key by the given number", "Decrement the integer value of a key by the given number",
COMMAND_GROUP_STRING, 1,
"0.07" } "0.07" },
, { "DEL", { "DEL",
"key [key ...]", "key [key ...]",
"Delete a key", "Delete a key",
COMMAND_GROUP_GENERIC, 0,
"0.07" } "0.07" },
, { "DISCARD", { "DISCARD",
"-", "-",
"Discard all commands issued after MULTI", "Discard all commands issued after MULTI",
COMMAND_GROUP_TRANSACTIONS, 7,
"1.3.3" } "1.3.3" },
, { "ECHO", { "ECHO",
"message", "message",
"Echo the given string", "Echo the given string",
COMMAND_GROUP_CONNECTION, 8,
"0.07" } "0.07" },
, { "EXEC", { "EXEC",
"-", "-",
"Execute all commands issued after MULTI", "Execute all commands issued after MULTI",
COMMAND_GROUP_TRANSACTIONS, 7,
"1.1.95" } "1.1.95" },
, { "EXISTS", { "EXISTS",
"key", "key",
"Determine if a key exists", "Determine if a key exists",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "EXPIRE", { "EXPIRE",
"key seconds", "key seconds",
"Set a key's time to live in seconds", "Set a key's time to live in seconds",
COMMAND_GROUP_GENERIC, 0,
"0.09" } "0.09" },
, { "EXPIREAT", { "EXPIREAT",
"key timestamp", "key timestamp",
"Set the expiration for a key as a UNIX timestamp", "Set the expiration for a key as a UNIX timestamp",
COMMAND_GROUP_GENERIC, 0,
"1.1" } "1.1" },
, { "FLUSHALL", { "FLUSHALL",
"-", "-",
"Remove all keys from all databases", "Remove all keys from all databases",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "FLUSHDB", { "FLUSHDB",
"-", "-",
"Remove all keys from the current database", "Remove all keys from the current database",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "GET", { "GET",
"key", "key",
"Get the value of a key", "Get the value of a key",
COMMAND_GROUP_STRING, 1,
"0.07" } "0.07" },
, { "GETSET", { "GETSET",
"key value", "key value",
"Set the string value of a key and return its old value", "Set the string value of a key and return its old value",
COMMAND_GROUP_STRING, 1,
"0.091" } "0.091" },
, { "HDEL", { "HDEL",
"key field", "key field",
"Delete a hash field", "Delete a hash field",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "HEXISTS", { "HEXISTS",
"key field", "key field",
"Determine if a hash field exists", "Determine if a hash field exists",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "HGET", { "HGET",
"key field", "key field",
"Get the value of a hash field", "Get the value of a hash field",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "HGETALL", { "HGETALL",
"key", "key",
"Get all the fields and values in a hash", "Get all the fields and values in a hash",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "HINCRBY", { "HINCRBY",
"key field increment", "key field increment",
"Increment the integer value of a hash field by the given number", "Increment the integer value of a hash field by the given number",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "HKEYS", { "HKEYS",
"key", "key",
"Get all the fields in a hash", "Get all the fields in a hash",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "HLEN", { "HLEN",
"key", "key",
"Get the number of fields in a hash", "Get the number of fields in a hash",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "HMGET", { "HMGET",
"key field [field ...]", "key field [field ...]",
"Get the values of all the given hash fields", "Get the values of all the given hash fields",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "HMSET", { "HMSET",
"key field value [field value ...]", "key field value [field value ...]",
"Set multiple hash fields to multiple values", "Set multiple hash fields to multiple values",
COMMAND_GROUP_HASH, 5,
"1.3.8" } "1.3.8" },
, { "HSET", { "HSET",
"key field value", "key field value",
"Set the string value of a hash field", "Set the string value of a hash field",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "HSETNX", { "HSETNX",
"key field value", "key field value",
"Set the value of a hash field, only if the field does not exist", "Set the value of a hash field, only if the field does not exist",
COMMAND_GROUP_HASH, 5,
"1.3.8" } "1.3.8" },
, { "HVALS", { "HVALS",
"key", "key",
"Get all the values in a hash", "Get all the values in a hash",
COMMAND_GROUP_HASH, 5,
"1.3.10" } "1.3.10" },
, { "INCR", { "INCR",
"key", "key",
"Increment the integer value of a key by one", "Increment the integer value of a key by one",
COMMAND_GROUP_STRING, 1,
"0.07" } "0.07" },
, { "INCRBY", { "INCRBY",
"key increment", "key increment",
"Increment the integer value of a key by the given number", "Increment the integer value of a key by the given number",
COMMAND_GROUP_STRING, 1,
"0.07" } "0.07" },
, { "INFO", { "INFO",
"-", "-",
"Get information and statistics about the server", "Get information and statistics about the server",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "KEYS", { "KEYS",
"pattern", "pattern",
"Find all keys matching the given pattern", "Find all keys matching the given pattern",
COMMAND_GROUP_GENERIC, 0,
"0.07" } "0.07" },
, { "LASTSAVE", { "LASTSAVE",
"-", "-",
"Get the UNIX time stamp of the last successful save to disk", "Get the UNIX time stamp of the last successful save to disk",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "LINDEX", { "LINDEX",
"key index", "key index",
"Get an element from a list by its index", "Get an element from a list by its index",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "LINSERT", { "LINSERT",
"key BEFORE|AFTER pivot value", "key BEFORE|AFTER pivot value",
"Insert an element before or after another element in a list", "Insert an element before or after another element in a list",
COMMAND_GROUP_LIST, 2,
"2.1.1" } "2.1.1" },
, { "LLEN", { "LLEN",
"key", "key",
"Get the length of a list", "Get the length of a list",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "LPOP", { "LPOP",
"key", "key",
"Remove and get the first element in a list", "Remove and get the first element in a list",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "LPUSH", { "LPUSH",
"key value", "key value",
"Prepend a value to a list", "Prepend a value to a list",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "LPUSHX", { "LPUSHX",
"key value", "key value",
"Prepend a value to a list, only if the list exists", "Prepend a value to a list, only if the list exists",
COMMAND_GROUP_LIST, 2,
"2.1.1" } "2.1.1" },
, { "LRANGE", { "LRANGE",
"key start stop", "key start stop",
"Get a range of elements from a list", "Get a range of elements from a list",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "LREM", { "LREM",
"key count value", "key count value",
"Remove elements from a list", "Remove elements from a list",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "LSET", { "LSET",
"key index value", "key index value",
"Set the value of an element in a list by its index", "Set the value of an element in a list by its index",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "LTRIM", { "LTRIM",
"key start stop", "key start stop",
"Trim a list to the specified range", "Trim a list to the specified range",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "MGET", { "MGET",
"key [key ...]", "key [key ...]",
"Get the values of all the given keys", "Get the values of all the given keys",
COMMAND_GROUP_STRING, 1,
"0.07" } "0.07" },
, { "MONITOR", { "MONITOR",
"-", "-",
"Listen for all requests received by the server in real time", "Listen for all requests received by the server in real time",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "MOVE", { "MOVE",
"key db", "key db",
"Move a key to another database", "Move a key to another database",
COMMAND_GROUP_GENERIC, 0,
"0.07" } "0.07" },
, { "MSET", { "MSET",
"key value [key value ...]", "key value [key value ...]",
"Set multiple keys to multiple values", "Set multiple keys to multiple values",
COMMAND_GROUP_STRING, 1,
"1.001" } "1.001" },
, { "MSETNX", { "MSETNX",
"key value [key value ...]", "key value [key value ...]",
"Set multiple keys to multiple values, only if none of the keys exist", "Set multiple keys to multiple values, only if none of the keys exist",
COMMAND_GROUP_STRING, 1,
"1.001" } "1.001" },
, { "MULTI", { "MULTI",
"-", "-",
"Mark the start of a transaction block", "Mark the start of a transaction block",
COMMAND_GROUP_TRANSACTIONS, 7,
"1.1.95" } "1.1.95" },
, { "PERSIST", { "PERSIST",
"key", "key",
"Remove the expiration from a key", "Remove the expiration from a key",
COMMAND_GROUP_GENERIC, 0,
"2.1.2" } "2.1.2" },
, { "PING", { "PING",
"-", "-",
"Ping the server", "Ping the server",
COMMAND_GROUP_CONNECTION, 8,
"0.07" } "0.07" },
, { "PSUBSCRIBE", { "PSUBSCRIBE",
"pattern", "pattern",
"Listen for messages published to channels matching the given patterns", "Listen for messages published to channels matching the given patterns",
COMMAND_GROUP_PUBSUB, 6,
"1.3.8" } "1.3.8" },
, { "PUBLISH", { "PUBLISH",
"channel message", "channel message",
"Post a message to a channel", "Post a message to a channel",
COMMAND_GROUP_PUBSUB, 6,
"1.3.8" } "1.3.8" },
, { "PUNSUBSCRIBE", { "PUNSUBSCRIBE",
"[pattern [pattern ...]]", "[pattern [pattern ...]]",
"Stop listening for messages posted to channels matching the given patterns", "Stop listening for messages posted to channels matching the given patterns",
COMMAND_GROUP_PUBSUB, 6,
"1.3.8" } "1.3.8" },
, { "QUIT", { "QUIT",
"-", "-",
"Close the connection", "Close the connection",
COMMAND_GROUP_CONNECTION, 8,
"0.07" } "0.07" },
, { "RANDOMKEY", { "RANDOMKEY",
"-", "-",
"Return a random key from the keyspace", "Return a random key from the keyspace",
COMMAND_GROUP_GENERIC, 0,
"0.07" } "0.07" },
, { "RENAME", { "RENAME",
"old new", "old new",
"Rename a key", "Rename a key",
COMMAND_GROUP_GENERIC, 0,
"0.07" } "0.07" },
, { "RENAMENX", { "RENAMENX",
"old new", "old new",
"Rename a key, only if the new key does not exist", "Rename a key, only if the new key does not exist",
COMMAND_GROUP_GENERIC, 0,
"0.07" } "0.07" },
, { "RPOP", { "RPOP",
"key", "key",
"Remove and get the last element in a list", "Remove and get the last element in a list",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "RPOPLPUSH", { "RPOPLPUSH",
"source destination", "source destination",
"Remove the last element in a list, append it to another list and return it", "Remove the last element in a list, append it to another list and return it",
COMMAND_GROUP_LIST, 2,
"1.1" } "1.1" },
, { "RPUSH", { "RPUSH",
"key value", "key value",
"Append a value to a list", "Append a value to a list",
COMMAND_GROUP_LIST, 2,
"0.07" } "0.07" },
, { "RPUSHX", { "RPUSHX",
"key value", "key value",
"Append a value to a list, only if the list exists", "Append a value to a list, only if the list exists",
COMMAND_GROUP_LIST, 2,
"2.1.1" } "2.1.1" },
, { "SADD", { "SADD",
"key member", "key member",
"Add a member to a set", "Add a member to a set",
COMMAND_GROUP_SET, 3,
"0.07" } "0.07" },
, { "SAVE", { "SAVE",
"-", "-",
"Synchronously save the dataset to disk", "Synchronously save the dataset to disk",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "SCARD", { "SCARD",
"key", "key",
"Get the number of members in a set", "Get the number of members in a set",
COMMAND_GROUP_SET, 3,
"0.07" } "0.07" },
, { "SDIFF", { "SDIFF",
"key [key ...]", "key [key ...]",
"Subtract multiple sets", "Subtract multiple sets",
COMMAND_GROUP_SET, 3,
"0.100" } "0.100" },
, { "SDIFFSTORE", { "SDIFFSTORE",
"destination key [key ...]", "destination key [key ...]",
"Subtract multiple sets and store the resulting set in a key", "Subtract multiple sets and store the resulting set in a key",
COMMAND_GROUP_SET, 3,
"0.100" } "0.100" },
, { "SELECT", { "SELECT",
"index", "index",
"Change the selected database for the current connection", "Change the selected database for the current connection",
COMMAND_GROUP_CONNECTION, 8,
"0.07" } "0.07" },
, { "SET", { "SET",
"key value", "key value",
"Set the string value of a key", "Set the string value of a key",
COMMAND_GROUP_STRING, 1,
"0.07" } "0.07" },
, { "SETEX", { "SETEX",
"key timestamp value", "key timestamp value",
"Set the value and expiration of a key", "Set the value and expiration of a key",
COMMAND_GROUP_STRING, 1,
"1.3.10" } "1.3.10" },
, { "SETNX", { "SETNX",
"key value", "key value",
"Set the value of a key, only if the key does not exist", "Set the value of a key, only if the key does not exist",
COMMAND_GROUP_STRING, 1,
"0.07" } "0.07" },
, { "SHUTDOWN", { "SHUTDOWN",
"-", "-",
"Synchronously save the dataset to disk and then shut down the server", "Synchronously save the dataset to disk and then shut down the server",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "SINTER", { "SINTER",
"key [key ...]", "key [key ...]",
"Intersect multiple sets", "Intersect multiple sets",
COMMAND_GROUP_SET, 3,
"0.07" } "0.07" },
, { "SINTERSTORE", { "SINTERSTORE",
"destination key [key ...]", "destination key [key ...]",
"Intersect multiple sets and store the resulting set in a key", "Intersect multiple sets and store the resulting set in a key",
COMMAND_GROUP_SET, 3,
"0.07" } "0.07" },
, { "SISMEMBER", { "SISMEMBER",
"key member", "key member",
"Determine if a given value is a member of a set", "Determine if a given value is a member of a set",
COMMAND_GROUP_SET, 3,
"0.07" } "0.07" },
, { "SLAVEOF", { "SLAVEOF",
"host port", "host port",
"Make the server a slave of another instance, or promote it as master", "Make the server a slave of another instance, or promote it as master",
COMMAND_GROUP_SERVER, 9,
"0.100" } "0.100" },
, { "SMEMBERS", { "SMEMBERS",
"key", "key",
"Get all the members in a set", "Get all the members in a set",
COMMAND_GROUP_SET, 3,
"0.07" } "0.07" },
, { "SMOVE", { "SMOVE",
"source destination member", "source destination member",
"Move a member from one set to another", "Move a member from one set to another",
COMMAND_GROUP_SET, 3,
"0.091" } "0.091" },
, { "SORT", { "SORT",
"key [BY pattern] [LIMIT start count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]", "key [BY pattern] [LIMIT start count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]",
"Sort the elements in a list, set or sorted set", "Sort the elements in a list, set or sorted set",
COMMAND_GROUP_GENERIC, 0,
"0.07" } "0.07" },
, { "SPOP", { "SPOP",
"key", "key",
"Remove and return a random member from a set", "Remove and return a random member from a set",
COMMAND_GROUP_SET, 3,
"0.101" } "0.101" },
, { "SRANDMEMBER", { "SRANDMEMBER",
"key", "key",
"Get a random member from a set", "Get a random member from a set",
COMMAND_GROUP_SET, 3,
"1.001" } "1.001" },
, { "SREM", { "SREM",
"key member", "key member",
"Remove a member from a set", "Remove a member from a set",
COMMAND_GROUP_SET, 3,
"0.07" } "0.07" },
, { "STRLEN", { "STRLEN",
"key", "key",
"Get the length of the value stored in a key", "Get the length of the value stored in a key",
COMMAND_GROUP_STRING, 1,
"2.1.2" } "2.1.2" },
, { "SUBSCRIBE", { "SUBSCRIBE",
"channel", "channel",
"Listen for messages published to the given channels", "Listen for messages published to the given channels",
COMMAND_GROUP_PUBSUB, 6,
"1.3.8" } "1.3.8" },
, { "SUBSTR", { "SUBSTR",
"key start stop", "key start stop",
"Get a substring of the string stored at a key", "Get a substring of the string stored at a key",
COMMAND_GROUP_STRING, 1,
"1.3.4" } "1.3.4" },
, { "SUNION", { "SUNION",
"key [key ...]", "key [key ...]",
"Add multiple sets", "Add multiple sets",
COMMAND_GROUP_SET, 3,
"0.091" } "0.091" },
, { "SUNIONSTORE", { "SUNIONSTORE",
"destination key [key ...]", "destination key [key ...]",
"Add multiple sets and store the resulting set in a key", "Add multiple sets and store the resulting set in a key",
COMMAND_GROUP_SET, 3,
"0.091" } "0.091" },
, { "SYNC", { "SYNC",
"-", "-",
"Internal command used for replication", "Internal command used for replication",
COMMAND_GROUP_SERVER, 9,
"0.07" } "0.07" },
, { "TTL", { "TTL",
"key", "key",
"Get the time to live for a key", "Get the time to live for a key",
COMMAND_GROUP_GENERIC, 0,
"0.100" } "0.100" },
, { "TYPE", { "TYPE",
"key", "key",
"Determine the type stored at key", "Determine the type stored at key",
COMMAND_GROUP_GENERIC, 0,
"0.07" } "0.07" },
, { "UNSUBSCRIBE", { "UNSUBSCRIBE",
"[channel [channel ...]]", "[channel [channel ...]]",
"Stop listening for messages posted to the given channels", "Stop listening for messages posted to the given channels",
COMMAND_GROUP_PUBSUB, 6,
"1.3.8" } "1.3.8" },
, { "UNWATCH", { "UNWATCH",
"-", "-",
"Forget about all watched keys", "Forget about all watched keys",
COMMAND_GROUP_TRANSACTIONS, 7,
"2.1.0" } "2.1.0" },
, { "WATCH", { "WATCH",
"key [key ...]", "key [key ...]",
"Watch the given keys to determine execution of the MULTI/EXEC block", "Watch the given keys to determine execution of the MULTI/EXEC block",
COMMAND_GROUP_TRANSACTIONS, 7,
"2.1.0" } "2.1.0" },
, { "ZADD", { "ZADD",
"key score member", "key score member",
"Add a member to a sorted set, or update its score if it already exists", "Add a member to a sorted set, or update its score if it already exists",
COMMAND_GROUP_SORTED_SET, 4,
"1.1" } "1.1" },
, { "ZCARD", { "ZCARD",
"key", "key",
"Get the number of members in a sorted set", "Get the number of members in a sorted set",
COMMAND_GROUP_SORTED_SET, 4,
"1.1" } "1.1" },
, { "ZCOUNT", { "ZCOUNT",
"key min max", "key min max",
"Count the members in a sorted set with scores within the given values", "Count the members in a sorted set with scores within the given values",
COMMAND_GROUP_SORTED_SET, 4,
"1.3.3" } "1.3.3" },
, { "ZINCRBY", { "ZINCRBY",
"key increment member", "key increment member",
"Increment the score of a member in a sorted set", "Increment the score of a member in a sorted set",
COMMAND_GROUP_SORTED_SET, 4,
"1.1" } "1.1" },
, { "ZINTERSTORE", { "ZINTERSTORE",
"destination key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]", "destination key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]",
"Intersect multiple sorted sets and store the resulting sorted set in a new key", "Intersect multiple sorted sets and store the resulting sorted set in a new key",
COMMAND_GROUP_SORTED_SET, 4,
"1.3.10" } "1.3.10" },
, { "ZRANGE", { "ZRANGE",
"key start stop", "key start stop",
"Return a range of members in a sorted set, by index", "Return a range of members in a sorted set, by index",
COMMAND_GROUP_SORTED_SET, 4,
"1.1" } "1.1" },
, { "ZRANGEBYSCORE", { "ZRANGEBYSCORE",
"key min max", "key min max",
"Return a range of members in a sorted set, by score", "Return a range of members in a sorted set, by score",
COMMAND_GROUP_SORTED_SET, 4,
"1.050" } "1.050" },
, { "ZRANK", { "ZRANK",
"key member", "key member",
"Determine the index of a member in a sorted set", "Determine the index of a member in a sorted set",
COMMAND_GROUP_SORTED_SET, 4,
"1.3.4" } "1.3.4" },
, { "ZREM", { "ZREM",
"key member", "key member",
"Remove a member from a sorted set", "Remove a member from a sorted set",
COMMAND_GROUP_SORTED_SET, 4,
"1.1" } "1.1" },
, { "ZREMRANGEBYRANK", { "ZREMRANGEBYRANK",
"key start stop", "key start stop",
"Remove all members in a sorted set within the given indexes", "Remove all members in a sorted set within the given indexes",
COMMAND_GROUP_SORTED_SET, 4,
"1.3.4" } "1.3.4" },
, { "ZREMRANGEBYSCORE", { "ZREMRANGEBYSCORE",
"key min max", "key min max",
"Remove all members in a sorted set within the given scores", "Remove all members in a sorted set within the given scores",
COMMAND_GROUP_SORTED_SET, 4,
"1.1" } "1.1" },
, { "ZREVRANGE", { "ZREVRANGE",
"key start stop", "key start stop",
"Return a range of members in a sorted set, by index, with scores ordered from high to low", "Return a range of members in a sorted set, by index, with scores ordered from high to low",
COMMAND_GROUP_SORTED_SET, 4,
"1.1" } "1.1" },
, { "ZREVRANK", { "ZREVRANK",
"key member", "key member",
"Determine the index of a member in a sorted set, with scores ordered from high to low", "Determine the index of a member in a sorted set, with scores ordered from high to low",
COMMAND_GROUP_SORTED_SET, 4,
"1.3.4" } "1.3.4" },
, { "ZSCORE", { "ZSCORE",
"key member", "key member",
"Get the score associated with the given member in a sorted set", "Get the score associated with the given member in a sorted set",
COMMAND_GROUP_SORTED_SET, 4,
"1.1" } "1.1" },
, { "ZUNIONSTORE", { "ZUNIONSTORE",
"destination key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]", "destination key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]",
"Add multiple sorted sets and store the resulting sorted set in a new key", "Add multiple sorted sets and store the resulting sorted set in a new key",
COMMAND_GROUP_SORTED_SET, 4,
"1.3.10" } "1.3.10" }
}; };
/* #endif
* Output command help to stdout.
*/
static void
output_command_help(struct command_help *help) {
printf("\n \x1b[1m%s\x1b[0m \x1b[90m%s\x1b[0m\n", help->name, help->params);
printf(" \x1b[33msummary:\x1b[0m %s\n", help->summary);
printf(" \x1b[33msince:\x1b[0m %s\n", help->since);
printf(" \x1b[33mgroup:\x1b[0m %s\n", command_group_type_names[help->group]);
}
/*
* Return command group type by name string.
*/
static command_group_type_t
command_group_type_by_name(const char *name) {
for (int i = 0; i < COMMAND_GROUP_LENGTH; ++i) {
const char *group = command_group_type_names[i];
if (0 == strcasecmp(name, group)) return i;
}
return 0;
}
/*
* Output group names.
*/
static void
output_group_help() {
for (int i = 0; i < COMMAND_GROUP_LENGTH; ++i) {
if (COMMAND_GROUP_UNKNOWN == i) continue;
const char *group = command_group_type_names[i];
printf(" \x1b[90m-\x1b[0m %s\n", group);
}
}
/*
* Output all command help, filtering by group or command name.
*/
static void
output_help(int argc, const char **argv) {
int len = sizeof(command_help) / sizeof(struct command_help);
if (argc && 0 == strcasecmp("groups", argv[0])) {
output_group_help();
return;
}
command_group_type_t group = argc
? command_group_type_by_name(argv[0])
: COMMAND_GROUP_UNKNOWN;
for (int i = 0; i < len; ++i) {
struct command_help help = command_help[i];
if (argc && !group && 0 != strcasecmp(help.name, argv[0])) continue;
if (group && group != help.group) continue;
output_command_help(&help);
}
puts("");
}
...@@ -84,6 +84,65 @@ static long long mstime(void) { ...@@ -84,6 +84,65 @@ static long long mstime(void) {
return mst; return mst;
} }
/*------------------------------------------------------------------------------
* Help functions
*--------------------------------------------------------------------------- */
/* Output command help to stdout. */
static void outputCommandHelp(struct commandHelp *help) {
printf("\n \x1b[1m%s\x1b[0m \x1b[90m%s\x1b[0m\n", help->name, help->params);
printf(" \x1b[33msummary:\x1b[0m %s\n", help->summary);
printf(" \x1b[33msince:\x1b[0m %s\n", help->since);
printf(" \x1b[33mgroup:\x1b[0m %s\n", commandGroups[help->group]);
}
/* Return command group type by name string. */
static int commandGroupIndex(const char *name) {
int i, len = sizeof(commandGroups)/sizeof(char*);
for (i = 0; i < len; i++)
if (strcasecmp(name, commandGroups[i]) == 0)
return i;
return -1;
}
/* Output group names. */
static void outputGroupHelp() {
int i, len = sizeof(commandGroups)/sizeof(char*);
for (i = 0; i < len; i++)
printf(" \x1b[90m-\x1b[0m %s\n", commandGroups[i]);
}
/* Output all command help, filtering by group or command name. */
static void outputHelp(int argc, char **argv) {
int i, len = sizeof(commandHelp) / sizeof(struct commandHelp);
int group;
struct commandHelp *help;
if (argc && strcasecmp("groups", argv[0]) == 0) {
outputGroupHelp();
return;
}
group = argc ? commandGroupIndex(argv[0]) : -1;
for (i = 0; i < len; i++) {
help = &commandHelp[i];
if (group == -1) {
if (argc) {
if (strcasecmp(help->name, argv[0]) == 0) {
outputCommandHelp(help);
}
} else {
outputCommandHelp(help);
}
} else {
if (group == help->group) {
outputCommandHelp(help);
}
}
}
puts("");
}
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
* Networking / parsing * Networking / parsing
*--------------------------------------------------------------------------- */ *--------------------------------------------------------------------------- */
...@@ -260,7 +319,7 @@ static int cliSendCommand(int argc, char **argv, int repeat) { ...@@ -260,7 +319,7 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
config.raw_output = !strcasecmp(command,"info"); config.raw_output = !strcasecmp(command,"info");
if (!strcasecmp(command,"help")) { if (!strcasecmp(command,"help")) {
output_help(--argc, ++argv); outputHelp(--argc, ++argv);
return REDIS_OK; return REDIS_OK;
} }
if (!strcasecmp(command,"shutdown")) config.shutdown = 1; if (!strcasecmp(command,"shutdown")) config.shutdown = 1;
......
#!/usr/bin/env ruby #!/usr/bin/env ruby
GROUPS = [
"generic",
"string",
"list",
"set",
"sorted_set",
"hash",
"pubsub",
"transactions",
"connection",
"server"
].freeze
GROUPS_BY_NAME = Hash[*
GROUPS.each_with_index.map do |n,i|
[n,i]
end.flatten
].freeze
def argument arg def argument arg
name = arg["name"].is_a?(Array) ? arg["name"].join(" ") : arg["name"] name = arg["name"].is_a?(Array) ? arg["name"].join(" ") : arg["name"]
name = arg["enum"].join "|" if "enum" == arg["type"] name = arg["enum"].join "|" if "enum" == arg["type"]
...@@ -39,21 +58,54 @@ def commands ...@@ -39,21 +58,54 @@ def commands
end end
end end
def generate_groups
GROUPS.map do |n|
"\"#{n}\""
end.join(",\n ");
end
def generate_commands def generate_commands
commands.to_a.sort do |x,y| commands.to_a.sort do |x,y|
x[0] <=> y[0] x[0] <=> y[0]
end.map do |key, command| end.map do |key, command|
<<-SPEC group = GROUPS_BY_NAME[command["group"]]
if group.nil?
STDERR.puts "Please update groups array in #{__FILE__}"
raise "Unknown group #{command["group"]}"
end
ret = <<-SPEC
{ "#{key}", { "#{key}",
"#{arguments(command)}", "#{arguments(command)}",
"#{command["summary"]}", "#{command["summary"]}",
COMMAND_GROUP_#{command["group"].upcase}, #{group},
"#{command["since"]}" } "#{command["since"]}" }
SPEC SPEC
end.join(", ") ret.strip
end.join(",\n ")
end end
# Write to stdout # Write to stdout
tmpl = File.read "./utils/help.h" puts <<-HELP_H
puts "\n// Auto-generated, do not edit.\n" + tmpl.sub("__COMMANDS__", generate_commands) /* Automatically generated by #{__FILE__}, do not edit. */
#ifndef __REDIS_HELP_H
#define __REDIS_HELP_H
static char *commandGroups[] = {
#{generate_groups}
};
struct commandHelp {
char *name;
char *params;
char *summary;
int group;
char *since;
} commandHelp[] = {
#{generate_commands}
};
#endif
HELP_H
#include <stdio.h>
#include <string.h>
/*
* List command groups.
*/
#define GROUPS \
G(UNKNOWN, "unknown") \
G(SET, "set") \
G(LIST, "list") \
G(HASH, "hash") \
G(GENERIC, "generic") \
G(PUBSUB, "pubsub") \
G(STRING, "string") \
G(SERVER, "server") \
G(CONNECTION, "connection") \
G(TRANSACTIONS, "transactions") \
G(SORTED_SET, "sorted_set")
/*
* Command group types.
*/
typedef enum {
#define G(GROUP, _) COMMAND_GROUP_##GROUP,
GROUPS
#undef G
COMMAND_GROUP_LENGTH
} command_group_type_t;
/*
* Command group type names.
*/
static char *command_group_type_names[] = {
#define G(_, STR) STR,
GROUPS
#undef G
};
/*
* Command help struct.
*/
struct command_help {
char *name;
char *params;
char *summary;
command_group_type_t group;
char *since;
} command_help[] = {
__COMMANDS__
};
/*
* Output command help to stdout.
*/
static void
output_command_help(struct command_help *help) {
printf("\n \x1b[1m%s\x1b[0m \x1b[90m%s\x1b[0m\n", help->name, help->params);
printf(" \x1b[33msummary:\x1b[0m %s\n", help->summary);
printf(" \x1b[33msince:\x1b[0m %s\n", help->since);
printf(" \x1b[33mgroup:\x1b[0m %s\n", command_group_type_names[help->group]);
}
/*
* Return command group type by name string.
*/
static command_group_type_t
command_group_type_by_name(const char *name) {
for (int i = 0; i < COMMAND_GROUP_LENGTH; ++i) {
const char *group = command_group_type_names[i];
if (0 == strcasecmp(name, group)) return i;
}
return 0;
}
/*
* Output group names.
*/
static void
output_group_help() {
for (int i = 0; i < COMMAND_GROUP_LENGTH; ++i) {
if (COMMAND_GROUP_UNKNOWN == i) continue;
const char *group = command_group_type_names[i];
printf(" \x1b[90m-\x1b[0m %s\n", group);
}
}
/*
* Output all command help, filtering by group or command name.
*/
static void
output_help(int argc, const char **argv) {
int len = sizeof(command_help) / sizeof(struct command_help);
if (argc && 0 == strcasecmp("groups", argv[0])) {
output_group_help();
return;
}
command_group_type_t group = argc
? command_group_type_by_name(argv[0])
: COMMAND_GROUP_UNKNOWN;
for (int i = 0; i < len; ++i) {
struct command_help help = command_help[i];
if (argc && !group && 0 != strcasecmp(help.name, argv[0])) continue;
if (group && group != help.group) continue;
output_command_help(&help);
}
puts("");
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册