Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
9e4fb96c
Commit
9e4fb96c
authored
Jan 22, 2019
by
antirez
Browse files
ACL: review of Redis command table and new flags format.
However the code is yet not able to parse the new flags format.
parent
561661b1
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/server.c
View file @
9e4fb96c
...
@@ -95,239 +95,864 @@ volatile unsigned long lru_clock; /* Server global current LRU time. */
...
@@ -95,239 +95,864 @@ volatile unsigned long lru_clock; /* Server global current LRU time. */
* The flags, microseconds and calls fields are computed by Redis and should
* The flags, microseconds and calls fields are computed by Redis and should
* always be set to zero.
* always be set to zero.
*
*
* Command flags are expressed using strings where every character represents
* Command flags are expressed using space separated strings, that are turned
* a flag. Later the populateCommandTable() function will take care of
* into actual flags by the populateCommandTable() function.
* populating the real 'flags' field using this characters.
*
*
* This is the meaning of the flags:
* This is the meaning of the flags:
*
*
* w: write command (may modify the key space).
* write: write command (may modify the key space).
* r: read command (will never modify the key space).
* read-only: read-only command that will read data from keys without changing
* m: may increase memory usage once called. Don't allow if out of memory.
* the content. Commands just returning information but not reading
* a: admin command, like SAVE or SHUTDOWN.
* from keys are usually not regarded as read-only commands, however
* p: Pub/Sub related command.
* such commands will also lack the "write" and "admin" flags so
* f: force replication of this command, regardless of server.dirty.
* can be detected. One example is "TIME".
* s: command not allowed in scripts.
* use-memory: may increase memory usage once called. Don't allow if out
* R: random command. Command is not deterministic, that is, the same command
* of memory.
* with the same arguments, with the same key space, may have different
* admin: admin command, like SAVE or SHUTDOWN.
* results. For instance SPOP and RANDOMKEY are two random commands.
* pub-sub: Pub/Sub related command.
* S: Sort command output array if called from script, so that the output
* force-repl: force replication of this command, regardless of server.dirty.
* is deterministic.
* no-script: command not allowed in scripts.
* l: Allow command while loading the database.
* random: random command. Command is not deterministic, that is, the same
* t: Allow command while a slave has stale data but is not allowed to
* command with the same arguments, with the same key space, may have
* serve this data. Normally no command is accepted in this condition
* different results. For instance SPOP and RANDOMKEY are two random
* commands.
* to-sort: Sort command output array if called from script, so that the
* output is deterministic.
* ok-loading: Allow command while loading the database.
* ok-stale: Allow command while a slave has stale data but is not allowed
* to serve this data. Normally no command is accepted in this condition
* but just a few.
* but just a few.
* M: Do not automatically propagate the command on MONITOR.
* no-monitor: Do not automatically propagate the command on MONITOR.
* k: Perform an implicit ASKING for this command, so the command will be
* cluster-asking k: Perform an implicit ASKING for this command, so the
* accepted in cluster mode if the slot is marked as 'importing'.
* command will be accepted in cluster mode if the slot is marked
* F: Fast command: O(1) or O(log(N)) command that should never delay
* as 'importing'.
* fast: Fast command: O(1) or O(log(N)) command that should never delay
* its execution as long as the kernel scheduler is giving us time.
* its execution as long as the kernel scheduler is giving us time.
* Note that commands that may trigger a DEL as a side effect (like SET)
* Note that commands that may trigger a DEL as a side effect (like SET)
* are not fast commands.
* are not fast commands.
*/
*/
struct
redisCommand
redisCommandTable
[]
=
{
struct
redisCommand
redisCommandTable
[]
=
{
{
"module"
,
moduleCommand
,
-
2
,
"as"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"module"
,
moduleCommand
,
-
2
,
{
"get"
,
getCommand
,
2
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"admin no-script"
,
{
"set"
,
setCommand
,
-
3
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"setnx"
,
setnxCommand
,
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"setex"
,
setexCommand
,
4
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"get"
,
getCommand
,
2
,
{
"psetex"
,
psetexCommand
,
4
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only fast"
,
{
"append"
,
appendCommand
,
3
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"strlen"
,
strlenCommand
,
2
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"del"
,
delCommand
,
-
2
,
"w"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
/* Note that we can't flag set as fast, since it may perform an
{
"unlink"
,
unlinkCommand
,
-
2
,
"wF"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
* implicit DEL of a large key. */
{
"exists"
,
existsCommand
,
-
2
,
"rF"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"set"
,
setCommand
,
-
3
,
{
"setbit"
,
setbitCommand
,
4
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory"
,
{
"getbit"
,
getbitCommand
,
3
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"bitfield"
,
bitfieldCommand
,
-
2
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"setrange"
,
setrangeCommand
,
4
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"setnx"
,
setnxCommand
,
3
,
{
"getrange"
,
getrangeCommand
,
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory fast"
,
{
"substr"
,
getrangeCommand
,
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"incr"
,
incrCommand
,
2
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"decr"
,
decrCommand
,
2
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"setex"
,
setexCommand
,
4
,
{
"mget"
,
mgetCommand
,
-
2
,
"rF"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
"write use-memory"
,
{
"rpush"
,
rpushCommand
,
-
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"lpush"
,
lpushCommand
,
-
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"rpushx"
,
rpushxCommand
,
-
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"psetex"
,
psetexCommand
,
4
,
{
"lpushx"
,
lpushxCommand
,
-
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory"
,
{
"linsert"
,
linsertCommand
,
5
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"rpop"
,
rpopCommand
,
2
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"lpop"
,
lpopCommand
,
2
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"append"
,
appendCommand
,
3
,
{
"brpop"
,
brpopCommand
,
-
3
,
"ws"
,
0
,
NULL
,
1
,
-
2
,
1
,
0
,
0
,
0
},
"write use-memory"
,
{
"brpoplpush"
,
brpoplpushCommand
,
4
,
"wms"
,
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"blpop"
,
blpopCommand
,
-
3
,
"ws"
,
0
,
NULL
,
1
,
-
2
,
1
,
0
,
0
,
0
},
{
"llen"
,
llenCommand
,
2
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"strlen"
,
strlenCommand
,
2
,
{
"lindex"
,
lindexCommand
,
3
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only fast"
,
{
"lset"
,
lsetCommand
,
4
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"lrange"
,
lrangeCommand
,
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"ltrim"
,
ltrimCommand
,
4
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"del"
,
delCommand
,
-
2
,
"write"
,
{
"lrem"
,
lremCommand
,
4
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"rpoplpush"
,
rpoplpushCommand
,
3
,
"wm"
,
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
{
"sadd"
,
saddCommand
,
-
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"unlink"
,
unlinkCommand
,
-
2
,
{
"srem"
,
sremCommand
,
-
3
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write fast"
,
{
"smove"
,
smoveCommand
,
4
,
"wF"
,
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"sismember"
,
sismemberCommand
,
3
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"scard"
,
scardCommand
,
2
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"exists"
,
existsCommand
,
-
2
,
{
"spop"
,
spopCommand
,
-
2
,
"wRF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only fast"
,
{
"srandmember"
,
srandmemberCommand
,
-
2
,
"rR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"sinter"
,
sinterCommand
,
-
2
,
"rS"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"sinterstore"
,
sinterstoreCommand
,
-
3
,
"wm"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"setbit"
,
setbitCommand
,
4
,
{
"sunion"
,
sunionCommand
,
-
2
,
"rS"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
"write use-memory"
,
{
"sunionstore"
,
sunionstoreCommand
,
-
3
,
"wm"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"sdiff"
,
sdiffCommand
,
-
2
,
"rS"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"sdiffstore"
,
sdiffstoreCommand
,
-
3
,
"wm"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"getbit"
,
getbitCommand
,
3
,
{
"smembers"
,
sinterCommand
,
2
,
"rS"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only fast"
,
{
"sscan"
,
sscanCommand
,
-
3
,
"rR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zadd"
,
zaddCommand
,
-
4
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zincrby"
,
zincrbyCommand
,
4
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"bitfield"
,
bitfieldCommand
,
-
2
,
{
"zrem"
,
zremCommand
,
-
3
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory"
,
{
"zremrangebyscore"
,
zremrangebyscoreCommand
,
4
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zremrangebyrank"
,
zremrangebyrankCommand
,
4
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zremrangebylex"
,
zremrangebylexCommand
,
4
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"setrange"
,
setrangeCommand
,
4
,
{
"zunionstore"
,
zunionstoreCommand
,
-
4
,
"wm"
,
0
,
zunionInterGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
"write use-memory"
,
{
"zinterstore"
,
zinterstoreCommand
,
-
4
,
"wm"
,
0
,
zunionInterGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrange"
,
zrangeCommand
,
-
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrangebyscore"
,
zrangebyscoreCommand
,
-
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"getrange"
,
getrangeCommand
,
4
,
{
"zrevrangebyscore"
,
zrevrangebyscoreCommand
,
-
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only"
,
{
"zrangebylex"
,
zrangebylexCommand
,
-
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrevrangebylex"
,
zrevrangebylexCommand
,
-
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zcount"
,
zcountCommand
,
4
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"substr"
,
getrangeCommand
,
4
,
{
"zlexcount"
,
zlexcountCommand
,
4
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only"
,
{
"zrevrange"
,
zrevrangeCommand
,
-
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zcard"
,
zcardCommand
,
2
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zscore"
,
zscoreCommand
,
3
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"incr"
,
incrCommand
,
2
,
{
"zrank"
,
zrankCommand
,
3
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory fast"
,
{
"zrevrank"
,
zrevrankCommand
,
3
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zscan"
,
zscanCommand
,
-
3
,
"rR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zpopmin"
,
zpopminCommand
,
-
2
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"decr"
,
decrCommand
,
2
,
{
"zpopmax"
,
zpopmaxCommand
,
-
2
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory fast"
,
{
"bzpopmin"
,
bzpopminCommand
,
-
2
,
"wsF"
,
0
,
NULL
,
1
,
-
2
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"bzpopmax"
,
bzpopmaxCommand
,
-
2
,
"wsF"
,
0
,
NULL
,
1
,
-
2
,
1
,
0
,
0
,
0
},
{
"hset"
,
hsetCommand
,
-
4
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"mget"
,
mgetCommand
,
-
2
,
{
"hsetnx"
,
hsetnxCommand
,
4
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only fast"
,
{
"hget"
,
hgetCommand
,
3
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"hmset"
,
hsetCommand
,
-
4
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hmget"
,
hmgetCommand
,
-
3
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"rpush"
,
rpushCommand
,
-
3
,
{
"hincrby"
,
hincrbyCommand
,
4
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory fast"
,
{
"hincrbyfloat"
,
hincrbyfloatCommand
,
4
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hdel"
,
hdelCommand
,
-
3
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hlen"
,
hlenCommand
,
2
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"lpush"
,
lpushCommand
,
-
3
,
{
"hstrlen"
,
hstrlenCommand
,
3
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory fast"
,
{
"hkeys"
,
hkeysCommand
,
2
,
"rS"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hvals"
,
hvalsCommand
,
2
,
"rS"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hgetall"
,
hgetallCommand
,
2
,
"rR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"rpushx"
,
rpushxCommand
,
-
3
,
{
"hexists"
,
hexistsCommand
,
3
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory fast"
,
{
"hscan"
,
hscanCommand
,
-
3
,
"rR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"incrby"
,
incrbyCommand
,
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"decrby"
,
decrbyCommand
,
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"lpushx"
,
lpushxCommand
,
-
3
,
{
"incrbyfloat"
,
incrbyfloatCommand
,
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory fast"
,
{
"getset"
,
getsetCommand
,
3
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"mset"
,
msetCommand
,
-
3
,
"wm"
,
0
,
NULL
,
1
,
-
1
,
2
,
0
,
0
,
0
},
{
"msetnx"
,
msetnxCommand
,
-
3
,
"wm"
,
0
,
NULL
,
1
,
-
1
,
2
,
0
,
0
,
0
},
{
"linsert"
,
linsertCommand
,
5
,
{
"randomkey"
,
randomkeyCommand
,
1
,
"rR"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write use-memory"
,
{
"select"
,
selectCommand
,
2
,
"lF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"swapdb"
,
swapdbCommand
,
3
,
"wF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"move"
,
moveCommand
,
3
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"rpop"
,
rpopCommand
,
2
,
{
"rename"
,
renameCommand
,
3
,
"w"
,
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
"write fast"
,
{
"renamenx"
,
renamenxCommand
,
3
,
"wF"
,
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"expire"
,
expireCommand
,
3
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"expireat"
,
expireatCommand
,
3
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"lpop"
,
lpopCommand
,
2
,
{
"pexpire"
,
pexpireCommand
,
3
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write fast"
,
{
"pexpireat"
,
pexpireatCommand
,
3
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"keys"
,
keysCommand
,
2
,
"rS"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"scan"
,
scanCommand
,
-
2
,
"rR"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"brpop"
,
brpopCommand
,
-
3
,
{
"dbsize"
,
dbsizeCommand
,
1
,
"rF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write no-script"
,
{
"auth"
,
authCommand
,
-
2
,
"sltF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
2
,
1
,
0
,
0
,
0
},
{
"ping"
,
pingCommand
,
-
1
,
"tF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"echo"
,
echoCommand
,
2
,
"F"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"brpoplpush"
,
brpoplpushCommand
,
4
,
{
"save"
,
saveCommand
,
1
,
"as"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write use-memory no-script"
,
{
"bgsave"
,
bgsaveCommand
,
-
1
,
"as"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
{
"bgrewriteaof"
,
bgrewriteaofCommand
,
1
,
"as"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"shutdown"
,
shutdownCommand
,
-
1
,
"aslt"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"blpop"
,
blpopCommand
,
-
3
,
{
"lastsave"
,
lastsaveCommand
,
1
,
"RF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write no-script"
,
{
"type"
,
typeCommand
,
2
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
2
,
1
,
0
,
0
,
0
},
{
"multi"
,
multiCommand
,
1
,
"sF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"exec"
,
execCommand
,
1
,
"sM"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"llen"
,
llenCommand
,
2
,
{
"discard"
,
discardCommand
,
1
,
"sF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"read-only fast"
,
{
"sync"
,
syncCommand
,
1
,
"ars"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"psync"
,
syncCommand
,
3
,
"ars"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"replconf"
,
replconfCommand
,
-
1
,
"aslt"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"lindex"
,
lindexCommand
,
3
,
{
"flushdb"
,
flushdbCommand
,
-
1
,
"w"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"read-only"
,
{
"flushall"
,
flushallCommand
,
-
1
,
"w"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"sort"
,
sortCommand
,
-
2
,
"wm"
,
0
,
sortGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"info"
,
infoCommand
,
-
1
,
"ltR"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"lset"
,
lsetCommand
,
4
,
{
"monitor"
,
monitorCommand
,
1
,
"as"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write use-memory"
,
{
"ttl"
,
ttlCommand
,
2
,
"rFR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"touch"
,
touchCommand
,
-
2
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"pttl"
,
pttlCommand
,
2
,
"rFR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"lrange"
,
lrangeCommand
,
4
,
{
"persist"
,
persistCommand
,
2
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only"
,
{
"slaveof"
,
replicaofCommand
,
3
,
"ast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"replicaof"
,
replicaofCommand
,
3
,
"ast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"role"
,
roleCommand
,
1
,
"lst"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"ltrim"
,
ltrimCommand
,
4
,
{
"debug"
,
debugCommand
,
-
2
,
"as"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write"
,
{
"config"
,
configCommand
,
-
2
,
"last"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"subscribe"
,
subscribeCommand
,
-
2
,
"pslt"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"unsubscribe"
,
unsubscribeCommand
,
-
1
,
"pslt"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"lrem"
,
lremCommand
,
4
,
{
"psubscribe"
,
psubscribeCommand
,
-
2
,
"pslt"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write"
,
{
"punsubscribe"
,
punsubscribeCommand
,
-
1
,
"pslt"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"publish"
,
publishCommand
,
3
,
"pltF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"pubsub"
,
pubsubCommand
,
-
2
,
"pltR"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"rpoplpush"
,
rpoplpushCommand
,
3
,
{
"watch"
,
watchCommand
,
-
2
,
"sF"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
"write use-memory"
,
{
"unwatch"
,
unwatchCommand
,
1
,
"sF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
{
"cluster"
,
clusterCommand
,
-
2
,
"a"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"restore"
,
restoreCommand
,
-
4
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"sadd"
,
saddCommand
,
-
3
,
{
"restore-asking"
,
restoreCommand
,
-
4
,
"wmk"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory fast"
,
{
"migrate"
,
migrateCommand
,
-
6
,
"wR"
,
0
,
migrateGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"asking"
,
askingCommand
,
1
,
"F"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"readonly"
,
readonlyCommand
,
1
,
"F"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"srem"
,
sremCommand
,
-
3
,
{
"readwrite"
,
readwriteCommand
,
1
,
"F"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write fast"
,
{
"dump"
,
dumpCommand
,
2
,
"rR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"object"
,
objectCommand
,
-
2
,
"rR"
,
0
,
NULL
,
2
,
2
,
1
,
0
,
0
,
0
},
{
"memory"
,
memoryCommand
,
-
2
,
"rR"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"smove"
,
smoveCommand
,
4
,
{
"client"
,
clientCommand
,
-
2
,
"as"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write fast"
,
{
"hello"
,
helloCommand
,
-
2
,
"sF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
{
"eval"
,
evalCommand
,
-
3
,
"s"
,
0
,
evalGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"evalsha"
,
evalShaCommand
,
-
3
,
"s"
,
0
,
evalGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"sismember"
,
sismemberCommand
,
3
,
{
"slowlog"
,
slowlogCommand
,
-
2
,
"aR"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"read-only fast"
,
{
"script"
,
scriptCommand
,
-
2
,
"s"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"time"
,
timeCommand
,
1
,
"RF"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"bitop"
,
bitopCommand
,
-
4
,
"wm"
,
0
,
NULL
,
2
,
-
1
,
1
,
0
,
0
,
0
},
{
"scard"
,
scardCommand
,
2
,
{
"bitcount"
,
bitcountCommand
,
-
2
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only fast"
,
{
"bitpos"
,
bitposCommand
,
-
3
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"wait"
,
waitCommand
,
3
,
"s"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"command"
,
commandCommand
,
0
,
"ltR"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"spop"
,
spopCommand
,
-
2
,
{
"geoadd"
,
geoaddCommand
,
-
5
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write random fast"
,
{
"georadius"
,
georadiusCommand
,
-
6
,
"w"
,
0
,
georadiusGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"georadius_ro"
,
georadiusroCommand
,
-
6
,
"r"
,
0
,
georadiusGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"georadiusbymember"
,
georadiusbymemberCommand
,
-
5
,
"w"
,
0
,
georadiusGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"srandmember"
,
srandmemberCommand
,
-
2
,
{
"georadiusbymember_ro"
,
georadiusbymemberroCommand
,
-
5
,
"r"
,
0
,
georadiusGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only random"
,
{
"geohash"
,
geohashCommand
,
-
2
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"geopos"
,
geoposCommand
,
-
2
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"geodist"
,
geodistCommand
,
-
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"sinter"
,
sinterCommand
,
-
2
,
{
"pfselftest"
,
pfselftestCommand
,
1
,
"a"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"read-only to-sort"
,
{
"pfadd"
,
pfaddCommand
,
-
2
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"pfcount"
,
pfcountCommand
,
-
2
,
"r"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"pfmerge"
,
pfmergeCommand
,
-
2
,
"wm"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"sinterstore"
,
sinterstoreCommand
,
-
3
,
{
"pfdebug"
,
pfdebugCommand
,
-
3
,
"w"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write use-memory"
,
{
"xadd"
,
xaddCommand
,
-
5
,
"wmFR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"xrange"
,
xrangeCommand
,
-
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xrevrange"
,
xrevrangeCommand
,
-
4
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"sunion"
,
sunionCommand
,
-
2
,
{
"xlen"
,
xlenCommand
,
2
,
"rF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"read-only to-sort"
,
{
"xread"
,
xreadCommand
,
-
4
,
"rs"
,
0
,
xreadGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"xreadgroup"
,
xreadCommand
,
-
7
,
"ws"
,
0
,
xreadGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xgroup"
,
xgroupCommand
,
-
2
,
"wm"
,
0
,
NULL
,
2
,
2
,
1
,
0
,
0
,
0
},
{
"sunionstore"
,
sunionstoreCommand
,
-
3
,
{
"xsetid"
,
xsetidCommand
,
3
,
"wmF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
"write use-memory"
,
{
"xack"
,
xackCommand
,
-
4
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"xpending"
,
xpendingCommand
,
-
3
,
"rR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xclaim"
,
xclaimCommand
,
-
6
,
"wRF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"sdiff"
,
sdiffCommand
,
-
2
,
{
"xinfo"
,
xinfoCommand
,
-
2
,
"rR"
,
0
,
NULL
,
2
,
2
,
1
,
0
,
0
,
0
},
"read-only to-sort"
,
{
"xdel"
,
xdelCommand
,
-
3
,
"wF"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"xtrim"
,
xtrimCommand
,
-
2
,
"wFR"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"post"
,
securityWarningCommand
,
-
1
,
"lt"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"sdiffstore"
,
sdiffstoreCommand
,
-
3
,
{
"host:"
,
securityWarningCommand
,
-
1
,
"lt"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
"write use-memory"
,
{
"latency"
,
latencyCommand
,
-
2
,
"aslt"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"lolwut"
,
lolwutCommand
,
-
1
,
"r"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"acl"
,
aclCommand
,
-
2
,
"ast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
}
{
"smembers"
,
sinterCommand
,
2
,
"read-only to-sort"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"sscan"
,
sscanCommand
,
-
3
,
"read-only random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zadd"
,
zaddCommand
,
-
4
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zincrby"
,
zincrbyCommand
,
4
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrem"
,
zremCommand
,
-
3
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zremrangebyscore"
,
zremrangebyscoreCommand
,
4
,
"write"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zremrangebyrank"
,
zremrangebyrankCommand
,
4
,
"write"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zremrangebylex"
,
zremrangebylexCommand
,
4
,
"write"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zunionstore"
,
zunionstoreCommand
,
-
4
,
"write use-memory"
,
0
,
zunionInterGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"zinterstore"
,
zinterstoreCommand
,
-
4
,
"write use-memory"
,
0
,
zunionInterGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"zrange"
,
zrangeCommand
,
-
4
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrangebyscore"
,
zrangebyscoreCommand
,
-
4
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrevrangebyscore"
,
zrevrangebyscoreCommand
,
-
4
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrangebylex"
,
zrangebylexCommand
,
-
4
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrevrangebylex"
,
zrevrangebylexCommand
,
-
4
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zcount"
,
zcountCommand
,
4
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zlexcount"
,
zlexcountCommand
,
4
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrevrange"
,
zrevrangeCommand
,
-
4
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zcard"
,
zcardCommand
,
2
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zscore"
,
zscoreCommand
,
3
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrank"
,
zrankCommand
,
3
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zrevrank"
,
zrevrankCommand
,
3
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zscan"
,
zscanCommand
,
-
3
,
"read-only random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zpopmin"
,
zpopminCommand
,
-
2
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"zpopmax"
,
zpopmaxCommand
,
-
2
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"bzpopmin"
,
bzpopminCommand
,
-
2
,
"write no-script fast"
,
0
,
NULL
,
1
,
-
2
,
1
,
0
,
0
,
0
},
{
"bzpopmax"
,
bzpopmaxCommand
,
-
2
,
"write no-script fast"
,
0
,
NULL
,
1
,
-
2
,
1
,
0
,
0
,
0
},
{
"hset"
,
hsetCommand
,
-
4
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hsetnx"
,
hsetnxCommand
,
4
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hget"
,
hgetCommand
,
3
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hmset"
,
hsetCommand
,
-
4
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hmget"
,
hmgetCommand
,
-
3
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hincrby"
,
hincrbyCommand
,
4
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hincrbyfloat"
,
hincrbyfloatCommand
,
4
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hdel"
,
hdelCommand
,
-
3
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hlen"
,
hlenCommand
,
2
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hstrlen"
,
hstrlenCommand
,
3
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hkeys"
,
hkeysCommand
,
2
,
"read-only to-sort"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hvals"
,
hvalsCommand
,
2
,
"read-only to-sort"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hgetall"
,
hgetallCommand
,
2
,
"read-only random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hexists"
,
hexistsCommand
,
3
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"hscan"
,
hscanCommand
,
-
3
,
"read-only random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"incrby"
,
incrbyCommand
,
3
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"decrby"
,
decrbyCommand
,
3
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"incrbyfloat"
,
incrbyfloatCommand
,
3
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"getset"
,
getsetCommand
,
3
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"mset"
,
msetCommand
,
-
3
,
"write use-memory"
,
0
,
NULL
,
1
,
-
1
,
2
,
0
,
0
,
0
},
{
"msetnx"
,
msetnxCommand
,
-
3
,
"write use-memory"
,
0
,
NULL
,
1
,
-
1
,
2
,
0
,
0
,
0
},
{
"randomkey"
,
randomkeyCommand
,
1
,
"read-only random"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"select"
,
selectCommand
,
2
,
"ok-loading fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"swapdb"
,
swapdbCommand
,
3
,
"write fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"move"
,
moveCommand
,
3
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
/* Like for SET, we can't mark rename as a fast command because
* overwriting the target key may result in an implicit slow DEL. */
{
"rename"
,
renameCommand
,
3
,
"write"
,
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
{
"renamenx"
,
renamenxCommand
,
3
,
"write fast"
,
0
,
NULL
,
1
,
2
,
1
,
0
,
0
,
0
},
{
"expire"
,
expireCommand
,
3
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"expireat"
,
expireatCommand
,
3
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"pexpire"
,
pexpireCommand
,
3
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"pexpireat"
,
pexpireatCommand
,
3
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"keys"
,
keysCommand
,
2
,
"read-only to-sort"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"scan"
,
scanCommand
,
-
2
,
"read-only random"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"dbsize"
,
dbsizeCommand
,
1
,
"read-only fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"auth"
,
authCommand
,
-
2
,
"no-script ok-loading ok-stale fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
/* We don't allow PING during loading since in Redis PING is used as
* failure detection, and a loading server is considered to be
* not available. */
{
"ping"
,
pingCommand
,
-
1
,
"ok-stale fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"echo"
,
echoCommand
,
2
,
"fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"save"
,
saveCommand
,
1
,
"admin no-script"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"bgsave"
,
bgsaveCommand
,
-
1
,
"admin no-script"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"bgrewriteaof"
,
bgrewriteaofCommand
,
1
,
"admin no-script"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"shutdown"
,
shutdownCommand
,
-
1
,
"admin no-script ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"lastsave"
,
lastsaveCommand
,
1
,
"random fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"type"
,
typeCommand
,
2
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"multi"
,
multiCommand
,
1
,
"no-script fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"exec"
,
execCommand
,
1
,
"no-script no-monitor"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"discard"
,
discardCommand
,
1
,
"no-script fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"sync"
,
syncCommand
,
1
,
"admin no-script"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"psync"
,
syncCommand
,
3
,
"admin no-script"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"replconf"
,
replconfCommand
,
-
1
,
"admin no-script ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"flushdb"
,
flushdbCommand
,
-
1
,
"write"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"flushall"
,
flushallCommand
,
-
1
,
"write"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"sort"
,
sortCommand
,
-
2
,
"write use-memory"
,
0
,
sortGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"info"
,
infoCommand
,
-
1
,
"ok-loading ok-stale random"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"monitor"
,
monitorCommand
,
1
,
"admin no-script"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"ttl"
,
ttlCommand
,
2
,
"read-only fast random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"touch"
,
touchCommand
,
-
2
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"pttl"
,
pttlCommand
,
2
,
"read-only fast random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"persist"
,
persistCommand
,
2
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"slaveof"
,
replicaofCommand
,
3
,
"admin no-script ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"replicaof"
,
replicaofCommand
,
3
,
"admin no-script ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"role"
,
roleCommand
,
1
,
"ok-loading ok-stale no-script fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"debug"
,
debugCommand
,
-
2
,
"admin no-script"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"config"
,
configCommand
,
-
2
,
"admin ok-loading ok-stale no-script"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"subscribe"
,
subscribeCommand
,
-
2
,
"pub-sub no-script ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"unsubscribe"
,
unsubscribeCommand
,
-
1
,
"pub-sub no-script ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"psubscribe"
,
psubscribeCommand
,
-
2
,
"pub-sub no-script ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"punsubscribe"
,
punsubscribeCommand
,
-
1
,
"pub-sub no-script ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"publish"
,
publishCommand
,
3
,
"pub-sub ok-loading ok-stale fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"pubsub"
,
pubsubCommand
,
-
2
,
"pub-sub ok-loading ok-stale random"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"watch"
,
watchCommand
,
-
2
,
"no-script fast"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"unwatch"
,
unwatchCommand
,
1
,
"no-script fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"cluster"
,
clusterCommand
,
-
2
,
"admin ok-stale random"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"restore"
,
restoreCommand
,
-
4
,
"write use-memory"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"restore-asking"
,
restoreCommand
,
-
4
,
"write use-memory cluster-asking"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"migrate"
,
migrateCommand
,
-
6
,
"write random"
,
0
,
migrateGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"asking"
,
askingCommand
,
1
,
"fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"readonly"
,
readonlyCommand
,
1
,
"fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"readwrite"
,
readwriteCommand
,
1
,
"fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"dump"
,
dumpCommand
,
2
,
"read-only random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"object"
,
objectCommand
,
-
2
,
"read-only random"
,
0
,
NULL
,
2
,
2
,
1
,
0
,
0
,
0
},
{
"memory"
,
memoryCommand
,
-
2
,
"random"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"client"
,
clientCommand
,
-
2
,
"admin no-script random"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"hello"
,
helloCommand
,
-
2
,
"no-script fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
/* EVAL can modify the dataset, however it is not flagged as a write
* command since we do the check while running commands from Lua. */
{
"eval"
,
evalCommand
,
-
3
,
"no-script"
,
0
,
evalGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"evalsha"
,
evalShaCommand
,
-
3
,
"no-script"
,
0
,
evalGetKeys
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"slowlog"
,
slowlogCommand
,
-
2
,
"admin random"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"script"
,
scriptCommand
,
-
2
,
"no-script"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"time"
,
timeCommand
,
1
,
"random fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"bitop"
,
bitopCommand
,
-
4
,
"write use-memory"
,
0
,
NULL
,
2
,
-
1
,
1
,
0
,
0
,
0
},
{
"bitcount"
,
bitcountCommand
,
-
2
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"bitpos"
,
bitposCommand
,
-
3
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"wait"
,
waitCommand
,
3
,
"noscript"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"command"
,
commandCommand
,
0
,
"ok-loading ok-stale random"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"geoadd"
,
geoaddCommand
,
-
5
,
"write use-memory"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
/* GEORADIUS has store options that may write. */
{
"georadius"
,
georadiusCommand
,
-
6
,
"write"
,
0
,
georadiusGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"georadius_ro"
,
georadiusroCommand
,
-
6
,
"read-only"
,
0
,
georadiusGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"georadiusbymember"
,
georadiusbymemberCommand
,
-
5
,
"write"
,
0
,
georadiusGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"georadiusbymember_ro"
,
georadiusbymemberroCommand
,
-
5
,
"read-only"
,
0
,
georadiusGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"geohash"
,
geohashCommand
,
-
2
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"geopos"
,
geoposCommand
,
-
2
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"geodist"
,
geodistCommand
,
-
4
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"pfselftest"
,
pfselftestCommand
,
1
,
"admin"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"pfadd"
,
pfaddCommand
,
-
2
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
/* Technically speaking PFCOUNT may change the key since it changes the
* final bytes in the HyperLogLog representation. However in this case
* we claim that the representation, even if accessible, is an internal
* affair, and the command is semantically read only. */
{
"pfcount"
,
pfcountCommand
,
-
2
,
"read-only"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"pfmerge"
,
pfmergeCommand
,
-
2
,
"write use-memory"
,
0
,
NULL
,
1
,
-
1
,
1
,
0
,
0
,
0
},
{
"pfdebug"
,
pfdebugCommand
,
-
3
,
"admin write"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"xadd"
,
xaddCommand
,
-
5
,
"write use-memory fast random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xrange"
,
xrangeCommand
,
-
4
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xrevrange"
,
xrevrangeCommand
,
-
4
,
"read-only"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xlen"
,
xlenCommand
,
2
,
"read-only fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xread"
,
xreadCommand
,
-
4
,
"read-only no-script"
,
0
,
xreadGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xreadgroup"
,
xreadCommand
,
-
7
,
"write no-script"
,
0
,
xreadGetKeys
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xgroup"
,
xgroupCommand
,
-
2
,
"write use-memory"
,
0
,
NULL
,
2
,
2
,
1
,
0
,
0
,
0
},
{
"xsetid"
,
xsetidCommand
,
3
,
"write use-memory fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xack"
,
xackCommand
,
-
4
,
"write fast random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xpending"
,
xpendingCommand
,
-
3
,
"read-only random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xclaim"
,
xclaimCommand
,
-
6
,
"write random fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xinfo"
,
xinfoCommand
,
-
2
,
"read-only random"
,
0
,
NULL
,
2
,
2
,
1
,
0
,
0
,
0
},
{
"xdel"
,
xdelCommand
,
-
3
,
"write fast"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"xtrim"
,
xtrimCommand
,
-
2
,
"write random"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
,
0
},
{
"post"
,
securityWarningCommand
,
-
1
,
"ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"host:"
,
securityWarningCommand
,
-
1
,
"ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"latency"
,
latencyCommand
,
-
2
,
"admin no-script ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"lolwut"
,
lolwutCommand
,
-
1
,
"fast"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"acl"
,
aclCommand
,
-
2
,
"admin no-script ok-loading ok-stale"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
,
0
}
};
};
/*============================ Utility functions ============================ */
/*============================ Utility functions ============================ */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment