summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorItamar Haber <itamar@redis.com>2023-03-29 20:48:59 +0300
committerGitHub <noreply@github.com>2023-03-29 20:48:59 +0300
commit0c3b8b7e90ea242640a417abb5c40f30dfc3e036 (patch)
tree6eac70dd7a4feb4b7338d589fd6c221992b96970 /src
parentcb1717865804fdb0561e728d2f3a0a1138099d9d (diff)
downloadredis-0c3b8b7e90ea242640a417abb5c40f30dfc3e036.tar.gz
Overhauls command summaries and man pages. (#11942)
This is an attempt to normalize/formalize command summaries. Main actions performed: * Starts with the continuation of the phrase "The XXXX command, when called, ..." for user commands. * Starts with "An internal command...", "A container command...", etc... when applicable. * Always uses periods. * Refrains from referring to other commands. If this is needed, backquotes should be used for command names. * Tries to be very clear about the data type when applicable. * Tries to mention additional effects, e.g. "The key is created if it doesn't exist" and "The set is deleted if the last member is removed." * Prefers being terse over verbose. * Tries to be consistent.
Diffstat (limited to 'src')
-rw-r--r--src/commands.c778
-rw-r--r--src/commands/acl-cat.json8
-rw-r--r--src/commands/acl-deluser.json2
-rw-r--r--src/commands/acl-dryrun.json2
-rw-r--r--src/commands/acl-genpass.json2
-rw-r--r--src/commands/acl-getuser.json2
-rw-r--r--src/commands/acl-help.json2
-rw-r--r--src/commands/acl-list.json2
-rw-r--r--src/commands/acl-load.json2
-rw-r--r--src/commands/acl-log.json2
-rw-r--r--src/commands/acl-save.json2
-rw-r--r--src/commands/acl-setuser.json2
-rw-r--r--src/commands/acl-users.json2
-rw-r--r--src/commands/acl-whoami.json2
-rw-r--r--src/commands/acl.json2
-rw-r--r--src/commands/append.json2
-rw-r--r--src/commands/asking.json2
-rw-r--r--src/commands/auth.json2
-rw-r--r--src/commands/bgrewriteaof.json2
-rw-r--r--src/commands/bgsave.json2
-rw-r--r--src/commands/bitcount.json2
-rw-r--r--src/commands/bitfield.json2
-rw-r--r--src/commands/bitfield_ro.json2
-rw-r--r--src/commands/bitop.json2
-rw-r--r--src/commands/bitpos.json2
-rw-r--r--src/commands/blmove.json2
-rw-r--r--src/commands/blmpop.json2
-rw-r--r--src/commands/blpop.json2
-rw-r--r--src/commands/brpop.json2
-rw-r--r--src/commands/brpoplpush.json2
-rw-r--r--src/commands/bzmpop.json2
-rw-r--r--src/commands/bzpopmax.json2
-rw-r--r--src/commands/bzpopmin.json2
-rw-r--r--src/commands/client-caching.json2
-rw-r--r--src/commands/client-getname.json2
-rw-r--r--src/commands/client-getredir.json2
-rw-r--r--src/commands/client-help.json2
-rw-r--r--src/commands/client-id.json2
-rw-r--r--src/commands/client-info.json2
-rw-r--r--src/commands/client-kill.json2
-rw-r--r--src/commands/client-list.json2
-rw-r--r--src/commands/client-no-evict.json2
-rw-r--r--src/commands/client-no-touch.json2
-rw-r--r--src/commands/client-pause.json2
-rw-r--r--src/commands/client-reply.json2
-rw-r--r--src/commands/client-setinfo.json2
-rw-r--r--src/commands/client-setname.json2
-rw-r--r--src/commands/client-tracking.json2
-rw-r--r--src/commands/client-trackinginfo.json2
-rw-r--r--src/commands/client-unblock.json2
-rw-r--r--src/commands/client-unpause.json2
-rw-r--r--src/commands/client.json2
-rw-r--r--src/commands/cluster-addslots.json2
-rw-r--r--src/commands/cluster-addslotsrange.json2
-rw-r--r--src/commands/cluster-bumpepoch.json2
-rw-r--r--src/commands/cluster-count-failure-reports.json2
-rw-r--r--src/commands/cluster-countkeysinslot.json2
-rw-r--r--src/commands/cluster-delslots.json2
-rw-r--r--src/commands/cluster-delslotsrange.json2
-rw-r--r--src/commands/cluster-flushslots.json2
-rw-r--r--src/commands/cluster-forget.json2
-rw-r--r--src/commands/cluster-getkeysinslot.json2
-rw-r--r--src/commands/cluster-help.json2
-rw-r--r--src/commands/cluster-info.json2
-rw-r--r--src/commands/cluster-keyslot.json2
-rw-r--r--src/commands/cluster-links.json2
-rw-r--r--src/commands/cluster-meet.json2
-rw-r--r--src/commands/cluster-myid.json2
-rw-r--r--src/commands/cluster-myshardid.json2
-rw-r--r--src/commands/cluster-nodes.json2
-rw-r--r--src/commands/cluster-replicas.json2
-rw-r--r--src/commands/cluster-replicate.json2
-rw-r--r--src/commands/cluster-reset.json2
-rw-r--r--src/commands/cluster-saveconfig.json2
-rw-r--r--src/commands/cluster-set-config-epoch.json2
-rw-r--r--src/commands/cluster-setslot.json2
-rw-r--r--src/commands/cluster-shards.json2
-rw-r--r--src/commands/cluster-slaves.json2
-rw-r--r--src/commands/cluster-slots.json2
-rw-r--r--src/commands/cluster.json2
-rw-r--r--src/commands/command-count.json2
-rw-r--r--src/commands/command-docs.json2
-rw-r--r--src/commands/command-getkeys.json2
-rw-r--r--src/commands/command-getkeysandflags.json2
-rw-r--r--src/commands/command-help.json2
-rw-r--r--src/commands/command-info.json2
-rw-r--r--src/commands/command-list.json2
-rw-r--r--src/commands/command.json2
-rw-r--r--src/commands/config-get.json2
-rw-r--r--src/commands/config-help.json2
-rw-r--r--src/commands/config-resetstat.json2
-rw-r--r--src/commands/config-rewrite.json2
-rw-r--r--src/commands/config-set.json2
-rw-r--r--src/commands/config.json2
-rw-r--r--src/commands/copy.json2
-rw-r--r--src/commands/dbsize.json2
-rw-r--r--src/commands/debug.json2
-rw-r--r--src/commands/decr.json2
-rw-r--r--src/commands/decrby.json2
-rw-r--r--src/commands/del.json2
-rw-r--r--src/commands/discard.json2
-rw-r--r--src/commands/dump.json2
-rw-r--r--src/commands/echo.json2
-rw-r--r--src/commands/eval.json2
-rw-r--r--src/commands/eval_ro.json2
-rw-r--r--src/commands/evalsha.json2
-rw-r--r--src/commands/evalsha_ro.json2
-rw-r--r--src/commands/exec.json2
-rw-r--r--src/commands/exists.json2
-rw-r--r--src/commands/expire.json2
-rw-r--r--src/commands/expireat.json2
-rw-r--r--src/commands/expiretime.json2
-rw-r--r--src/commands/failover.json2
-rw-r--r--src/commands/fcall.json2
-rw-r--r--src/commands/fcall_ro.json2
-rw-r--r--src/commands/flushall.json2
-rw-r--r--src/commands/flushdb.json2
-rw-r--r--src/commands/function-delete.json2
-rw-r--r--src/commands/function-dump.json2
-rw-r--r--src/commands/function-flush.json2
-rw-r--r--src/commands/function-help.json2
-rw-r--r--src/commands/function-kill.json2
-rw-r--r--src/commands/function-list.json2
-rw-r--r--src/commands/function-load.json2
-rw-r--r--src/commands/function-restore.json2
-rw-r--r--src/commands/function-stats.json2
-rw-r--r--src/commands/function.json2
-rw-r--r--src/commands/geoadd.json2
-rw-r--r--src/commands/geodist.json2
-rw-r--r--src/commands/geohash.json2
-rw-r--r--src/commands/geopos.json2
-rw-r--r--src/commands/georadius.json2
-rw-r--r--src/commands/georadius_ro.json2
-rw-r--r--src/commands/georadiusbymember.json2
-rw-r--r--src/commands/georadiusbymember_ro.json2
-rw-r--r--src/commands/geosearch.json2
-rw-r--r--src/commands/geosearchstore.json2
-rw-r--r--src/commands/get.json2
-rw-r--r--src/commands/getbit.json2
-rw-r--r--src/commands/getdel.json2
-rw-r--r--src/commands/getex.json2
-rw-r--r--src/commands/getrange.json2
-rw-r--r--src/commands/getset.json2
-rw-r--r--src/commands/hdel.json2
-rw-r--r--src/commands/hello.json2
-rw-r--r--src/commands/hexists.json2
-rw-r--r--src/commands/hget.json2
-rw-r--r--src/commands/hgetall.json2
-rw-r--r--src/commands/hincrby.json2
-rw-r--r--src/commands/hincrbyfloat.json2
-rw-r--r--src/commands/hkeys.json2
-rw-r--r--src/commands/hlen.json2
-rw-r--r--src/commands/hmget.json2
-rw-r--r--src/commands/hmset.json2
-rw-r--r--src/commands/hrandfield.json2
-rw-r--r--src/commands/hscan.json2
-rw-r--r--src/commands/hset.json2
-rw-r--r--src/commands/hsetnx.json2
-rw-r--r--src/commands/hstrlen.json2
-rw-r--r--src/commands/hvals.json2
-rw-r--r--src/commands/incr.json2
-rw-r--r--src/commands/incrby.json2
-rw-r--r--src/commands/incrbyfloat.json2
-rw-r--r--src/commands/info.json2
-rw-r--r--src/commands/keys.json2
-rw-r--r--src/commands/lastsave.json2
-rw-r--r--src/commands/latency-doctor.json2
-rw-r--r--src/commands/latency-graph.json2
-rw-r--r--src/commands/latency-help.json2
-rw-r--r--src/commands/latency-histogram.json2
-rw-r--r--src/commands/latency-history.json2
-rw-r--r--src/commands/latency-latest.json2
-rw-r--r--src/commands/latency-reset.json2
-rw-r--r--src/commands/latency.json2
-rw-r--r--src/commands/lcs.json2
-rw-r--r--src/commands/lindex.json2
-rw-r--r--src/commands/linsert.json2
-rw-r--r--src/commands/llen.json2
-rw-r--r--src/commands/lmove.json2
-rw-r--r--src/commands/lmpop.json2
-rw-r--r--src/commands/lolwut.json2
-rw-r--r--src/commands/lpop.json2
-rw-r--r--src/commands/lpos.json2
-rw-r--r--src/commands/lpush.json2
-rw-r--r--src/commands/lpushx.json2
-rw-r--r--src/commands/lrange.json2
-rw-r--r--src/commands/lrem.json2
-rw-r--r--src/commands/lset.json2
-rw-r--r--src/commands/ltrim.json2
-rw-r--r--src/commands/memory-doctor.json2
-rw-r--r--src/commands/memory-help.json2
-rw-r--r--src/commands/memory-malloc-stats.json2
-rw-r--r--src/commands/memory-purge.json2
-rw-r--r--src/commands/memory-stats.json2
-rw-r--r--src/commands/memory-usage.json2
-rw-r--r--src/commands/memory.json2
-rw-r--r--src/commands/mget.json2
-rw-r--r--src/commands/migrate.json2
-rw-r--r--src/commands/module-help.json2
-rw-r--r--src/commands/module-list.json2
-rw-r--r--src/commands/module-load.json2
-rw-r--r--src/commands/module-loadex.json2
-rw-r--r--src/commands/module-unload.json2
-rw-r--r--src/commands/module.json2
-rw-r--r--src/commands/monitor.json2
-rw-r--r--src/commands/move.json2
-rw-r--r--src/commands/mset.json2
-rw-r--r--src/commands/msetnx.json2
-rw-r--r--src/commands/multi.json2
-rw-r--r--src/commands/object-encoding.json2
-rw-r--r--src/commands/object-freq.json2
-rw-r--r--src/commands/object-help.json2
-rw-r--r--src/commands/object-idletime.json2
-rw-r--r--src/commands/object-refcount.json2
-rw-r--r--src/commands/object.json2
-rw-r--r--src/commands/persist.json2
-rw-r--r--src/commands/pexpire.json2
-rw-r--r--src/commands/pexpireat.json2
-rw-r--r--src/commands/pexpiretime.json2
-rw-r--r--src/commands/pfadd.json2
-rw-r--r--src/commands/pfcount.json2
-rw-r--r--src/commands/pfdebug.json2
-rw-r--r--src/commands/pfmerge.json2
-rw-r--r--src/commands/pfselftest.json2
-rw-r--r--src/commands/ping.json2
-rw-r--r--src/commands/psetex.json2
-rw-r--r--src/commands/psubscribe.json2
-rw-r--r--src/commands/psync.json2
-rw-r--r--src/commands/pttl.json2
-rw-r--r--src/commands/publish.json2
-rw-r--r--src/commands/pubsub-channels.json2
-rw-r--r--src/commands/pubsub-help.json2
-rw-r--r--src/commands/pubsub-numpat.json2
-rw-r--r--src/commands/pubsub-numsub.json2
-rw-r--r--src/commands/pubsub-shardchannels.json2
-rw-r--r--src/commands/pubsub-shardnumsub.json2
-rw-r--r--src/commands/pubsub.json2
-rw-r--r--src/commands/punsubscribe.json2
-rw-r--r--src/commands/quit.json2
-rw-r--r--src/commands/randomkey.json2
-rw-r--r--src/commands/readonly.json2
-rw-r--r--src/commands/readwrite.json2
-rw-r--r--src/commands/rename.json2
-rw-r--r--src/commands/renamenx.json2
-rw-r--r--src/commands/replconf.json2
-rw-r--r--src/commands/replicaof.json2
-rw-r--r--src/commands/reset.json2
-rw-r--r--src/commands/restore-asking.json2
-rw-r--r--src/commands/restore.json2
-rw-r--r--src/commands/role.json2
-rw-r--r--src/commands/rpop.json2
-rw-r--r--src/commands/rpoplpush.json2
-rw-r--r--src/commands/rpush.json2
-rw-r--r--src/commands/rpushx.json2
-rw-r--r--src/commands/sadd.json2
-rw-r--r--src/commands/save.json2
-rw-r--r--src/commands/scan.json2
-rw-r--r--src/commands/scard.json2
-rw-r--r--src/commands/script-debug.json2
-rw-r--r--src/commands/script-exists.json2
-rw-r--r--src/commands/script-flush.json2
-rw-r--r--src/commands/script-help.json2
-rw-r--r--src/commands/script-kill.json2
-rw-r--r--src/commands/script-load.json2
-rw-r--r--src/commands/script.json2
-rw-r--r--src/commands/sdiff.json2
-rw-r--r--src/commands/sdiffstore.json2
-rw-r--r--src/commands/select.json2
-rw-r--r--src/commands/sentinel-ckquorum.json2
-rw-r--r--src/commands/sentinel-config.json2
-rw-r--r--src/commands/sentinel-debug.json2
-rw-r--r--src/commands/sentinel-failover.json2
-rw-r--r--src/commands/sentinel-flushconfig.json2
-rw-r--r--src/commands/sentinel-get-master-addr-by-name.json2
-rw-r--r--src/commands/sentinel-help.json2
-rw-r--r--src/commands/sentinel-info-cache.json2
-rw-r--r--src/commands/sentinel-is-master-down-by-addr.json2
-rw-r--r--src/commands/sentinel-master.json2
-rw-r--r--src/commands/sentinel-masters.json2
-rw-r--r--src/commands/sentinel-monitor.json2
-rw-r--r--src/commands/sentinel-myid.json2
-rw-r--r--src/commands/sentinel-pending-scripts.json2
-rw-r--r--src/commands/sentinel-remove.json2
-rw-r--r--src/commands/sentinel-replicas.json2
-rw-r--r--src/commands/sentinel-reset.json2
-rw-r--r--src/commands/sentinel-sentinels.json2
-rw-r--r--src/commands/sentinel-set.json2
-rw-r--r--src/commands/sentinel-simulate-failure.json2
-rw-r--r--src/commands/sentinel-slaves.json4
-rw-r--r--src/commands/sentinel.json2
-rw-r--r--src/commands/set.json2
-rw-r--r--src/commands/setbit.json2
-rw-r--r--src/commands/setex.json2
-rw-r--r--src/commands/setnx.json2
-rw-r--r--src/commands/setrange.json2
-rw-r--r--src/commands/shutdown.json2
-rw-r--r--src/commands/sinter.json2
-rw-r--r--src/commands/sintercard.json2
-rw-r--r--src/commands/sinterstore.json2
-rw-r--r--src/commands/sismember.json2
-rw-r--r--src/commands/slaveof.json2
-rw-r--r--src/commands/slowlog-get.json2
-rw-r--r--src/commands/slowlog-len.json2
-rw-r--r--src/commands/slowlog-reset.json2
-rw-r--r--src/commands/slowlog.json2
-rw-r--r--src/commands/smembers.json2
-rw-r--r--src/commands/smismember.json2
-rw-r--r--src/commands/smove.json2
-rw-r--r--src/commands/sort.json2
-rw-r--r--src/commands/sort_ro.json2
-rw-r--r--src/commands/spop.json2
-rw-r--r--src/commands/srem.json2
-rw-r--r--src/commands/sscan.json2
-rw-r--r--src/commands/ssubscribe.json2
-rw-r--r--src/commands/strlen.json2
-rw-r--r--src/commands/subscribe.json2
-rw-r--r--src/commands/substr.json2
-rw-r--r--src/commands/sunion.json2
-rw-r--r--src/commands/sunionstore.json2
-rw-r--r--src/commands/sunsubscribe.json2
-rw-r--r--src/commands/swapdb.json2
-rw-r--r--src/commands/sync.json2
-rw-r--r--src/commands/time.json2
-rw-r--r--src/commands/touch.json2
-rw-r--r--src/commands/ttl.json2
-rw-r--r--src/commands/type.json2
-rw-r--r--src/commands/unlink.json2
-rw-r--r--src/commands/unsubscribe.json2
-rw-r--r--src/commands/unwatch.json2
-rw-r--r--src/commands/wait.json2
-rw-r--r--src/commands/waitaof.json2
-rw-r--r--src/commands/watch.json2
-rw-r--r--src/commands/xack.json2
-rw-r--r--src/commands/xadd.json2
-rw-r--r--src/commands/xautoclaim.json2
-rw-r--r--src/commands/xclaim.json2
-rw-r--r--src/commands/xdel.json2
-rw-r--r--src/commands/xgroup-create.json2
-rw-r--r--src/commands/xgroup-createconsumer.json2
-rw-r--r--src/commands/xgroup-delconsumer.json2
-rw-r--r--src/commands/xgroup-destroy.json2
-rw-r--r--src/commands/xgroup-help.json2
-rw-r--r--src/commands/xgroup-setid.json2
-rw-r--r--src/commands/xgroup.json2
-rw-r--r--src/commands/xinfo-consumers.json2
-rw-r--r--src/commands/xinfo-groups.json2
-rw-r--r--src/commands/xinfo-help.json2
-rw-r--r--src/commands/xinfo-stream.json2
-rw-r--r--src/commands/xinfo.json2
-rw-r--r--src/commands/xlen.json2
-rw-r--r--src/commands/xpending.json2
-rw-r--r--src/commands/xrange.json2
-rw-r--r--src/commands/xread.json3
-rw-r--r--src/commands/xreadgroup.json2
-rw-r--r--src/commands/xrevrange.json2
-rw-r--r--src/commands/xsetid.json2
-rw-r--r--src/commands/xtrim.json2
-rw-r--r--src/commands/zadd.json2
-rw-r--r--src/commands/zcard.json2
-rw-r--r--src/commands/zcount.json2
-rw-r--r--src/commands/zdiff.json2
-rw-r--r--src/commands/zdiffstore.json2
-rw-r--r--src/commands/zincrby.json2
-rw-r--r--src/commands/zinter.json2
-rw-r--r--src/commands/zintercard.json2
-rw-r--r--src/commands/zinterstore.json2
-rw-r--r--src/commands/zlexcount.json2
-rw-r--r--src/commands/zmpop.json2
-rw-r--r--src/commands/zmscore.json2
-rw-r--r--src/commands/zpopmax.json2
-rw-r--r--src/commands/zpopmin.json2
-rw-r--r--src/commands/zrandmember.json4
-rw-r--r--src/commands/zrange.json2
-rw-r--r--src/commands/zrangebylex.json2
-rw-r--r--src/commands/zrangebyscore.json2
-rw-r--r--src/commands/zrangestore.json2
-rw-r--r--src/commands/zrank.json2
-rw-r--r--src/commands/zrem.json2
-rw-r--r--src/commands/zremrangebylex.json2
-rw-r--r--src/commands/zremrangebyrank.json2
-rw-r--r--src/commands/zremrangebyscore.json2
-rw-r--r--src/commands/zrevrange.json2
-rw-r--r--src/commands/zrevrangebylex.json2
-rw-r--r--src/commands/zrevrangebyscore.json2
-rw-r--r--src/commands/zrevrank.json2
-rw-r--r--src/commands/zscan.json2
-rw-r--r--src/commands/zscore.json2
-rw-r--r--src/commands/zunion.json2
-rw-r--r--src/commands/zunionstore.json2
389 files changed, 782 insertions, 783 deletions
diff --git a/src/commands.c b/src/commands.c
index 6ccd8c18e..30c165e1f 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -641,34 +641,34 @@ NULL
/* CLUSTER command table */
struct redisCommand CLUSTER_Subcommands[] = {
-{"addslots","Assign new hash slots to receiving node","O(N) where N is the total number of hash slot arguments","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_ADDSLOTS_History,CLUSTER_ADDSLOTS_tips,clusterCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_ADDSLOTS_Args},
-{"addslotsrange","Assign new hash slots to receiving node","O(N) where N is the total number of the slots between the start slot and end slot arguments.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_ADDSLOTSRANGE_History,CLUSTER_ADDSLOTSRANGE_tips,clusterCommand,-4,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_ADDSLOTSRANGE_Args},
-{"bumpepoch","Advance the cluster config epoch","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_BUMPEPOCH_History,CLUSTER_BUMPEPOCH_tips,clusterCommand,2,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0},
-{"count-failure-reports","Return the number of failure reports active for a given node","O(N) where N is the number of failure reports","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_COUNT_FAILURE_REPORTS_History,CLUSTER_COUNT_FAILURE_REPORTS_tips,clusterCommand,3,CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_COUNT_FAILURE_REPORTS_Args},
-{"countkeysinslot","Return the number of local keys in the specified hash slot","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_COUNTKEYSINSLOT_History,CLUSTER_COUNTKEYSINSLOT_tips,clusterCommand,3,CMD_STALE,0,.args=CLUSTER_COUNTKEYSINSLOT_Args},
-{"delslots","Set hash slots as unbound in receiving node","O(N) where N is the total number of hash slot arguments","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_DELSLOTS_History,CLUSTER_DELSLOTS_tips,clusterCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_DELSLOTS_Args},
-{"delslotsrange","Set hash slots as unbound in receiving node","O(N) where N is the total number of the slots between the start slot and end slot arguments.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_DELSLOTSRANGE_History,CLUSTER_DELSLOTSRANGE_tips,clusterCommand,-4,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_DELSLOTSRANGE_Args},
+{"addslots","Assigns new hash slots to a node.","O(N) where N is the total number of hash slot arguments","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_ADDSLOTS_History,CLUSTER_ADDSLOTS_tips,clusterCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_ADDSLOTS_Args},
+{"addslotsrange","Assigns new hash slot ranges to a node.","O(N) where N is the total number of the slots between the start slot and end slot arguments.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_ADDSLOTSRANGE_History,CLUSTER_ADDSLOTSRANGE_tips,clusterCommand,-4,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_ADDSLOTSRANGE_Args},
+{"bumpepoch","Advances the cluster config epoch.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_BUMPEPOCH_History,CLUSTER_BUMPEPOCH_tips,clusterCommand,2,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0},
+{"count-failure-reports","Returns the number of active failure reports active for a node.","O(N) where N is the number of failure reports","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_COUNT_FAILURE_REPORTS_History,CLUSTER_COUNT_FAILURE_REPORTS_tips,clusterCommand,3,CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_COUNT_FAILURE_REPORTS_Args},
+{"countkeysinslot","Returns the number of keys in a hash slot.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_COUNTKEYSINSLOT_History,CLUSTER_COUNTKEYSINSLOT_tips,clusterCommand,3,CMD_STALE,0,.args=CLUSTER_COUNTKEYSINSLOT_Args},
+{"delslots","Sets hash slots as unbound for a node.","O(N) where N is the total number of hash slot arguments","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_DELSLOTS_History,CLUSTER_DELSLOTS_tips,clusterCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_DELSLOTS_Args},
+{"delslotsrange","Sets hash slot ranges as unbound for a node.","O(N) where N is the total number of the slots between the start slot and end slot arguments.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_DELSLOTSRANGE_History,CLUSTER_DELSLOTSRANGE_tips,clusterCommand,-4,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_DELSLOTSRANGE_Args},
{"failover","Forces a replica to perform a manual failover of its master.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_FAILOVER_History,CLUSTER_FAILOVER_tips,clusterCommand,-2,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_FAILOVER_Args},
-{"flushslots","Delete a node's own slots information","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_FLUSHSLOTS_History,CLUSTER_FLUSHSLOTS_tips,clusterCommand,2,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0},
-{"forget","Remove a node from the nodes table","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_FORGET_History,CLUSTER_FORGET_tips,clusterCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_FORGET_Args},
-{"getkeysinslot","Return local key names in the specified hash slot","O(N) where N is the number of requested keys","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_GETKEYSINSLOT_History,CLUSTER_GETKEYSINSLOT_tips,clusterCommand,4,CMD_STALE,0,.args=CLUSTER_GETKEYSINSLOT_Args},
-{"help","Show helpful text about the different subcommands","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_HELP_History,CLUSTER_HELP_tips,clusterCommand,2,CMD_LOADING|CMD_STALE,0},
-{"info","Provides info about Redis Cluster node state","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_INFO_History,CLUSTER_INFO_tips,clusterCommand,2,CMD_STALE,0},
-{"keyslot","Returns the hash slot of the specified key","O(N) where N is the number of bytes in the key","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_KEYSLOT_History,CLUSTER_KEYSLOT_tips,clusterCommand,3,CMD_STALE,0,.args=CLUSTER_KEYSLOT_Args},
-{"links","Returns a list of all TCP links to and from peer nodes in cluster","O(N) where N is the total number of Cluster nodes","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_LINKS_History,CLUSTER_LINKS_tips,clusterCommand,2,CMD_STALE,0},
-{"meet","Force a node cluster to handshake with another node","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_MEET_History,CLUSTER_MEET_tips,clusterCommand,-4,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_MEET_Args},
-{"myid","Return the node id","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_MYID_History,CLUSTER_MYID_tips,clusterCommand,2,CMD_STALE,0},
-{"myshardid","Return the node shard id","O(1)","7.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_MYSHARDID_History,CLUSTER_MYSHARDID_tips,clusterCommand,2,CMD_STALE,0},
-{"nodes","Get Cluster config for the node","O(N) where N is the total number of Cluster nodes","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_NODES_History,CLUSTER_NODES_tips,clusterCommand,2,CMD_STALE,0},
-{"replicas","List replica nodes of the specified master node","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_REPLICAS_History,CLUSTER_REPLICAS_tips,clusterCommand,3,CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_REPLICAS_Args},
-{"replicate","Reconfigure a node as a replica of the specified master node","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_REPLICATE_History,CLUSTER_REPLICATE_tips,clusterCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_REPLICATE_Args},
-{"reset","Reset a Redis Cluster node","O(N) where N is the number of known nodes. The command may execute a FLUSHALL as a side effect.","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_RESET_History,CLUSTER_RESET_tips,clusterCommand,-2,CMD_ADMIN|CMD_STALE|CMD_NOSCRIPT,0,.args=CLUSTER_RESET_Args},
-{"saveconfig","Forces the node to save cluster state on disk","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_SAVECONFIG_History,CLUSTER_SAVECONFIG_tips,clusterCommand,2,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0},
-{"set-config-epoch","Set the configuration epoch in a new node","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_SET_CONFIG_EPOCH_History,CLUSTER_SET_CONFIG_EPOCH_tips,clusterCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_SET_CONFIG_EPOCH_Args},
-{"setslot","Bind a hash slot to a specific node","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_SETSLOT_History,CLUSTER_SETSLOT_tips,clusterCommand,-4,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_SETSLOT_Args},
-{"shards","Get array of cluster slots to node mappings","O(N) where N is the total number of cluster nodes","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_SHARDS_History,CLUSTER_SHARDS_tips,clusterCommand,2,CMD_STALE,0},
-{"slaves","List replica nodes of the specified master node","O(1)","3.0.0",CMD_DOC_DEPRECATED,"`CLUSTER REPLICAS`","5.0.0",COMMAND_GROUP_CLUSTER,CLUSTER_SLAVES_History,CLUSTER_SLAVES_tips,clusterCommand,3,CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_SLAVES_Args},
-{"slots","Get array of Cluster slot to node mappings","O(N) where N is the total number of Cluster nodes","3.0.0",CMD_DOC_DEPRECATED,"`CLUSTER SHARDS`","7.0.0",COMMAND_GROUP_CLUSTER,CLUSTER_SLOTS_History,CLUSTER_SLOTS_tips,clusterCommand,2,CMD_STALE,0},
+{"flushslots","Deletes all slots information from a node.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_FLUSHSLOTS_History,CLUSTER_FLUSHSLOTS_tips,clusterCommand,2,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0},
+{"forget","Removes a node from the nodes table.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_FORGET_History,CLUSTER_FORGET_tips,clusterCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_FORGET_Args},
+{"getkeysinslot","Returns the key names in a hash slot.","O(N) where N is the number of requested keys","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_GETKEYSINSLOT_History,CLUSTER_GETKEYSINSLOT_tips,clusterCommand,4,CMD_STALE,0,.args=CLUSTER_GETKEYSINSLOT_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_HELP_History,CLUSTER_HELP_tips,clusterCommand,2,CMD_LOADING|CMD_STALE,0},
+{"info","Returns information about the state of a node.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_INFO_History,CLUSTER_INFO_tips,clusterCommand,2,CMD_STALE,0},
+{"keyslot","Returns the hash slot for a key.","O(N) where N is the number of bytes in the key","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_KEYSLOT_History,CLUSTER_KEYSLOT_tips,clusterCommand,3,CMD_STALE,0,.args=CLUSTER_KEYSLOT_Args},
+{"links","Returns a list of all TCP links to and from peer nodes.","O(N) where N is the total number of Cluster nodes","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_LINKS_History,CLUSTER_LINKS_tips,clusterCommand,2,CMD_STALE,0},
+{"meet","Forces a node to handshake with another node.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_MEET_History,CLUSTER_MEET_tips,clusterCommand,-4,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_MEET_Args},
+{"myid","Returns the ID of a node.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_MYID_History,CLUSTER_MYID_tips,clusterCommand,2,CMD_STALE,0},
+{"myshardid","Returns the shard ID of a node.","O(1)","7.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_MYSHARDID_History,CLUSTER_MYSHARDID_tips,clusterCommand,2,CMD_STALE,0},
+{"nodes","Returns the cluster configuration for a node.","O(N) where N is the total number of Cluster nodes","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_NODES_History,CLUSTER_NODES_tips,clusterCommand,2,CMD_STALE,0},
+{"replicas","Lists the replica nodes of a master node.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_REPLICAS_History,CLUSTER_REPLICAS_tips,clusterCommand,3,CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_REPLICAS_Args},
+{"replicate","Configure a node as replica of a master node.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_REPLICATE_History,CLUSTER_REPLICATE_tips,clusterCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_REPLICATE_Args},
+{"reset","Resets a node.","O(N) where N is the number of known nodes. The command may execute a FLUSHALL as a side effect.","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_RESET_History,CLUSTER_RESET_tips,clusterCommand,-2,CMD_ADMIN|CMD_STALE|CMD_NOSCRIPT,0,.args=CLUSTER_RESET_Args},
+{"saveconfig","Forces a node to save the cluster configuration to disk.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_SAVECONFIG_History,CLUSTER_SAVECONFIG_tips,clusterCommand,2,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0},
+{"set-config-epoch","Sets the configuration epoch for a new node.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_SET_CONFIG_EPOCH_History,CLUSTER_SET_CONFIG_EPOCH_tips,clusterCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_SET_CONFIG_EPOCH_Args},
+{"setslot","Binds a hash slot to a node.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_SETSLOT_History,CLUSTER_SETSLOT_tips,clusterCommand,-4,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_SETSLOT_Args},
+{"shards","Returns the mapping of cluster slots to shards.","O(N) where N is the total number of cluster nodes","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_SHARDS_History,CLUSTER_SHARDS_tips,clusterCommand,2,CMD_STALE,0},
+{"slaves","Lists the replica nodes of a master node.","O(1)","3.0.0",CMD_DOC_DEPRECATED,"`CLUSTER REPLICAS`","5.0.0",COMMAND_GROUP_CLUSTER,CLUSTER_SLAVES_History,CLUSTER_SLAVES_tips,clusterCommand,3,CMD_ADMIN|CMD_STALE,0,.args=CLUSTER_SLAVES_Args},
+{"slots","Returns the mapping of cluster slots to nodes.","O(N) where N is the total number of Cluster nodes","3.0.0",CMD_DOC_DEPRECATED,"`CLUSTER SHARDS`","7.0.0",COMMAND_GROUP_CLUSTER,CLUSTER_SLOTS_History,CLUSTER_SLOTS_tips,clusterCommand,2,CMD_STALE,0},
{0}
};
@@ -1060,24 +1060,24 @@ struct redisCommandArg CLIENT_UNBLOCK_Args[] = {
/* CLIENT command table */
struct redisCommand CLIENT_Subcommands[] = {
-{"caching","Instruct the server about tracking or not keys in the next request","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_CACHING_History,CLIENT_CACHING_tips,clientCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_CACHING_Args},
-{"getname","Get the current connection name","O(1)","2.6.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_GETNAME_History,CLIENT_GETNAME_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
-{"getredir","Get tracking notifications redirection client ID if any","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_GETREDIR_History,CLIENT_GETREDIR_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
-{"help","Show helpful text about the different subcommands","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_HELP_History,CLIENT_HELP_tips,clientCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
-{"id","Returns the client ID for the current connection","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_ID_History,CLIENT_ID_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
-{"info","Returns information about the current client connection.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_INFO_History,CLIENT_INFO_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
-{"kill","Kill the connection of a client","O(N) where N is the number of client connections","2.4.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_KILL_History,CLIENT_KILL_tips,clientCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_KILL_Args},
-{"list","Get the list of client connections","O(N) where N is the number of client connections","2.4.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_LIST_History,CLIENT_LIST_tips,clientCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_LIST_Args},
-{"no-evict","Set client eviction mode for the current connection","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_NO_EVICT_History,CLIENT_NO_EVICT_tips,clientCommand,3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_NO_EVICT_Args},
-{"no-touch","Controls whether commands sent by the client will alter the LRU/LFU of the keys they access.","O(1)","7.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_NO_TOUCH_History,CLIENT_NO_TOUCH_tips,clientCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,ACL_CATEGORY_CONNECTION,.args=CLIENT_NO_TOUCH_Args},
-{"pause","Stop processing commands from clients for some time","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_PAUSE_History,CLIENT_PAUSE_tips,clientCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_PAUSE_Args},
-{"reply","Instruct the server whether to reply to commands","O(1)","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_REPLY_History,CLIENT_REPLY_tips,clientCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_REPLY_Args},
-{"setinfo","Set client or connection specific info","O(1)","7.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_SETINFO_History,CLIENT_SETINFO_tips,clientSetinfoCommand,4,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_SETINFO_Args},
-{"setname","Set the current connection name","O(1)","2.6.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_SETNAME_History,CLIENT_SETNAME_tips,clientCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_SETNAME_Args},
-{"tracking","Enable or disable server assisted client side caching support","O(1). Some options may introduce additional complexity.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_TRACKING_History,CLIENT_TRACKING_tips,clientCommand,-3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_TRACKING_Args},
-{"trackinginfo","Return information about server assisted client side caching for the current connection","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_TRACKINGINFO_History,CLIENT_TRACKINGINFO_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
-{"unblock","Unblock a client blocked in a blocking command from a different connection","O(log N) where N is the number of client connections","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_UNBLOCK_History,CLIENT_UNBLOCK_tips,clientCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_UNBLOCK_Args},
-{"unpause","Resume processing of clients that were paused","O(N) Where N is the number of paused clients","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_UNPAUSE_History,CLIENT_UNPAUSE_tips,clientCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
+{"caching","Instructs the server whether to track the keys in the next request.","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_CACHING_History,CLIENT_CACHING_tips,clientCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_CACHING_Args},
+{"getname","Returns the name of the connection.","O(1)","2.6.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_GETNAME_History,CLIENT_GETNAME_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
+{"getredir","Returns the client ID to which the connection's tracking notifications are redirected.","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_GETREDIR_History,CLIENT_GETREDIR_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
+{"help","Returns helpful text about the different subcommands.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_HELP_History,CLIENT_HELP_tips,clientCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
+{"id","Returns the unique client ID of the connection.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_ID_History,CLIENT_ID_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
+{"info","Returns information about the connection.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_INFO_History,CLIENT_INFO_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
+{"kill","Terminates open connections.","O(N) where N is the number of client connections","2.4.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_KILL_History,CLIENT_KILL_tips,clientCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_KILL_Args},
+{"list","Lists open connections.","O(N) where N is the number of client connections","2.4.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_LIST_History,CLIENT_LIST_tips,clientCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_LIST_Args},
+{"no-evict","Sets the client eviction mode of the connection.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_NO_EVICT_History,CLIENT_NO_EVICT_tips,clientCommand,3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_NO_EVICT_Args},
+{"no-touch","Controls whether commands sent by the client affect the LRU/LFU of accessed keys.","O(1)","7.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_NO_TOUCH_History,CLIENT_NO_TOUCH_tips,clientCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,ACL_CATEGORY_CONNECTION,.args=CLIENT_NO_TOUCH_Args},
+{"pause","Suspends commands processing.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_PAUSE_History,CLIENT_PAUSE_tips,clientCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_PAUSE_Args},
+{"reply","Instructs the server whether to reply to commands.","O(1)","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_REPLY_History,CLIENT_REPLY_tips,clientCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_REPLY_Args},
+{"setinfo","Sets information specific to the client or connection.","O(1)","7.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_SETINFO_History,CLIENT_SETINFO_tips,clientSetinfoCommand,4,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_SETINFO_Args},
+{"setname","Sets the connection name.","O(1)","2.6.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_SETNAME_History,CLIENT_SETNAME_tips,clientCommand,3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_SETNAME_Args},
+{"tracking","Controls server-assisted client-side caching for the connection.","O(1). Some options may introduce additional complexity.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_TRACKING_History,CLIENT_TRACKING_tips,clientCommand,-3,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_TRACKING_Args},
+{"trackinginfo","Returns information about server-assisted client-side caching for the connection.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_TRACKINGINFO_History,CLIENT_TRACKINGINFO_tips,clientCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
+{"unblock","Unblocks a client blocked by a blocking command from a different connection.","O(log N) where N is the number of client connections","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_UNBLOCK_History,CLIENT_UNBLOCK_tips,clientCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=CLIENT_UNBLOCK_Args},
+{"unpause","Resumes processing commands from paused clients.","O(N) Where N is the number of paused clients","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_UNPAUSE_History,CLIENT_UNPAUSE_tips,clientCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
{0}
};
@@ -1489,11 +1489,11 @@ struct redisCommandArg OBJECT_REFCOUNT_Args[] = {
/* OBJECT command table */
struct redisCommand OBJECT_Subcommands[] = {
-{"encoding","Inspect the internal encoding of a Redis object","O(1)","2.2.3",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_ENCODING_History,OBJECT_ENCODING_tips,objectCommand,3,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=OBJECT_ENCODING_Args},
-{"freq","Get the logarithmic access frequency counter of a Redis object","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_FREQ_History,OBJECT_FREQ_tips,objectCommand,3,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=OBJECT_FREQ_Args},
-{"help","Show helpful text about the different subcommands","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_HELP_History,OBJECT_HELP_tips,objectCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_KEYSPACE},
-{"idletime","Get the time since a Redis object was last accessed","O(1)","2.2.3",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_IDLETIME_History,OBJECT_IDLETIME_tips,objectCommand,3,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=OBJECT_IDLETIME_Args},
-{"refcount","Get the number of references to the value of the key","O(1)","2.2.3",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_REFCOUNT_History,OBJECT_REFCOUNT_tips,objectCommand,3,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=OBJECT_REFCOUNT_Args},
+{"encoding","Returns the internal encoding of a Redis object.","O(1)","2.2.3",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_ENCODING_History,OBJECT_ENCODING_tips,objectCommand,3,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=OBJECT_ENCODING_Args},
+{"freq","Returns the logarithmic access frequency counter of a Redis object.","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_FREQ_History,OBJECT_FREQ_tips,objectCommand,3,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=OBJECT_FREQ_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_HELP_History,OBJECT_HELP_tips,objectCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_KEYSPACE},
+{"idletime","Returns the time since the last access to a Redis object.","O(1)","2.2.3",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_IDLETIME_History,OBJECT_IDLETIME_tips,objectCommand,3,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=OBJECT_IDLETIME_Args},
+{"refcount","Returns the reference count of a value of a key.","O(1)","2.2.3",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_REFCOUNT_History,OBJECT_REFCOUNT_tips,objectCommand,3,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=OBJECT_REFCOUNT_Args},
{0}
};
@@ -3227,12 +3227,12 @@ struct redisCommandArg PUBSUB_SHARDNUMSUB_Args[] = {
/* PUBSUB command table */
struct redisCommand PUBSUB_Subcommands[] = {
-{"channels","List active channels","O(N) where N is the number of active channels, and assuming constant time pattern matching (relatively short channels and patterns)","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_CHANNELS_History,PUBSUB_CHANNELS_tips,pubsubCommand,-2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0,.args=PUBSUB_CHANNELS_Args},
-{"help","Show helpful text about the different subcommands","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_HELP_History,PUBSUB_HELP_tips,pubsubCommand,2,CMD_LOADING|CMD_STALE,0},
-{"numpat","Get the count of unique patterns pattern subscriptions","O(1)","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_NUMPAT_History,PUBSUB_NUMPAT_tips,pubsubCommand,2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0},
-{"numsub","Get the count of subscribers for channels","O(N) for the NUMSUB subcommand, where N is the number of requested channels","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_NUMSUB_History,PUBSUB_NUMSUB_tips,pubsubCommand,-2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0,.args=PUBSUB_NUMSUB_Args},
-{"shardchannels","List active shard channels","O(N) where N is the number of active shard channels, and assuming constant time pattern matching (relatively short shard channels).","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_SHARDCHANNELS_History,PUBSUB_SHARDCHANNELS_tips,pubsubCommand,-2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0,.args=PUBSUB_SHARDCHANNELS_Args},
-{"shardnumsub","Get the count of subscribers for shard channels","O(N) for the SHARDNUMSUB subcommand, where N is the number of requested shard channels","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_SHARDNUMSUB_History,PUBSUB_SHARDNUMSUB_tips,pubsubCommand,-2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0,.args=PUBSUB_SHARDNUMSUB_Args},
+{"channels","Returns the active channels.","O(N) where N is the number of active channels, and assuming constant time pattern matching (relatively short channels and patterns)","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_CHANNELS_History,PUBSUB_CHANNELS_tips,pubsubCommand,-2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0,.args=PUBSUB_CHANNELS_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_HELP_History,PUBSUB_HELP_tips,pubsubCommand,2,CMD_LOADING|CMD_STALE,0},
+{"numpat","Returns a count of unique pattern subscriptions.","O(1)","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_NUMPAT_History,PUBSUB_NUMPAT_tips,pubsubCommand,2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0},
+{"numsub","Returns a count of subscribers to channels.","O(N) for the NUMSUB subcommand, where N is the number of requested channels","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_NUMSUB_History,PUBSUB_NUMSUB_tips,pubsubCommand,-2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0,.args=PUBSUB_NUMSUB_Args},
+{"shardchannels","Returns the active shard channels.","O(N) where N is the number of active shard channels, and assuming constant time pattern matching (relatively short shard channels).","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_SHARDCHANNELS_History,PUBSUB_SHARDCHANNELS_tips,pubsubCommand,-2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0,.args=PUBSUB_SHARDCHANNELS_Args},
+{"shardnumsub","Returns the count of subscribers of shard channels.","O(N) for the SHARDNUMSUB subcommand, where N is the number of requested shard channels","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_SHARDNUMSUB_History,PUBSUB_SHARDNUMSUB_tips,pubsubCommand,-2,CMD_PUBSUB|CMD_LOADING|CMD_STALE,0,.args=PUBSUB_SHARDNUMSUB_Args},
{0}
};
@@ -3581,15 +3581,15 @@ NULL
/* FUNCTION command table */
struct redisCommand FUNCTION_Subcommands[] = {
-{"delete","Delete a function by name","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_DELETE_History,FUNCTION_DELETE_tips,functionDeleteCommand,3,CMD_NOSCRIPT|CMD_WRITE,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_DELETE_Args},
-{"dump","Dump all functions into a serialized binary payload","O(N) where N is the number of functions","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_DUMP_History,FUNCTION_DUMP_tips,functionDumpCommand,2,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING},
-{"flush","Deleting all functions","O(N) where N is the number of functions deleted","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_FLUSH_History,FUNCTION_FLUSH_tips,functionFlushCommand,-2,CMD_NOSCRIPT|CMD_WRITE,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_FLUSH_Args},
-{"help","Show helpful text about the different subcommands","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_HELP_History,FUNCTION_HELP_tips,functionHelpCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_SCRIPTING},
-{"kill","Kill the function currently in execution.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_KILL_History,FUNCTION_KILL_tips,functionKillCommand,2,CMD_NOSCRIPT|CMD_ALLOW_BUSY,ACL_CATEGORY_SCRIPTING},
-{"list","List information about all the functions","O(N) where N is the number of functions","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_LIST_History,FUNCTION_LIST_tips,functionListCommand,-2,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_LIST_Args},
-{"load","Create a function with the given arguments (name, code, description)","O(1) (considering compilation time is redundant)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_LOAD_History,FUNCTION_LOAD_tips,functionLoadCommand,-3,CMD_NOSCRIPT|CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_LOAD_Args},
-{"restore","Restore all the functions on the given payload","O(N) where N is the number of functions on the payload","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_RESTORE_History,FUNCTION_RESTORE_tips,functionRestoreCommand,-3,CMD_NOSCRIPT|CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_RESTORE_Args},
-{"stats","Return information about the function currently running (name, description, duration)","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_STATS_History,FUNCTION_STATS_tips,functionStatsCommand,2,CMD_NOSCRIPT|CMD_ALLOW_BUSY,ACL_CATEGORY_SCRIPTING},
+{"delete","Deletes a library and its functions.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_DELETE_History,FUNCTION_DELETE_tips,functionDeleteCommand,3,CMD_NOSCRIPT|CMD_WRITE,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_DELETE_Args},
+{"dump","Dumps all libraries into a serialized binary payload.","O(N) where N is the number of functions","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_DUMP_History,FUNCTION_DUMP_tips,functionDumpCommand,2,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING},
+{"flush","Deletes all libraries and functions.","O(N) where N is the number of functions deleted","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_FLUSH_History,FUNCTION_FLUSH_tips,functionFlushCommand,-2,CMD_NOSCRIPT|CMD_WRITE,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_FLUSH_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_HELP_History,FUNCTION_HELP_tips,functionHelpCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_SCRIPTING},
+{"kill","Terminates a function during execution.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_KILL_History,FUNCTION_KILL_tips,functionKillCommand,2,CMD_NOSCRIPT|CMD_ALLOW_BUSY,ACL_CATEGORY_SCRIPTING},
+{"list","Returns information about all libraries.","O(N) where N is the number of functions","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_LIST_History,FUNCTION_LIST_tips,functionListCommand,-2,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_LIST_Args},
+{"load","Creates a library.","O(1) (considering compilation time is redundant)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_LOAD_History,FUNCTION_LOAD_tips,functionLoadCommand,-3,CMD_NOSCRIPT|CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_LOAD_Args},
+{"restore","Restores all libraries from a payload.","O(N) where N is the number of functions on the payload","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_RESTORE_History,FUNCTION_RESTORE_tips,functionRestoreCommand,-3,CMD_NOSCRIPT|CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SCRIPTING,.args=FUNCTION_RESTORE_Args},
+{"stats","Returns information about a function during execution.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_STATS_History,FUNCTION_STATS_tips,functionStatsCommand,2,CMD_NOSCRIPT|CMD_ALLOW_BUSY,ACL_CATEGORY_SCRIPTING},
{0}
};
@@ -3709,12 +3709,12 @@ struct redisCommandArg SCRIPT_LOAD_Args[] = {
/* SCRIPT command table */
struct redisCommand SCRIPT_Subcommands[] = {
-{"debug","Set the debug mode for executed scripts.","O(1)","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_DEBUG_History,SCRIPT_DEBUG_tips,scriptCommand,3,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING,.args=SCRIPT_DEBUG_Args},
-{"exists","Check existence of scripts in the script cache.","O(N) with N being the number of scripts to check (so checking a single script is an O(1) operation).","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_EXISTS_History,SCRIPT_EXISTS_tips,scriptCommand,-3,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING,.args=SCRIPT_EXISTS_Args},
-{"flush","Remove all the scripts from the script cache.","O(N) with N being the number of scripts in cache","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_FLUSH_History,SCRIPT_FLUSH_tips,scriptCommand,-2,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING,.args=SCRIPT_FLUSH_Args},
-{"help","Show helpful text about the different subcommands","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_HELP_History,SCRIPT_HELP_tips,scriptCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_SCRIPTING},
-{"kill","Kill the script currently in execution.","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_KILL_History,SCRIPT_KILL_tips,scriptCommand,2,CMD_NOSCRIPT|CMD_ALLOW_BUSY,ACL_CATEGORY_SCRIPTING},
-{"load","Load the specified Lua script into the script cache.","O(N) with N being the length in bytes of the script body.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_LOAD_History,SCRIPT_LOAD_tips,scriptCommand,3,CMD_NOSCRIPT|CMD_STALE,ACL_CATEGORY_SCRIPTING,.args=SCRIPT_LOAD_Args},
+{"debug","Sets the debug mode of server-side Lua scripts.","O(1)","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_DEBUG_History,SCRIPT_DEBUG_tips,scriptCommand,3,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING,.args=SCRIPT_DEBUG_Args},
+{"exists","Determines whether server-side Lua scripts exist in the script cache.","O(N) with N being the number of scripts to check (so checking a single script is an O(1) operation).","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_EXISTS_History,SCRIPT_EXISTS_tips,scriptCommand,-3,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING,.args=SCRIPT_EXISTS_Args},
+{"flush","Removes all server-side Lua scripts from the script cache.","O(N) with N being the number of scripts in cache","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_FLUSH_History,SCRIPT_FLUSH_tips,scriptCommand,-2,CMD_NOSCRIPT,ACL_CATEGORY_SCRIPTING,.args=SCRIPT_FLUSH_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_HELP_History,SCRIPT_HELP_tips,scriptCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_SCRIPTING},
+{"kill","Terminates a server-side Lua script during execution.","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_KILL_History,SCRIPT_KILL_tips,scriptCommand,2,CMD_NOSCRIPT|CMD_ALLOW_BUSY,ACL_CATEGORY_SCRIPTING},
+{"load","Loads a server-side Lua script to the script cache.","O(N) with N being the length in bytes of the script body.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_LOAD_History,SCRIPT_LOAD_tips,scriptCommand,3,CMD_NOSCRIPT|CMD_STALE,ACL_CATEGORY_SCRIPTING,.args=SCRIPT_LOAD_Args},
{0}
};
@@ -4035,27 +4035,27 @@ struct redisCommandArg SENTINEL_SLAVES_Args[] = {
/* SENTINEL command table */
struct redisCommand SENTINEL_Subcommands[] = {
-{"ckquorum","Check for a Sentinel quorum",NULL,"2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_CKQUORUM_History,SENTINEL_CKQUORUM_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_CKQUORUM_Args},
-{"config","Configure Sentinel","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_CONFIG_History,SENTINEL_CONFIG_tips,sentinelCommand,-4,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_CONFIG_Args},
-{"debug","List or update the current configurable parameters","O(N) where N is the number of configurable parameters","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_DEBUG_History,SENTINEL_DEBUG_tips,sentinelCommand,-2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_DEBUG_Args},
-{"failover","Force a failover",NULL,"2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_FAILOVER_History,SENTINEL_FAILOVER_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_FAILOVER_Args},
-{"flushconfig","Rewrite configuration file","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_FLUSHCONFIG_History,SENTINEL_FLUSHCONFIG_tips,sentinelCommand,2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
-{"get-master-addr-by-name","Get port and address of a master","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_GET_MASTER_ADDR_BY_NAME_History,SENTINEL_GET_MASTER_ADDR_BY_NAME_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_GET_MASTER_ADDR_BY_NAME_Args},
-{"help","Show helpful text about the different subcommands","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_HELP_History,SENTINEL_HELP_tips,sentinelCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
-{"info-cache","Get cached INFO from the instances in the deployment","O(N) where N is the number of instances","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_INFO_CACHE_History,SENTINEL_INFO_CACHE_tips,sentinelCommand,-3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_INFO_CACHE_Args},
-{"is-master-down-by-addr","Check if a master is down","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_IS_MASTER_DOWN_BY_ADDR_History,SENTINEL_IS_MASTER_DOWN_BY_ADDR_tips,sentinelCommand,6,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_IS_MASTER_DOWN_BY_ADDR_Args},
-{"master","Shows the state of a master","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_MASTER_History,SENTINEL_MASTER_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_MASTER_Args},
-{"masters","List the monitored masters","O(N) where N is the number of masters","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_MASTERS_History,SENTINEL_MASTERS_tips,sentinelCommand,2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
-{"monitor","Start monitoring","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_MONITOR_History,SENTINEL_MONITOR_tips,sentinelCommand,6,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_MONITOR_Args},
-{"myid","Get the Sentinel instance ID","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_MYID_History,SENTINEL_MYID_tips,sentinelCommand,2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
-{"pending-scripts","Get information about pending scripts",NULL,"2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_PENDING_SCRIPTS_History,SENTINEL_PENDING_SCRIPTS_tips,sentinelCommand,2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
-{"remove","Stop monitoring","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_REMOVE_History,SENTINEL_REMOVE_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_REMOVE_Args},
-{"replicas","List the monitored replicas","O(N) where N is the number of replicas","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_REPLICAS_History,SENTINEL_REPLICAS_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_REPLICAS_Args},
-{"reset","Reset masters by name pattern","O(N) where N is the number of monitored masters","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_RESET_History,SENTINEL_RESET_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_RESET_Args},
-{"sentinels","List the Sentinel instances","O(N) where N is the number of Sentinels","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_SENTINELS_History,SENTINEL_SENTINELS_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_SENTINELS_Args},
-{"set","Change the configuration of a monitored master","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_SET_History,SENTINEL_SET_tips,sentinelCommand,-5,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_SET_Args},
-{"simulate-failure","Simulate failover scenarios",NULL,"3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_SIMULATE_FAILURE_History,SENTINEL_SIMULATE_FAILURE_tips,sentinelCommand,-3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_SIMULATE_FAILURE_Args},
-{"slaves","List the monitored slaves","O(N) where N is the number of slaves","2.8.0",CMD_DOC_DEPRECATED,"`SENTINEL REPLICAS`","5.0.0",COMMAND_GROUP_SENTINEL,SENTINEL_SLAVES_History,SENTINEL_SLAVES_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_SLAVES_Args},
+{"ckquorum","Checks for a Redis Sentinel quorum.",NULL,"2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_CKQUORUM_History,SENTINEL_CKQUORUM_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_CKQUORUM_Args},
+{"config","Configures Redis Sentinel.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_CONFIG_History,SENTINEL_CONFIG_tips,sentinelCommand,-4,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_CONFIG_Args},
+{"debug","Lists or updates the current configurable parameters of Redis Sentinel.","O(N) where N is the number of configurable parameters","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_DEBUG_History,SENTINEL_DEBUG_tips,sentinelCommand,-2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_DEBUG_Args},
+{"failover","Forces a Redis Sentinel failover.",NULL,"2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_FAILOVER_History,SENTINEL_FAILOVER_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_FAILOVER_Args},
+{"flushconfig","Rewrites the Redis Sentinel configuration file.","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_FLUSHCONFIG_History,SENTINEL_FLUSHCONFIG_tips,sentinelCommand,2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
+{"get-master-addr-by-name","Returns the port and address of a master Redis instance.","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_GET_MASTER_ADDR_BY_NAME_History,SENTINEL_GET_MASTER_ADDR_BY_NAME_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_GET_MASTER_ADDR_BY_NAME_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_HELP_History,SENTINEL_HELP_tips,sentinelCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
+{"info-cache","Returns the cached `INFO` replies from the deployment's instances.","O(N) where N is the number of instances","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_INFO_CACHE_History,SENTINEL_INFO_CACHE_tips,sentinelCommand,-3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_INFO_CACHE_Args},
+{"is-master-down-by-addr","Determines whether a master Redis instance is down.","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_IS_MASTER_DOWN_BY_ADDR_History,SENTINEL_IS_MASTER_DOWN_BY_ADDR_tips,sentinelCommand,6,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_IS_MASTER_DOWN_BY_ADDR_Args},
+{"master","Returns the state of a master Redis instance.","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_MASTER_History,SENTINEL_MASTER_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_MASTER_Args},
+{"masters","Returns a list of monitored Redis masters.","O(N) where N is the number of masters","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_MASTERS_History,SENTINEL_MASTERS_tips,sentinelCommand,2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
+{"monitor","Starts monitoring.","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_MONITOR_History,SENTINEL_MONITOR_tips,sentinelCommand,6,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_MONITOR_Args},
+{"myid","Returns the Redis Sentinel instance ID.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_MYID_History,SENTINEL_MYID_tips,sentinelCommand,2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
+{"pending-scripts","Returns information about pending scripts for Redis Sentinel.",NULL,"2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_PENDING_SCRIPTS_History,SENTINEL_PENDING_SCRIPTS_tips,sentinelCommand,2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0},
+{"remove","Stops monitoring.","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_REMOVE_History,SENTINEL_REMOVE_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_REMOVE_Args},
+{"replicas","Returns a list of the monitored Redis replicas.","O(N) where N is the number of replicas","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_REPLICAS_History,SENTINEL_REPLICAS_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_REPLICAS_Args},
+{"reset","Resets Redis masters by name matching a pattern.","O(N) where N is the number of monitored masters","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_RESET_History,SENTINEL_RESET_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_RESET_Args},
+{"sentinels","Returns a list of Sentinel instances.","O(N) where N is the number of Sentinels","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_SENTINELS_History,SENTINEL_SENTINELS_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_SENTINELS_Args},
+{"set","Changes the configuration of a monitored Redis master.","O(1)","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_SET_History,SENTINEL_SET_tips,sentinelCommand,-5,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_SET_Args},
+{"simulate-failure","Simulates failover scenarios.",NULL,"3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_SIMULATE_FAILURE_History,SENTINEL_SIMULATE_FAILURE_tips,sentinelCommand,-3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_SIMULATE_FAILURE_Args},
+{"slaves","Returns a list of the monitored replicas.","O(N) where N is the number of replicas.","2.8.0",CMD_DOC_DEPRECATED,"`SENTINEL REPLICAS`","5.0.0",COMMAND_GROUP_SENTINEL,SENTINEL_SLAVES_History,SENTINEL_SLAVES_tips,sentinelCommand,3,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.args=SENTINEL_SLAVES_Args},
{0}
};
@@ -4077,7 +4077,7 @@ struct redisCommand SENTINEL_Subcommands[] = {
/* ACL CAT argument table */
struct redisCommandArg ACL_CAT_Args[] = {
-{"categoryname",ARG_TYPE_STRING,-1,NULL,NULL,NULL,CMD_ARG_OPTIONAL},
+{"category",ARG_TYPE_STRING,-1,NULL,NULL,NULL,CMD_ARG_OPTIONAL},
{0}
};
@@ -4236,19 +4236,19 @@ struct redisCommandArg ACL_SETUSER_Args[] = {
/* ACL command table */
struct redisCommand ACL_Subcommands[] = {
-{"cat","List the ACL categories or the commands inside a category","O(1) since the categories and commands are a fixed set.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_CAT_History,ACL_CAT_tips,aclCommand,-2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_CAT_Args},
-{"deluser","Remove the specified ACL users and the associated rules","O(1) amortized time considering the typical user.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_DELUSER_History,ACL_DELUSER_tips,aclCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_DELUSER_Args},
-{"dryrun","Returns whether the user can execute the given command without executing the command.","O(1).","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_DRYRUN_History,ACL_DRYRUN_tips,aclCommand,-4,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_DRYRUN_Args},
-{"genpass","Generate a pseudorandom secure password to use for ACL users","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_GENPASS_History,ACL_GENPASS_tips,aclCommand,-2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_GENPASS_Args},
-{"getuser","Get the rules for a specific ACL user","O(N). Where N is the number of password, command and pattern rules that the user has.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_GETUSER_History,ACL_GETUSER_tips,aclCommand,3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_GETUSER_Args},
-{"help","Show helpful text about the different subcommands","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_HELP_History,ACL_HELP_tips,aclCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
-{"list","List the current ACL rules in ACL config file format","O(N). Where N is the number of configured users.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_LIST_History,ACL_LIST_tips,aclCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
-{"load","Reload the ACLs from the configured ACL file","O(N). Where N is the number of configured users.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_LOAD_History,ACL_LOAD_tips,aclCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
-{"log","List latest events denied because of ACLs in place","O(N) with N being the number of entries shown.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_LOG_History,ACL_LOG_tips,aclCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_LOG_Args},
-{"save","Save the current ACL rules in the configured ACL file","O(N). Where N is the number of configured users.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_SAVE_History,ACL_SAVE_tips,aclCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
-{"setuser","Modify or create the rules for a specific ACL user","O(N). Where N is the number of rules provided.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_SETUSER_History,ACL_SETUSER_tips,aclCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_SETUSER_Args},
-{"users","List the username of all the configured ACL rules","O(N). Where N is the number of configured users.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_USERS_History,ACL_USERS_tips,aclCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
-{"whoami","Return the name of the user associated to the current connection","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_WHOAMI_History,ACL_WHOAMI_tips,aclCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
+{"cat","Lists the ACL categories, or the commands inside a category.","O(1) since the categories and commands are a fixed set.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_CAT_History,ACL_CAT_tips,aclCommand,-2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_CAT_Args},
+{"deluser","Deletes ACL users, and terminates their connections.","O(1) amortized time considering the typical user.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_DELUSER_History,ACL_DELUSER_tips,aclCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_DELUSER_Args},
+{"dryrun","Simulates the execution of a command by a user, without executing the command.","O(1).","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_DRYRUN_History,ACL_DRYRUN_tips,aclCommand,-4,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_DRYRUN_Args},
+{"genpass","Generates a pseudorandom, secure password that can be used to identify ACL users.","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_GENPASS_History,ACL_GENPASS_tips,aclCommand,-2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_GENPASS_Args},
+{"getuser","Lists the ACL rules of a user.","O(N). Where N is the number of password, command and pattern rules that the user has.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_GETUSER_History,ACL_GETUSER_tips,aclCommand,3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_GETUSER_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_HELP_History,ACL_HELP_tips,aclCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
+{"list","Dumps the effective rules in ACL file format.","O(N). Where N is the number of configured users.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_LIST_History,ACL_LIST_tips,aclCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
+{"load","Reloads the rules from the configured ACL file.","O(N). Where N is the number of configured users.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_LOAD_History,ACL_LOAD_tips,aclCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
+{"log","Lists recent security events generated due to ACL rules.","O(N) with N being the number of entries shown.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_LOG_History,ACL_LOG_tips,aclCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_LOG_Args},
+{"save","Saves the effective ACL rules in the configured ACL file.","O(N). Where N is the number of configured users.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_SAVE_History,ACL_SAVE_tips,aclCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
+{"setuser","Creates and modifies an ACL user and its rules.","O(N). Where N is the number of rules provided.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_SETUSER_History,ACL_SETUSER_tips,aclCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=ACL_SETUSER_Args},
+{"users","Lists all ACL users.","O(N). Where N is the number of configured users.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_USERS_History,ACL_USERS_tips,aclCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
+{"whoami","Returns the authenticated username of the current connection.","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_WHOAMI_History,ACL_WHOAMI_tips,aclCommand,2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0},
{0}
};
@@ -4395,13 +4395,13 @@ struct redisCommandArg COMMAND_LIST_Args[] = {
/* COMMAND command table */
struct redisCommand COMMAND_Subcommands[] = {
-{"count","Get total number of Redis commands","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_COUNT_History,COMMAND_COUNT_tips,commandCountCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
-{"docs","Get array of specific Redis command documentation","O(N) where N is the number of commands to look up","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_DOCS_History,COMMAND_DOCS_tips,commandDocsCommand,-2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_DOCS_Args},
-{"getkeys","Extract keys given a full Redis command","O(N) where N is the number of arguments to the command","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_GETKEYS_History,COMMAND_GETKEYS_tips,commandGetKeysCommand,-3,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_GETKEYS_Args},
-{"getkeysandflags","Extract keys and access flags given a full Redis command","O(N) where N is the number of arguments to the command","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_GETKEYSANDFLAGS_History,COMMAND_GETKEYSANDFLAGS_tips,commandGetKeysAndFlagsCommand,-3,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_GETKEYSANDFLAGS_Args},
-{"help","Show helpful text about the different subcommands","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_HELP_History,COMMAND_HELP_tips,commandHelpCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
-{"info","Get array of specific Redis command details, or all when no argument is given.","O(N) where N is the number of commands to look up","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_INFO_History,COMMAND_INFO_tips,commandInfoCommand,-2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_INFO_Args},
-{"list","Get an array of Redis command names","O(N) where N is the total number of Redis commands","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_LIST_History,COMMAND_LIST_tips,commandListCommand,-2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_LIST_Args},
+{"count","Returns a count of commands.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_COUNT_History,COMMAND_COUNT_tips,commandCountCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
+{"docs","Returns documentary information about a command.","O(N) where N is the number of commands to look up","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_DOCS_History,COMMAND_DOCS_tips,commandDocsCommand,-2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_DOCS_Args},
+{"getkeys","Extracts the key names from an arbitrary command.","O(N) where N is the number of arguments to the command","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_GETKEYS_History,COMMAND_GETKEYS_tips,commandGetKeysCommand,-3,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_GETKEYS_Args},
+{"getkeysandflags","Extracts the key names and access flags for an arbitrary command.","O(N) where N is the number of arguments to the command","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_GETKEYSANDFLAGS_History,COMMAND_GETKEYSANDFLAGS_tips,commandGetKeysAndFlagsCommand,-3,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_GETKEYSANDFLAGS_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_HELP_History,COMMAND_HELP_tips,commandHelpCommand,2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION},
+{"info","Returns information about one, multiple or all commands.","O(N) where N is the number of commands to look up","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_INFO_History,COMMAND_INFO_tips,commandInfoCommand,-2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_INFO_Args},
+{"list","Returns a list of command names.","O(N) where N is the total number of Redis commands","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_LIST_History,COMMAND_LIST_tips,commandListCommand,-2,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=COMMAND_LIST_Args},
{0}
};
@@ -4487,11 +4487,11 @@ struct redisCommandArg CONFIG_SET_Args[] = {
/* CONFIG command table */
struct redisCommand CONFIG_Subcommands[] = {
-{"get","Get the values of configuration parameters","O(N) when N is the number of configuration parameters provided","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_GET_History,CONFIG_GET_tips,configGetCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=CONFIG_GET_Args},
-{"help","Show helpful text about the different subcommands","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_HELP_History,CONFIG_HELP_tips,configHelpCommand,2,CMD_LOADING|CMD_STALE,0},
-{"resetstat","Reset the stats returned by INFO","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_RESETSTAT_History,CONFIG_RESETSTAT_tips,configResetStatCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
-{"rewrite","Rewrite the configuration file with the in memory configuration","O(1)","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_REWRITE_History,CONFIG_REWRITE_tips,configRewriteCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
-{"set","Set configuration parameters to the given values","O(N) when N is the number of configuration parameters provided","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_SET_History,CONFIG_SET_tips,configSetCommand,-4,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=CONFIG_SET_Args},
+{"get","Returns the effective values of configuration parameters.","O(N) when N is the number of configuration parameters provided","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_GET_History,CONFIG_GET_tips,configGetCommand,-3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=CONFIG_GET_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_HELP_History,CONFIG_HELP_tips,configHelpCommand,2,CMD_LOADING|CMD_STALE,0},
+{"resetstat","Resets the server's statistics.","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_RESETSTAT_History,CONFIG_RESETSTAT_tips,configResetStatCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
+{"rewrite","Persists the effective configuration to file.","O(1)","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_REWRITE_History,CONFIG_REWRITE_tips,configRewriteCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
+{"set","Sets configuration parameters in-flight.","O(N) when N is the number of configuration parameters provided","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_SET_History,CONFIG_SET_tips,configSetCommand,-4,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=CONFIG_SET_Args},
{0}
};
@@ -4749,13 +4749,13 @@ struct redisCommandArg LATENCY_RESET_Args[] = {
/* LATENCY command table */
struct redisCommand LATENCY_Subcommands[] = {
-{"doctor","Return a human readable latency analysis report.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_DOCTOR_History,LATENCY_DOCTOR_tips,latencyCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
-{"graph","Return a latency graph for the event.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_GRAPH_History,LATENCY_GRAPH_tips,latencyCommand,3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=LATENCY_GRAPH_Args},
-{"help","Show helpful text about the different subcommands.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_HELP_History,LATENCY_HELP_tips,latencyCommand,2,CMD_LOADING|CMD_STALE,0},
-{"histogram","Return the cumulative distribution of latencies of a subset of commands or all.","O(N) where N is the number of commands with latency information being retrieved.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_HISTOGRAM_History,LATENCY_HISTOGRAM_tips,latencyCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=LATENCY_HISTOGRAM_Args},
-{"history","Return timestamp-latency samples for the event.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_HISTORY_History,LATENCY_HISTORY_tips,latencyCommand,3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=LATENCY_HISTORY_Args},
-{"latest","Return the latest latency samples for all events.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_LATEST_History,LATENCY_LATEST_tips,latencyCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
-{"reset","Reset latency data for one or more events.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_RESET_History,LATENCY_RESET_tips,latencyCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=LATENCY_RESET_Args},
+{"doctor","Returns a human-readable latency analysis report.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_DOCTOR_History,LATENCY_DOCTOR_tips,latencyCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
+{"graph","Returns a latency graph for an event.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_GRAPH_History,LATENCY_GRAPH_tips,latencyCommand,3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=LATENCY_GRAPH_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_HELP_History,LATENCY_HELP_tips,latencyCommand,2,CMD_LOADING|CMD_STALE,0},
+{"histogram","Returns the cumulative distribution of latencies of a subset or all commands.","O(N) where N is the number of commands with latency information being retrieved.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_HISTOGRAM_History,LATENCY_HISTOGRAM_tips,latencyCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=LATENCY_HISTOGRAM_Args},
+{"history","Returns timestamp-latency samples for an event.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_HISTORY_History,LATENCY_HISTORY_tips,latencyCommand,3,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=LATENCY_HISTORY_Args},
+{"latest","Returns the latest latency samples for all events.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_LATEST_History,LATENCY_LATEST_tips,latencyCommand,2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
+{"reset","Resets the latency data for one or more events.","O(1)","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_RESET_History,LATENCY_RESET_tips,latencyCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,.args=LATENCY_RESET_Args},
{0}
};
@@ -4857,12 +4857,12 @@ struct redisCommandArg MEMORY_USAGE_Args[] = {
/* MEMORY command table */
struct redisCommand MEMORY_Subcommands[] = {
-{"doctor","Outputs memory problems report","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_DOCTOR_History,MEMORY_DOCTOR_tips,memoryCommand,2,0,0},
-{"help","Show helpful text about the different subcommands","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_HELP_History,MEMORY_HELP_tips,memoryCommand,2,CMD_LOADING|CMD_STALE,0},
-{"malloc-stats","Show allocator internal stats","Depends on how much memory is allocated, could be slow","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_MALLOC_STATS_History,MEMORY_MALLOC_STATS_tips,memoryCommand,2,0,0},
-{"purge","Ask the allocator to release memory","Depends on how much memory is allocated, could be slow","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_PURGE_History,MEMORY_PURGE_tips,memoryCommand,2,0,0},
-{"stats","Show memory usage details","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_STATS_History,MEMORY_STATS_tips,memoryCommand,2,0,0},
-{"usage","Estimate the memory usage of a key","O(N) where N is the number of samples.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_USAGE_History,MEMORY_USAGE_tips,memoryCommand,-3,CMD_READONLY,0,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=MEMORY_USAGE_Args},
+{"doctor","Outputs a memory problems report.","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_DOCTOR_History,MEMORY_DOCTOR_tips,memoryCommand,2,0,0},
+{"help","Returns helpful text about the different subcommands.","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_HELP_History,MEMORY_HELP_tips,memoryCommand,2,CMD_LOADING|CMD_STALE,0},
+{"malloc-stats","Returns the allocator statistics.","Depends on how much memory is allocated, could be slow","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_MALLOC_STATS_History,MEMORY_MALLOC_STATS_tips,memoryCommand,2,0,0},
+{"purge","Asks the allocator to release memory.","Depends on how much memory is allocated, could be slow","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_PURGE_History,MEMORY_PURGE_tips,memoryCommand,2,0,0},
+{"stats","Returns details about memory usage.","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_STATS_History,MEMORY_STATS_tips,memoryCommand,2,0,0},
+{"usage","Estimates the memory usage of a key.","O(N) where N is the number of samples.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_USAGE_History,MEMORY_USAGE_tips,memoryCommand,-3,CMD_READONLY,0,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=MEMORY_USAGE_Args},
{0}
};
@@ -4947,11 +4947,11 @@ struct redisCommandArg MODULE_UNLOAD_Args[] = {
/* MODULE command table */
struct redisCommand MODULE_Subcommands[] = {
-{"help","Show helpful text about the different subcommands","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_HELP_History,MODULE_HELP_tips,moduleCommand,2,CMD_LOADING|CMD_STALE,0},
-{"list","List all modules loaded by the server","O(N) where N is the number of loaded modules.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_LIST_History,MODULE_LIST_tips,moduleCommand,2,CMD_ADMIN|CMD_NOSCRIPT,0},
-{"load","Load a module","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_LOAD_History,MODULE_LOAD_tips,moduleCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_PROTECTED,0,.args=MODULE_LOAD_Args},
-{"loadex","Load a module with extended parameters","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_LOADEX_History,MODULE_LOADEX_tips,moduleCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_PROTECTED,0,.args=MODULE_LOADEX_Args},
-{"unload","Unload a module","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_UNLOAD_History,MODULE_UNLOAD_tips,moduleCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_PROTECTED,0,.args=MODULE_UNLOAD_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_HELP_History,MODULE_HELP_tips,moduleCommand,2,CMD_LOADING|CMD_STALE,0},
+{"list","Returns all loaded modules.","O(N) where N is the number of loaded modules.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_LIST_History,MODULE_LIST_tips,moduleCommand,2,CMD_ADMIN|CMD_NOSCRIPT,0},
+{"load","Loads a module.","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_LOAD_History,MODULE_LOAD_tips,moduleCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_PROTECTED,0,.args=MODULE_LOAD_Args},
+{"loadex","Loads a module using extended parameters.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_LOADEX_History,MODULE_LOADEX_tips,moduleCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_PROTECTED,0,.args=MODULE_LOADEX_Args},
+{"unload","Unloads a module.","O(1)","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_UNLOAD_History,MODULE_UNLOAD_tips,moduleCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_PROTECTED,0,.args=MODULE_UNLOAD_Args},
{0}
};
@@ -5148,10 +5148,10 @@ NULL
/* SLOWLOG command table */
struct redisCommand SLOWLOG_Subcommands[] = {
-{"get","Get the slow log's entries","O(N) where N is the number of entries returned","2.2.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SLOWLOG_GET_History,SLOWLOG_GET_tips,slowlogCommand,-2,CMD_ADMIN|CMD_LOADING|CMD_STALE,0,.args=SLOWLOG_GET_Args},
+{"get","Returns the slow log's entries.","O(N) where N is the number of entries returned","2.2.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SLOWLOG_GET_History,SLOWLOG_GET_tips,slowlogCommand,-2,CMD_ADMIN|CMD_LOADING|CMD_STALE,0,.args=SLOWLOG_GET_Args},
{"help","Show helpful text about the different subcommands","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SLOWLOG_HELP_History,SLOWLOG_HELP_tips,slowlogCommand,2,CMD_LOADING|CMD_STALE,0},
-{"len","Get the slow log's length","O(1)","2.2.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SLOWLOG_LEN_History,SLOWLOG_LEN_tips,slowlogCommand,2,CMD_ADMIN|CMD_LOADING|CMD_STALE,0},
-{"reset","Clear all entries from the slow log","O(N) where N is the number of entries in the slowlog","2.2.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SLOWLOG_RESET_History,SLOWLOG_RESET_tips,slowlogCommand,2,CMD_ADMIN|CMD_LOADING|CMD_STALE,0},
+{"len","Returns the number of entries in the slow log.","O(1)","2.2.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SLOWLOG_LEN_History,SLOWLOG_LEN_tips,slowlogCommand,2,CMD_ADMIN|CMD_LOADING|CMD_STALE,0},
+{"reset","Clears all entries from the slow log.","O(N) where N is the number of entries in the slowlog","2.2.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SLOWLOG_RESET_History,SLOWLOG_RESET_tips,slowlogCommand,2,CMD_ADMIN|CMD_LOADING|CMD_STALE,0},
{0}
};
@@ -6487,12 +6487,12 @@ struct redisCommandArg XGROUP_SETID_Args[] = {
/* XGROUP command table */
struct redisCommand XGROUP_Subcommands[] = {
-{"create","Create a consumer group.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_CREATE_History,XGROUP_CREATE_tips,xgroupCommand,-5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_CREATE_Args},
-{"createconsumer","Create a consumer in a consumer group.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_CREATECONSUMER_History,XGROUP_CREATECONSUMER_tips,xgroupCommand,5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_CREATECONSUMER_Args},
-{"delconsumer","Delete a consumer from a consumer group.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_DELCONSUMER_History,XGROUP_DELCONSUMER_tips,xgroupCommand,5,CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_DELCONSUMER_Args},
-{"destroy","Destroy a consumer group.","O(N) where N is the number of entries in the group's pending entries list (PEL).","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_DESTROY_History,XGROUP_DESTROY_tips,xgroupCommand,4,CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_DESTROY_Args},
-{"help","Show helpful text about the different subcommands","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_HELP_History,XGROUP_HELP_tips,xgroupCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_STREAM},
-{"setid","Set a consumer group to an arbitrary last delivered ID value.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_SETID_History,XGROUP_SETID_tips,xgroupCommand,-5,CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_SETID_Args},
+{"create","Creates a consumer group.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_CREATE_History,XGROUP_CREATE_tips,xgroupCommand,-5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_CREATE_Args},
+{"createconsumer","Creates a consumer in a consumer group.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_CREATECONSUMER_History,XGROUP_CREATECONSUMER_tips,xgroupCommand,5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_CREATECONSUMER_Args},
+{"delconsumer","Deletes a consumer from a consumer group.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_DELCONSUMER_History,XGROUP_DELCONSUMER_tips,xgroupCommand,5,CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_DELCONSUMER_Args},
+{"destroy","Destroys a consumer group.","O(N) where N is the number of entries in the group's pending entries list (PEL).","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_DESTROY_History,XGROUP_DESTROY_tips,xgroupCommand,4,CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_DESTROY_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_HELP_History,XGROUP_HELP_tips,xgroupCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_STREAM},
+{"setid","Sets the last-delivered ID of a consumer group.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_SETID_History,XGROUP_SETID_tips,xgroupCommand,-5,CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XGROUP_SETID_Args},
{0}
};
@@ -6579,10 +6579,10 @@ struct redisCommandArg XINFO_STREAM_Args[] = {
/* XINFO command table */
struct redisCommand XINFO_Subcommands[] = {
-{"consumers","List the consumers in a consumer group","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_CONSUMERS_History,XINFO_CONSUMERS_tips,xinfoCommand,4,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XINFO_CONSUMERS_Args},
-{"groups","List the consumer groups of a stream","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_GROUPS_History,XINFO_GROUPS_tips,xinfoCommand,3,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XINFO_GROUPS_Args},
-{"help","Show helpful text about the different subcommands","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_HELP_History,XINFO_HELP_tips,xinfoCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_STREAM},
-{"stream","Get information about a stream","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_STREAM_History,XINFO_STREAM_tips,xinfoCommand,-3,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XINFO_STREAM_Args},
+{"consumers","Returns a list of the consumers in a consumer group.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_CONSUMERS_History,XINFO_CONSUMERS_tips,xinfoCommand,4,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XINFO_CONSUMERS_Args},
+{"groups","Returns a list of the consumer groups of a stream.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_GROUPS_History,XINFO_GROUPS_tips,xinfoCommand,3,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XINFO_GROUPS_Args},
+{"help","Returns helpful text about the different subcommands.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_HELP_History,XINFO_HELP_tips,xinfoCommand,2,CMD_LOADING|CMD_STALE,ACL_CATEGORY_STREAM},
+{"stream","Returns information about a stream.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_STREAM_History,XINFO_STREAM_tips,xinfoCommand,-3,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XINFO_STREAM_Args},
{0}
};
@@ -7240,263 +7240,263 @@ struct redisCommandArg WATCH_Args[] = {
/* Main command table */
struct redisCommand redisCommandTable[] = {
/* bitmap */
-{"bitcount","Count set bits in a string","O(N)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITCOUNT_History,BITCOUNT_tips,bitcountCommand,-2,CMD_READONLY,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BITCOUNT_Args},
-{"bitfield","Perform arbitrary bitfield integer operations on strings","O(1) for each subcommand specified","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITFIELD_History,BITFIELD_tips,bitfieldCommand,-2,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_BITMAP,{{"This command allows both access and modification of the key",CMD_KEY_RW|CMD_KEY_UPDATE|CMD_KEY_ACCESS|CMD_KEY_VARIABLE_FLAGS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},bitfieldGetKeys,.args=BITFIELD_Args},
-{"bitfield_ro","Perform arbitrary bitfield integer operations on strings. Read-only variant of BITFIELD","O(1) for each subcommand specified","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITFIELD_RO_History,BITFIELD_RO_tips,bitfieldroCommand,-2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BITFIELD_RO_Args},
-{"bitop","Perform bitwise operations between strings","O(N)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITOP_History,BITOP_tips,bitopCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={3},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=BITOP_Args},
-{"bitpos","Find first bit set or clear in a string","O(N)","2.8.7",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITPOS_History,BITPOS_tips,bitposCommand,-3,CMD_READONLY,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BITPOS_Args},
-{"getbit","Returns the bit value at offset in the string value stored at key","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,GETBIT_History,GETBIT_tips,getbitCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETBIT_Args},
-{"setbit","Sets or clears the bit at offset in the string value stored at key","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,SETBIT_History,SETBIT_tips,setbitCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SETBIT_Args},
+{"bitcount","Counts the number of set bits (population counting) in a string.","O(N)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITCOUNT_History,BITCOUNT_tips,bitcountCommand,-2,CMD_READONLY,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BITCOUNT_Args},
+{"bitfield","Performs arbitrary bitfield integer operations on strings.","O(1) for each subcommand specified","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITFIELD_History,BITFIELD_tips,bitfieldCommand,-2,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_BITMAP,{{"This command allows both access and modification of the key",CMD_KEY_RW|CMD_KEY_UPDATE|CMD_KEY_ACCESS|CMD_KEY_VARIABLE_FLAGS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},bitfieldGetKeys,.args=BITFIELD_Args},
+{"bitfield_ro","Performs arbitrary read-only bitfield integer operations on strings.","O(1) for each subcommand specified","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITFIELD_RO_History,BITFIELD_RO_tips,bitfieldroCommand,-2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BITFIELD_RO_Args},
+{"bitop","Performs bitwise operations on multiple strings, and stores the result.","O(N)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITOP_History,BITOP_tips,bitopCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={3},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=BITOP_Args},
+{"bitpos","Finds the first set (1) or clear (0) bit in a string.","O(N)","2.8.7",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,BITPOS_History,BITPOS_tips,bitposCommand,-3,CMD_READONLY,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BITPOS_Args},
+{"getbit","Returns a bit value by offset.","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,GETBIT_History,GETBIT_tips,getbitCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETBIT_Args},
+{"setbit","Sets or clears the bit at offset of the string value. Creates the key if it doesn't exist.","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_BITMAP,SETBIT_History,SETBIT_tips,setbitCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_BITMAP,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SETBIT_Args},
/* cluster */
-{"asking","Sent by cluster clients after an -ASK redirect","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,ASKING_History,ASKING_tips,askingCommand,1,CMD_FAST,ACL_CATEGORY_CONNECTION},
-{"cluster","A container for cluster commands","Depends on subcommand.","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_History,CLUSTER_tips,NULL,-2,0,0,.subcommands=CLUSTER_Subcommands},
-{"readonly","Enables read queries for a connection to a cluster replica node","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,READONLY_History,READONLY_tips,readonlyCommand,1,CMD_FAST|CMD_LOADING|CMD_STALE,ACL_CATEGORY_CONNECTION},
-{"readwrite","Disables read queries for a connection to a cluster replica node","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,READWRITE_History,READWRITE_tips,readwriteCommand,1,CMD_FAST|CMD_LOADING|CMD_STALE,ACL_CATEGORY_CONNECTION},
+{"asking","Signals that a cluster client is following an -ASK redirect.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,ASKING_History,ASKING_tips,askingCommand,1,CMD_FAST,ACL_CATEGORY_CONNECTION},
+{"cluster","A container for Redis Cluster commands.","Depends on subcommand.","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,CLUSTER_History,CLUSTER_tips,NULL,-2,0,0,.subcommands=CLUSTER_Subcommands},
+{"readonly","Enables read-only queries for a connection to a Redis Cluster replica node.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,READONLY_History,READONLY_tips,readonlyCommand,1,CMD_FAST|CMD_LOADING|CMD_STALE,ACL_CATEGORY_CONNECTION},
+{"readwrite","Enables read-write queries for a connection to a Reids Cluster replica node.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CLUSTER,READWRITE_History,READWRITE_tips,readwriteCommand,1,CMD_FAST|CMD_LOADING|CMD_STALE,ACL_CATEGORY_CONNECTION},
/* connection */
-{"auth","Authenticate to the server","O(N) where N is the number of passwords defined for the user","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,AUTH_History,AUTH_tips,authCommand,-2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_NO_AUTH|CMD_SENTINEL|CMD_ALLOW_BUSY,ACL_CATEGORY_CONNECTION,.args=AUTH_Args},
-{"client","A container for client connection commands","Depends on subcommand.","2.4.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_History,CLIENT_tips,NULL,-2,CMD_SENTINEL,0,.subcommands=CLIENT_Subcommands},
-{"echo","Echo the given string","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,ECHO_History,ECHO_tips,echoCommand,2,CMD_LOADING|CMD_STALE|CMD_FAST,ACL_CATEGORY_CONNECTION,.args=ECHO_Args},
-{"hello","Handshake with Redis","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,HELLO_History,HELLO_tips,helloCommand,-1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_NO_AUTH|CMD_SENTINEL|CMD_ALLOW_BUSY,ACL_CATEGORY_CONNECTION,.args=HELLO_Args},
-{"ping","Ping the server","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,PING_History,PING_tips,pingCommand,-1,CMD_FAST|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=PING_Args},
-{"quit","Close the connection","O(1)","1.0.0",CMD_DOC_DEPRECATED,"just closing the connection","7.2.0",COMMAND_GROUP_CONNECTION,QUIT_History,QUIT_tips,quitCommand,-1,CMD_ALLOW_BUSY|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_NO_AUTH,ACL_CATEGORY_CONNECTION},
-{"reset","Reset the connection","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,RESET_History,RESET_tips,resetCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_NO_AUTH|CMD_ALLOW_BUSY,ACL_CATEGORY_CONNECTION},
-{"select","Change the selected database for the current connection","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,SELECT_History,SELECT_tips,selectCommand,2,CMD_LOADING|CMD_STALE|CMD_FAST,ACL_CATEGORY_CONNECTION,.args=SELECT_Args},
+{"auth","Authenticates the connection.","O(N) where N is the number of passwords defined for the user","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,AUTH_History,AUTH_tips,authCommand,-2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_NO_AUTH|CMD_SENTINEL|CMD_ALLOW_BUSY,ACL_CATEGORY_CONNECTION,.args=AUTH_Args},
+{"client","A container for client connection commands.","Depends on subcommand.","2.4.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,CLIENT_History,CLIENT_tips,NULL,-2,CMD_SENTINEL,0,.subcommands=CLIENT_Subcommands},
+{"echo","Returns the given string.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,ECHO_History,ECHO_tips,echoCommand,2,CMD_LOADING|CMD_STALE|CMD_FAST,ACL_CATEGORY_CONNECTION,.args=ECHO_Args},
+{"hello","Handshakes with the Redis server.","O(1)","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,HELLO_History,HELLO_tips,helloCommand,-1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_NO_AUTH|CMD_SENTINEL|CMD_ALLOW_BUSY,ACL_CATEGORY_CONNECTION,.args=HELLO_Args},
+{"ping","Returns the server's liveliness response.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,PING_History,PING_tips,pingCommand,-1,CMD_FAST|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.args=PING_Args},
+{"quit","Closes the connection.","O(1)","1.0.0",CMD_DOC_DEPRECATED,"just closing the connection","7.2.0",COMMAND_GROUP_CONNECTION,QUIT_History,QUIT_tips,quitCommand,-1,CMD_ALLOW_BUSY|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_NO_AUTH,ACL_CATEGORY_CONNECTION},
+{"reset","Resets the connection.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,RESET_History,RESET_tips,resetCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_NO_AUTH|CMD_ALLOW_BUSY,ACL_CATEGORY_CONNECTION},
+{"select","Changes the selected database.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_CONNECTION,SELECT_History,SELECT_tips,selectCommand,2,CMD_LOADING|CMD_STALE|CMD_FAST,ACL_CATEGORY_CONNECTION,.args=SELECT_Args},
/* generic */
-{"copy","Copy a key","O(N) worst case for collections, where N is the number of nested items. O(1) for string values.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,COPY_History,COPY_tips,copyCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=COPY_Args},
-{"del","Delete a key","O(N) where N is the number of keys that will be removed. When a key to remove holds a value other than a string, the individual complexity for this key is O(M) where M is the number of elements in the list, set, sorted set or hash. Removing a single key that holds a string value is O(1).","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,DEL_History,DEL_tips,delCommand,-2,CMD_WRITE,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RM|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=DEL_Args},
-{"dump","Return a serialized version of the value stored at the specified key.","O(1) to access the key and additional O(N*M) to serialize it, where N is the number of Redis objects composing the value and M their average size. For small string values the time complexity is thus O(1)+O(1*M) where M is small, so simply O(1).","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,DUMP_History,DUMP_tips,dumpCommand,2,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=DUMP_Args},
-{"exists","Determine if a key exists","O(N) where N is the number of keys to check.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,EXISTS_History,EXISTS_tips,existsCommand,-2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=EXISTS_Args},
-{"expire","Set a key's time to live in seconds","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,EXPIRE_History,EXPIRE_tips,expireCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=EXPIRE_Args},
-{"expireat","Set the expiration for a key as a UNIX timestamp","O(1)","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,EXPIREAT_History,EXPIREAT_tips,expireatCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=EXPIREAT_Args},
-{"expiretime","Get the expiration Unix timestamp for a key","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,EXPIRETIME_History,EXPIRETIME_tips,expiretimeCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=EXPIRETIME_Args},
-{"keys","Find all keys matching the given pattern","O(N) with N being the number of keys in the database, under the assumption that the key names in the database and the given pattern have limited length.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,KEYS_History,KEYS_tips,keysCommand,2,CMD_READONLY,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,.args=KEYS_Args},
-{"migrate","Atomically transfer a key from a Redis instance to another one.","This command actually executes a DUMP+DEL in the source instance, and a RESTORE in the target instance. See the pages of these commands for time complexity. Also an O(N) data transfer between the two instances is performed.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,MIGRATE_History,MIGRATE_tips,migrateCommand,-6,CMD_WRITE,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={3},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE|CMD_KEY_INCOMPLETE,KSPEC_BS_KEYWORD,.bs.keyword={"KEYS",-2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},migrateGetKeys,.args=MIGRATE_Args},
-{"move","Move a key to another database","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,MOVE_History,MOVE_tips,moveCommand,3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=MOVE_Args},
-{"object","A container for object introspection commands","Depends on subcommand.","2.2.3",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_History,OBJECT_tips,NULL,-2,0,0,.subcommands=OBJECT_Subcommands},
-{"persist","Remove the expiration from a key","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PERSIST_History,PERSIST_tips,persistCommand,2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PERSIST_Args},
-{"pexpire","Set a key's time to live in milliseconds","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PEXPIRE_History,PEXPIRE_tips,pexpireCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PEXPIRE_Args},
-{"pexpireat","Set the expiration for a key as a UNIX timestamp specified in milliseconds","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PEXPIREAT_History,PEXPIREAT_tips,pexpireatCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PEXPIREAT_Args},
-{"pexpiretime","Get the expiration Unix timestamp for a key in milliseconds","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PEXPIRETIME_History,PEXPIRETIME_tips,pexpiretimeCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PEXPIRETIME_Args},
-{"pttl","Get the time to live for a key in milliseconds","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PTTL_History,PTTL_tips,pttlCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PTTL_Args},
-{"randomkey","Return a random key from the keyspace","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,RANDOMKEY_History,RANDOMKEY_tips,randomkeyCommand,1,CMD_READONLY|CMD_TOUCHES_ARBITRARY_KEYS,ACL_CATEGORY_KEYSPACE},
-{"rename","Rename a key","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,RENAME_History,RENAME_tips,renameCommand,3,CMD_WRITE,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RENAME_Args},
-{"renamenx","Rename a key, only if the new key does not exist","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,RENAMENX_History,RENAMENX_tips,renamenxCommand,3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RENAMENX_Args},
-{"restore","Create a key using the provided serialized value, previously obtained using DUMP.","O(1) to create the new key and additional O(N*M) to reconstruct the serialized value, where N is the number of Redis objects composing the value and M their average size. For small string values the time complexity is thus O(1)+O(1*M) where M is small, so simply O(1). However for sorted set values the complexity is O(N*M*log(N)) because inserting values into sorted sets is O(log(N)).","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,RESTORE_History,RESTORE_tips,restoreCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RESTORE_Args},
-{"scan","Incrementally iterate the keys space","O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,SCAN_History,SCAN_tips,scanCommand,-2,CMD_READONLY|CMD_TOUCHES_ARBITRARY_KEYS,ACL_CATEGORY_KEYSPACE,.args=SCAN_Args},
-{"sort","Sort the elements in a list, set or sorted set","O(N+M*log(M)) where N is the number of elements in the list or set to sort, and M the number of returned elements. When the elements are not sorted, complexity is O(N).","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,SORT_History,SORT_tips,sortCommand,-2,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SET|ACL_CATEGORY_SORTEDSET|ACL_CATEGORY_LIST|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{"For the optional BY/GET keyword. It is marked 'unknown' because the key names derive from the content of the key we sort",CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_UNKNOWN,{{0}},KSPEC_FK_UNKNOWN,{{0}}},{"For the optional STORE keyword. It is marked 'unknown' because the keyword can appear anywhere in the argument array",CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_UNKNOWN,{{0}},KSPEC_FK_UNKNOWN,{{0}}}},sortGetKeys,.args=SORT_Args},
-{"sort_ro","Sort the elements in a list, set or sorted set. Read-only variant of SORT.","O(N+M*log(M)) where N is the number of elements in the list or set to sort, and M the number of returned elements. When the elements are not sorted, complexity is O(N).","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,SORT_RO_History,SORT_RO_tips,sortroCommand,-2,CMD_READONLY,ACL_CATEGORY_SET|ACL_CATEGORY_SORTEDSET|ACL_CATEGORY_LIST|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{"For the optional BY/GET keyword. It is marked 'unknown' because the key names derive from the content of the key we sort",CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_UNKNOWN,{{0}},KSPEC_FK_UNKNOWN,{{0}}}},sortROGetKeys,.args=SORT_RO_Args},
-{"touch","Alters the last access time of a key(s). Returns the number of existing keys specified.","O(N) where N is the number of keys that will be touched.","3.2.1",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,TOUCH_History,TOUCH_tips,touchCommand,-2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=TOUCH_Args},
-{"ttl","Get the time to live for a key in seconds","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,TTL_History,TTL_tips,ttlCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=TTL_Args},
-{"type","Determine the type stored at key","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,TYPE_History,TYPE_tips,typeCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=TYPE_Args},
-{"unlink","Delete a key asynchronously in another thread. Otherwise it is just as DEL, but non blocking.","O(1) for each key removed regardless of its size. Then the command does O(N) work in a different thread in order to reclaim memory, where N is the number of allocations the deleted objects where composed of.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,UNLINK_History,UNLINK_tips,unlinkCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RM|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=UNLINK_Args},
-{"wait","Wait for the synchronous replication of all the write commands sent in the context of the current connection","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,WAIT_History,WAIT_tips,waitCommand,3,0,ACL_CATEGORY_CONNECTION,.args=WAIT_Args},
-{"waitaof","Wait for all write commands sent in the context of the current connection to be synced to AOF of local host and/or replicas","O(1)","7.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,WAITAOF_History,WAITAOF_tips,waitaofCommand,4,CMD_NOSCRIPT,ACL_CATEGORY_CONNECTION,.args=WAITAOF_Args},
+{"copy","Copies the value of a key to a new key.","O(N) worst case for collections, where N is the number of nested items. O(1) for string values.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,COPY_History,COPY_tips,copyCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=COPY_Args},
+{"del","Deletes one or more keys.","O(N) where N is the number of keys that will be removed. When a key to remove holds a value other than a string, the individual complexity for this key is O(M) where M is the number of elements in the list, set, sorted set or hash. Removing a single key that holds a string value is O(1).","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,DEL_History,DEL_tips,delCommand,-2,CMD_WRITE,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RM|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=DEL_Args},
+{"dump","Returns a serialized representation of the value stored at a key.","O(1) to access the key and additional O(N*M) to serialize it, where N is the number of Redis objects composing the value and M their average size. For small string values the time complexity is thus O(1)+O(1*M) where M is small, so simply O(1).","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,DUMP_History,DUMP_tips,dumpCommand,2,CMD_READONLY,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=DUMP_Args},
+{"exists","Determines whether one or more keys exist.","O(N) where N is the number of keys to check.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,EXISTS_History,EXISTS_tips,existsCommand,-2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=EXISTS_Args},
+{"expire","Sets the expiration time of a key in seconds.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,EXPIRE_History,EXPIRE_tips,expireCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=EXPIRE_Args},
+{"expireat","Sets the expiration time of a key to a Unix timestamp.","O(1)","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,EXPIREAT_History,EXPIREAT_tips,expireatCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=EXPIREAT_Args},
+{"expiretime","Returns the expiration time of a key as a Unix timestamp.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,EXPIRETIME_History,EXPIRETIME_tips,expiretimeCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=EXPIRETIME_Args},
+{"keys","Returns all key names that match a pattern.","O(N) with N being the number of keys in the database, under the assumption that the key names in the database and the given pattern have limited length.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,KEYS_History,KEYS_tips,keysCommand,2,CMD_READONLY,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,.args=KEYS_Args},
+{"migrate","Atomically transfers a key from one Redis instance to another.","This command actually executes a DUMP+DEL in the source instance, and a RESTORE in the target instance. See the pages of these commands for time complexity. Also an O(N) data transfer between the two instances is performed.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,MIGRATE_History,MIGRATE_tips,migrateCommand,-6,CMD_WRITE,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={3},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE|CMD_KEY_INCOMPLETE,KSPEC_BS_KEYWORD,.bs.keyword={"KEYS",-2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},migrateGetKeys,.args=MIGRATE_Args},
+{"move","Moves a key to another database.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,MOVE_History,MOVE_tips,moveCommand,3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=MOVE_Args},
+{"object","A container for object introspection commands.","Depends on subcommand.","2.2.3",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,OBJECT_History,OBJECT_tips,NULL,-2,0,0,.subcommands=OBJECT_Subcommands},
+{"persist","Removes the expiration time of a key.","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PERSIST_History,PERSIST_tips,persistCommand,2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PERSIST_Args},
+{"pexpire","Sets the expiration time of a key in milliseconds.","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PEXPIRE_History,PEXPIRE_tips,pexpireCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PEXPIRE_Args},
+{"pexpireat","Sets the expiration time of a key to a Unix milliseconds timestamp.","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PEXPIREAT_History,PEXPIREAT_tips,pexpireatCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PEXPIREAT_Args},
+{"pexpiretime","Returns the expiration time of a key as a Unix milliseconds timestamp.","O(1)","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PEXPIRETIME_History,PEXPIRETIME_tips,pexpiretimeCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PEXPIRETIME_Args},
+{"pttl","Returns the expiration time in milliseconds of a key.","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,PTTL_History,PTTL_tips,pttlCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PTTL_Args},
+{"randomkey","Returns a random key name from the database.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,RANDOMKEY_History,RANDOMKEY_tips,randomkeyCommand,1,CMD_READONLY|CMD_TOUCHES_ARBITRARY_KEYS,ACL_CATEGORY_KEYSPACE},
+{"rename","Renames a key and overwrites the destination.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,RENAME_History,RENAME_tips,renameCommand,3,CMD_WRITE,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RENAME_Args},
+{"renamenx","Renames a key only when the target key name doesn't exist.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,RENAMENX_History,RENAMENX_tips,renamenxCommand,3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RENAMENX_Args},
+{"restore","Creates a key from the serialized representation of a value.","O(1) to create the new key and additional O(N*M) to reconstruct the serialized value, where N is the number of Redis objects composing the value and M their average size. For small string values the time complexity is thus O(1)+O(1*M) where M is small, so simply O(1). However for sorted set values the complexity is O(N*M*log(N)) because inserting values into sorted sets is O(log(N)).","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,RESTORE_History,RESTORE_tips,restoreCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RESTORE_Args},
+{"scan","Iterates over the key names in the database.","O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,SCAN_History,SCAN_tips,scanCommand,-2,CMD_READONLY|CMD_TOUCHES_ARBITRARY_KEYS,ACL_CATEGORY_KEYSPACE,.args=SCAN_Args},
+{"sort","Sorts the elements in a list, a set, or a sorted set, optionally storing the result.","O(N+M*log(M)) where N is the number of elements in the list or set to sort, and M the number of returned elements. When the elements are not sorted, complexity is O(N).","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,SORT_History,SORT_tips,sortCommand,-2,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SET|ACL_CATEGORY_SORTEDSET|ACL_CATEGORY_LIST|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{"For the optional BY/GET keyword. It is marked 'unknown' because the key names derive from the content of the key we sort",CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_UNKNOWN,{{0}},KSPEC_FK_UNKNOWN,{{0}}},{"For the optional STORE keyword. It is marked 'unknown' because the keyword can appear anywhere in the argument array",CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_UNKNOWN,{{0}},KSPEC_FK_UNKNOWN,{{0}}}},sortGetKeys,.args=SORT_Args},
+{"sort_ro","Returns the sorted elements of a list, a set, or a sorted set.","O(N+M*log(M)) where N is the number of elements in the list or set to sort, and M the number of returned elements. When the elements are not sorted, complexity is O(N).","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,SORT_RO_History,SORT_RO_tips,sortroCommand,-2,CMD_READONLY,ACL_CATEGORY_SET|ACL_CATEGORY_SORTEDSET|ACL_CATEGORY_LIST|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{"For the optional BY/GET keyword. It is marked 'unknown' because the key names derive from the content of the key we sort",CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_UNKNOWN,{{0}},KSPEC_FK_UNKNOWN,{{0}}}},sortROGetKeys,.args=SORT_RO_Args},
+{"touch","Returns the number of existing keys out of those specified after updating the time they were last accessed.","O(N) where N is the number of keys that will be touched.","3.2.1",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,TOUCH_History,TOUCH_tips,touchCommand,-2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=TOUCH_Args},
+{"ttl","Returns the expiration time in seconds of a key.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,TTL_History,TTL_tips,ttlCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=TTL_Args},
+{"type","Determines the type of value stored at a key.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,TYPE_History,TYPE_tips,typeCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=TYPE_Args},
+{"unlink","Asynchronously deletes one or more keys.","O(1) for each key removed regardless of its size. Then the command does O(N) work in a different thread in order to reclaim memory, where N is the number of allocations the deleted objects where composed of.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,UNLINK_History,UNLINK_tips,unlinkCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE,{{NULL,CMD_KEY_RM|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=UNLINK_Args},
+{"wait","Blocks until the asynchronous replication of all preceding write commands sent by the connection is completed.","O(1)","3.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,WAIT_History,WAIT_tips,waitCommand,3,0,ACL_CATEGORY_CONNECTION,.args=WAIT_Args},
+{"waitaof","Blocks until all of the preceding write commands sent by the connection are written to the append-only file of the master and/or replicas.","O(1)","7.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GENERIC,WAITAOF_History,WAITAOF_tips,waitaofCommand,4,CMD_NOSCRIPT,ACL_CATEGORY_CONNECTION,.args=WAITAOF_Args},
/* geo */
-{"geoadd","Add one or more geospatial items in the geospatial index represented using a sorted set","O(log(N)) for each item added, where N is the number of elements in the sorted set.","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOADD_History,GEOADD_tips,geoaddCommand,-5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOADD_Args},
-{"geodist","Returns the distance between two members of a geospatial index","O(log(N))","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEODIST_History,GEODIST_tips,geodistCommand,-4,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEODIST_Args},
-{"geohash","Returns members of a geospatial index as standard geohash strings","O(log(N)) for each member requested, where N is the number of elements in the sorted set.","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOHASH_History,GEOHASH_tips,geohashCommand,-2,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOHASH_Args},
-{"geopos","Returns longitude and latitude of members of a geospatial index","O(N) where N is the number of members requested.","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOPOS_History,GEOPOS_tips,geoposCommand,-2,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOPOS_Args},
-{"georadius","Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point","O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.","3.2.0",CMD_DOC_DEPRECATED,"`GEOSEARCH` and `GEOSEARCHSTORE` with the `BYRADIUS` argument","6.2.0",COMMAND_GROUP_GEO,GEORADIUS_History,GEORADIUS_tips,georadiusCommand,-6,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_KEYWORD,.bs.keyword={"STORE",6},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_KEYWORD,.bs.keyword={"STOREDIST",6},KSPEC_FK_RANGE,.fk.range={0,1,0}}},georadiusGetKeys,.args=GEORADIUS_Args},
-{"georadiusbymember","Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member","O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.","3.2.0",CMD_DOC_DEPRECATED,"`GEOSEARCH` and `GEOSEARCHSTORE` with the `BYRADIUS` and `FROMMEMBER` arguments","6.2.0",COMMAND_GROUP_GEO,GEORADIUSBYMEMBER_History,GEORADIUSBYMEMBER_tips,georadiusbymemberCommand,-5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_KEYWORD,.bs.keyword={"STORE",5},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_KEYWORD,.bs.keyword={"STOREDIST",5},KSPEC_FK_RANGE,.fk.range={0,1,0}}},georadiusGetKeys,.args=GEORADIUSBYMEMBER_Args},
-{"georadiusbymember_ro","A read-only variant for GEORADIUSBYMEMBER","O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.","3.2.10",CMD_DOC_DEPRECATED,"`GEOSEARCH` with the `BYRADIUS` and `FROMMEMBER` arguments","6.2.0",COMMAND_GROUP_GEO,GEORADIUSBYMEMBER_RO_History,GEORADIUSBYMEMBER_RO_tips,georadiusbymemberroCommand,-5,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEORADIUSBYMEMBER_RO_Args},
-{"georadius_ro","A read-only variant for GEORADIUS","O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.","3.2.10",CMD_DOC_DEPRECATED,"`GEOSEARCH` with the `BYRADIUS` argument","6.2.0",COMMAND_GROUP_GEO,GEORADIUS_RO_History,GEORADIUS_RO_tips,georadiusroCommand,-6,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEORADIUS_RO_Args},
-{"geosearch","Query a sorted set representing a geospatial index to fetch members inside an area of a box or a circle.","O(N+log(M)) where N is the number of elements in the grid-aligned bounding box area around the shape provided as the filter and M is the number of items inside the shape","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOSEARCH_History,GEOSEARCH_tips,geosearchCommand,-7,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOSEARCH_Args},
-{"geosearchstore","Query a sorted set representing a geospatial index to fetch members inside an area of a box or a circle, and store the result in another key.","O(N+log(M)) where N is the number of elements in the grid-aligned bounding box area around the shape provided as the filter and M is the number of items inside the shape","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOSEARCHSTORE_History,GEOSEARCHSTORE_tips,geosearchstoreCommand,-8,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOSEARCHSTORE_Args},
+{"geoadd","Adds one or more members to a geospatial index. The key is created if it doesn't exist.","O(log(N)) for each item added, where N is the number of elements in the sorted set.","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOADD_History,GEOADD_tips,geoaddCommand,-5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOADD_Args},
+{"geodist","Returns the distance between two members of a geospatial index.","O(log(N))","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEODIST_History,GEODIST_tips,geodistCommand,-4,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEODIST_Args},
+{"geohash","Returns members from a geospatial index as geohash strings.","O(log(N)) for each member requested, where N is the number of elements in the sorted set.","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOHASH_History,GEOHASH_tips,geohashCommand,-2,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOHASH_Args},
+{"geopos","Returns the longitude and latitude of members from a geospatial index.","O(N) where N is the number of members requested.","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOPOS_History,GEOPOS_tips,geoposCommand,-2,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOPOS_Args},
+{"georadius","Queries a geospatial index for members within a distance from a coordinate, optionally stores the result.","O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.","3.2.0",CMD_DOC_DEPRECATED,"`GEOSEARCH` and `GEOSEARCHSTORE` with the `BYRADIUS` argument","6.2.0",COMMAND_GROUP_GEO,GEORADIUS_History,GEORADIUS_tips,georadiusCommand,-6,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_KEYWORD,.bs.keyword={"STORE",6},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_KEYWORD,.bs.keyword={"STOREDIST",6},KSPEC_FK_RANGE,.fk.range={0,1,0}}},georadiusGetKeys,.args=GEORADIUS_Args},
+{"georadiusbymember","Queries a geospatial index for members within a distance from a member, optionally stores the result.","O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.","3.2.0",CMD_DOC_DEPRECATED,"`GEOSEARCH` and `GEOSEARCHSTORE` with the `BYRADIUS` and `FROMMEMBER` arguments","6.2.0",COMMAND_GROUP_GEO,GEORADIUSBYMEMBER_History,GEORADIUSBYMEMBER_tips,georadiusbymemberCommand,-5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_KEYWORD,.bs.keyword={"STORE",5},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_KEYWORD,.bs.keyword={"STOREDIST",5},KSPEC_FK_RANGE,.fk.range={0,1,0}}},georadiusGetKeys,.args=GEORADIUSBYMEMBER_Args},
+{"georadiusbymember_ro","Returns members from a geospatial index that are within a distance from a member.","O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.","3.2.10",CMD_DOC_DEPRECATED,"`GEOSEARCH` with the `BYRADIUS` and `FROMMEMBER` arguments","6.2.0",COMMAND_GROUP_GEO,GEORADIUSBYMEMBER_RO_History,GEORADIUSBYMEMBER_RO_tips,georadiusbymemberroCommand,-5,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEORADIUSBYMEMBER_RO_Args},
+{"georadius_ro","Returns members from a geospatial index that are within a distance from a coordinate.","O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.","3.2.10",CMD_DOC_DEPRECATED,"`GEOSEARCH` with the `BYRADIUS` argument","6.2.0",COMMAND_GROUP_GEO,GEORADIUS_RO_History,GEORADIUS_RO_tips,georadiusroCommand,-6,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEORADIUS_RO_Args},
+{"geosearch","Queries a geospatial index for members inside an area of a box or a circle.","O(N+log(M)) where N is the number of elements in the grid-aligned bounding box area around the shape provided as the filter and M is the number of items inside the shape","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOSEARCH_History,GEOSEARCH_tips,geosearchCommand,-7,CMD_READONLY,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOSEARCH_Args},
+{"geosearchstore","Queries a geospatial index for members inside an area of a box or a circle, optionally stores the result.","O(N+log(M)) where N is the number of elements in the grid-aligned bounding box area around the shape provided as the filter and M is the number of items inside the shape","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_GEO,GEOSEARCHSTORE_History,GEOSEARCHSTORE_tips,geosearchstoreCommand,-8,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_GEO,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GEOSEARCHSTORE_Args},
/* hash */
-{"hdel","Delete one or more hash fields","O(N) where N is the number of fields to be removed.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HDEL_History,HDEL_tips,hdelCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HDEL_Args},
-{"hexists","Determine if a hash field exists","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HEXISTS_History,HEXISTS_tips,hexistsCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HEXISTS_Args},
-{"hget","Get the value of a hash field","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HGET_History,HGET_tips,hgetCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HGET_Args},
-{"hgetall","Get all the fields and values in a hash","O(N) where N is the size of the hash.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HGETALL_History,HGETALL_tips,hgetallCommand,2,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HGETALL_Args},
-{"hincrby","Increment the integer value of a hash field by the given number","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HINCRBY_History,HINCRBY_tips,hincrbyCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HINCRBY_Args},
-{"hincrbyfloat","Increment the float value of a hash field by the given amount","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HINCRBYFLOAT_History,HINCRBYFLOAT_tips,hincrbyfloatCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HINCRBYFLOAT_Args},
-{"hkeys","Get all the fields in a hash","O(N) where N is the size of the hash.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HKEYS_History,HKEYS_tips,hkeysCommand,2,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HKEYS_Args},
-{"hlen","Get the number of fields in a hash","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HLEN_History,HLEN_tips,hlenCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HLEN_Args},
-{"hmget","Get the values of all the given hash fields","O(N) where N is the number of fields being requested.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HMGET_History,HMGET_tips,hmgetCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HMGET_Args},
-{"hmset","Set multiple hash fields to multiple values","O(N) where N is the number of fields being set.","2.0.0",CMD_DOC_DEPRECATED,"`HSET` with multiple field-value pairs","4.0.0",COMMAND_GROUP_HASH,HMSET_History,HMSET_tips,hsetCommand,-4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HMSET_Args},
-{"hrandfield","Get one or multiple random fields from a hash","O(N) where N is the number of fields returned","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HRANDFIELD_History,HRANDFIELD_tips,hrandfieldCommand,-2,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HRANDFIELD_Args},
-{"hscan","Incrementally iterate hash fields and associated values","O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HSCAN_History,HSCAN_tips,hscanCommand,-3,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HSCAN_Args},
-{"hset","Set the string value of a hash field","O(1) for each field/value pair added, so O(N) to add N field/value pairs when the command is called with multiple field/value pairs.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HSET_History,HSET_tips,hsetCommand,-4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HSET_Args},
-{"hsetnx","Set the value of a hash field, only if the field does not exist","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HSETNX_History,HSETNX_tips,hsetnxCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HSETNX_Args},
-{"hstrlen","Get the length of the value of a hash field","O(1)","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HSTRLEN_History,HSTRLEN_tips,hstrlenCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HSTRLEN_Args},
-{"hvals","Get all the values in a hash","O(N) where N is the size of the hash.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HVALS_History,HVALS_tips,hvalsCommand,2,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HVALS_Args},
+{"hdel","Deletes one or more fields and their values from a hash. Deletes the hash if no fields remain.","O(N) where N is the number of fields to be removed.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HDEL_History,HDEL_tips,hdelCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HDEL_Args},
+{"hexists","Determines whether a field exists in a hash.","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HEXISTS_History,HEXISTS_tips,hexistsCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HEXISTS_Args},
+{"hget","Returns the value of a field in a hash.","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HGET_History,HGET_tips,hgetCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HGET_Args},
+{"hgetall","Returns all fields and values in a hash.","O(N) where N is the size of the hash.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HGETALL_History,HGETALL_tips,hgetallCommand,2,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HGETALL_Args},
+{"hincrby","Increments the integer value of a field in a hash by a number. Uses 0 as initial value if the field doesn't exist.","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HINCRBY_History,HINCRBY_tips,hincrbyCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HINCRBY_Args},
+{"hincrbyfloat","Increments the floating point value of a field by a number. Uses 0 as initial value if the field doesn't exist.","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HINCRBYFLOAT_History,HINCRBYFLOAT_tips,hincrbyfloatCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HINCRBYFLOAT_Args},
+{"hkeys","Returns all fields in a hash.","O(N) where N is the size of the hash.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HKEYS_History,HKEYS_tips,hkeysCommand,2,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HKEYS_Args},
+{"hlen","Returns the number of fields in a hash.","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HLEN_History,HLEN_tips,hlenCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HLEN_Args},
+{"hmget","Returns the values of all fields in a hash.","O(N) where N is the number of fields being requested.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HMGET_History,HMGET_tips,hmgetCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HMGET_Args},
+{"hmset","Sets the values of multiple fields.","O(N) where N is the number of fields being set.","2.0.0",CMD_DOC_DEPRECATED,"`HSET` with multiple field-value pairs","4.0.0",COMMAND_GROUP_HASH,HMSET_History,HMSET_tips,hsetCommand,-4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HMSET_Args},
+{"hrandfield","Returns one or more random fields from a hash.","O(N) where N is the number of fields returned","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HRANDFIELD_History,HRANDFIELD_tips,hrandfieldCommand,-2,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HRANDFIELD_Args},
+{"hscan","Iterates over fields and values of a hash.","O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HSCAN_History,HSCAN_tips,hscanCommand,-3,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HSCAN_Args},
+{"hset","Creates or modifies the value of a field in a hash.","O(1) for each field/value pair added, so O(N) to add N field/value pairs when the command is called with multiple field/value pairs.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HSET_History,HSET_tips,hsetCommand,-4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HSET_Args},
+{"hsetnx","Sets the value of a field in a hash only when the field doesn't exist.","O(1)","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HSETNX_History,HSETNX_tips,hsetnxCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HSETNX_Args},
+{"hstrlen","Returns the length of the value of a field.","O(1)","3.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HSTRLEN_History,HSTRLEN_tips,hstrlenCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HSTRLEN_Args},
+{"hvals","Returns all values in a hash.","O(N) where N is the size of the hash.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HASH,HVALS_History,HVALS_tips,hvalsCommand,2,CMD_READONLY,ACL_CATEGORY_HASH,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=HVALS_Args},
/* hyperloglog */
-{"pfadd","Adds the specified elements to the specified HyperLogLog.","O(1) to add every element.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFADD_History,PFADD_tips,pfaddCommand,-2,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HYPERLOGLOG,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PFADD_Args},
-{"pfcount","Return the approximated cardinality of the set(s) observed by the HyperLogLog at key(s).","O(1) with a very small average constant time when called with a single key. O(N) with N being the number of keys, and much bigger constant times, when called with multiple keys.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFCOUNT_History,PFCOUNT_tips,pfcountCommand,-2,CMD_READONLY|CMD_MAY_REPLICATE,ACL_CATEGORY_HYPERLOGLOG,{{"RW because it may change the internal representation of the key, and propagate to replicas",CMD_KEY_RW|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=PFCOUNT_Args},
-{"pfdebug","Internal commands for debugging HyperLogLog values","N/A","2.8.9",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFDEBUG_History,PFDEBUG_tips,pfdebugCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_ADMIN,ACL_CATEGORY_HYPERLOGLOG,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PFDEBUG_Args},
-{"pfmerge","Merge N different HyperLogLogs into a single one.","O(N) to merge N HyperLogLogs, but with high constant times.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFMERGE_History,PFMERGE_tips,pfmergeCommand,-2,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_HYPERLOGLOG,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=PFMERGE_Args},
-{"pfselftest","An internal command for testing HyperLogLog values","N/A","2.8.9",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFSELFTEST_History,PFSELFTEST_tips,pfselftestCommand,1,CMD_ADMIN,ACL_CATEGORY_HYPERLOGLOG},
+{"pfadd","Adds elements to a HyperLogLog key. Creates the key if it doesn't exist.","O(1) to add every element.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFADD_History,PFADD_tips,pfaddCommand,-2,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_HYPERLOGLOG,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PFADD_Args},
+{"pfcount","Returns the approximated cardinality of the set(s) observed by the HyperLogLog key(s).","O(1) with a very small average constant time when called with a single key. O(N) with N being the number of keys, and much bigger constant times, when called with multiple keys.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFCOUNT_History,PFCOUNT_tips,pfcountCommand,-2,CMD_READONLY|CMD_MAY_REPLICATE,ACL_CATEGORY_HYPERLOGLOG,{{"RW because it may change the internal representation of the key, and propagate to replicas",CMD_KEY_RW|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=PFCOUNT_Args},
+{"pfdebug","Internal commands for debugging HyperLogLog values.","N/A","2.8.9",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFDEBUG_History,PFDEBUG_tips,pfdebugCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_ADMIN,ACL_CATEGORY_HYPERLOGLOG,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PFDEBUG_Args},
+{"pfmerge","Merges one or more HyperLogLog values into a single key.","O(N) to merge N HyperLogLogs, but with high constant times.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFMERGE_History,PFMERGE_tips,pfmergeCommand,-2,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_HYPERLOGLOG,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=PFMERGE_Args},
+{"pfselftest","An internal command for testing HyperLogLog values.","N/A","2.8.9",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_HYPERLOGLOG,PFSELFTEST_History,PFSELFTEST_tips,pfselftestCommand,1,CMD_ADMIN,ACL_CATEGORY_HYPERLOGLOG},
/* list */
-{"blmove","Pop an element from a list, push it to another list and return it; or block until one is available","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,BLMOVE_History,BLMOVE_tips,blmoveCommand,6,CMD_WRITE|CMD_DENYOOM|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BLMOVE_Args},
-{"blmpop","Pop elements from a list, or block until one is available","O(N+M) where N is the number of provided keys and M is the number of elements returned.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,BLMPOP_History,BLMPOP_tips,blmpopCommand,-5,CMD_WRITE|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},blmpopGetKeys,.args=BLMPOP_Args},
-{"blpop","Remove and get the first element in a list, or block until one is available","O(N) where N is the number of provided keys.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,BLPOP_History,BLPOP_tips,blpopCommand,-3,CMD_WRITE|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-2,1,0}}},.args=BLPOP_Args},
-{"brpop","Remove and get the last element in a list, or block until one is available","O(N) where N is the number of provided keys.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,BRPOP_History,BRPOP_tips,brpopCommand,-3,CMD_WRITE|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-2,1,0}}},.args=BRPOP_Args},
-{"brpoplpush","Pop an element from a list, push it to another list and return it; or block until one is available","O(1)","2.2.0",CMD_DOC_DEPRECATED,"`BLMOVE` with the `RIGHT` and `LEFT` arguments","6.2.0",COMMAND_GROUP_LIST,BRPOPLPUSH_History,BRPOPLPUSH_tips,brpoplpushCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BRPOPLPUSH_Args},
-{"lindex","Get an element from a list by its index","O(N) where N is the number of elements to traverse to get to the element at index. This makes asking for the first or the last element of the list O(1).","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LINDEX_History,LINDEX_tips,lindexCommand,3,CMD_READONLY,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LINDEX_Args},
-{"linsert","Insert an element before or after another element in a list","O(N) where N is the number of elements to traverse before seeing the value pivot. This means that inserting somewhere on the left end on the list (head) can be considered O(1) and inserting somewhere on the right end (tail) is O(N).","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LINSERT_History,LINSERT_tips,linsertCommand,5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LINSERT_Args},
-{"llen","Get the length of a list","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LLEN_History,LLEN_tips,llenCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LLEN_Args},
-{"lmove","Pop an element from a list, push it to another list and return it","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LMOVE_History,LMOVE_tips,lmoveCommand,5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LMOVE_Args},
-{"lmpop","Pop elements from a list","O(N+M) where N is the number of provided keys and M is the number of elements returned.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LMPOP_History,LMPOP_tips,lmpopCommand,-4,CMD_WRITE,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},lmpopGetKeys,.args=LMPOP_Args},
-{"lpop","Remove and get the first elements in a list","O(N) where N is the number of elements returned","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LPOP_History,LPOP_tips,lpopCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LPOP_Args},
-{"lpos","Return the index of matching elements on a list","O(N) where N is the number of elements in the list, for the average case. When searching for elements near the head or the tail of the list, or when the MAXLEN option is provided, the command may run in constant time.","6.0.6",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LPOS_History,LPOS_tips,lposCommand,-3,CMD_READONLY,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LPOS_Args},
-{"lpush","Prepend one or multiple elements to a list","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LPUSH_History,LPUSH_tips,lpushCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LPUSH_Args},
-{"lpushx","Prepend an element to a list, only if the list exists","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LPUSHX_History,LPUSHX_tips,lpushxCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LPUSHX_Args},
-{"lrange","Get a range of elements from a list","O(S+N) where S is the distance of start offset from HEAD for small lists, from nearest end (HEAD or TAIL) for large lists; and N is the number of elements in the specified range.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LRANGE_History,LRANGE_tips,lrangeCommand,4,CMD_READONLY,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LRANGE_Args},
-{"lrem","Remove elements from a list","O(N+M) where N is the length of the list and M is the number of elements removed.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LREM_History,LREM_tips,lremCommand,4,CMD_WRITE,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LREM_Args},
-{"lset","Set the value of an element in a list by its index","O(N) where N is the length of the list. Setting either the first or the last element of the list is O(1).","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LSET_History,LSET_tips,lsetCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LSET_Args},
-{"ltrim","Trim a list to the specified range","O(N) where N is the number of elements to be removed by the operation.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LTRIM_History,LTRIM_tips,ltrimCommand,4,CMD_WRITE,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LTRIM_Args},
-{"rpop","Remove and get the last elements in a list","O(N) where N is the number of elements returned","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,RPOP_History,RPOP_tips,rpopCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RPOP_Args},
-{"rpoplpush","Remove the last element in a list, prepend it to another list and return it","O(1)","1.2.0",CMD_DOC_DEPRECATED,"`LMOVE` with the `RIGHT` and `LEFT` arguments","6.2.0",COMMAND_GROUP_LIST,RPOPLPUSH_History,RPOPLPUSH_tips,rpoplpushCommand,3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RPOPLPUSH_Args},
-{"rpush","Append one or multiple elements to a list","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,RPUSH_History,RPUSH_tips,rpushCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RPUSH_Args},
-{"rpushx","Append an element to a list, only if the list exists","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,RPUSHX_History,RPUSHX_tips,rpushxCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RPUSHX_Args},
+{"blmove","Pops an element from a list, pushes it to another list and returns it. Blocks until an element is available otherwise. Deletes the list if the last element was moved.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,BLMOVE_History,BLMOVE_tips,blmoveCommand,6,CMD_WRITE|CMD_DENYOOM|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BLMOVE_Args},
+{"blmpop","Pops the first element from one of multiple lists. Blocks until an element is available otherwise. Deletes the list if the last element was popped.","O(N+M) where N is the number of provided keys and M is the number of elements returned.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,BLMPOP_History,BLMPOP_tips,blmpopCommand,-5,CMD_WRITE|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},blmpopGetKeys,.args=BLMPOP_Args},
+{"blpop","Removes and returns the first element in a list. Blocks until an element is available otherwise. Deletes the list if the last element was popped.","O(N) where N is the number of provided keys.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,BLPOP_History,BLPOP_tips,blpopCommand,-3,CMD_WRITE|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-2,1,0}}},.args=BLPOP_Args},
+{"brpop","Removes and returns the last element in a list. Blocks until an element is available otherwise. Deletes the list if the last element was popped.","O(N) where N is the number of provided keys.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,BRPOP_History,BRPOP_tips,brpopCommand,-3,CMD_WRITE|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-2,1,0}}},.args=BRPOP_Args},
+{"brpoplpush","Pops an element from a list, pushes it to another list and returns it. Block until an element is available otherwise. Deletes the list if the last element was popped.","O(1)","2.2.0",CMD_DOC_DEPRECATED,"`BLMOVE` with the `RIGHT` and `LEFT` arguments","6.2.0",COMMAND_GROUP_LIST,BRPOPLPUSH_History,BRPOPLPUSH_tips,brpoplpushCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_BLOCKING,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=BRPOPLPUSH_Args},
+{"lindex","Returns an element from a list by its index.","O(N) where N is the number of elements to traverse to get to the element at index. This makes asking for the first or the last element of the list O(1).","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LINDEX_History,LINDEX_tips,lindexCommand,3,CMD_READONLY,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LINDEX_Args},
+{"linsert","Inserts an element before or after another element in a list.","O(N) where N is the number of elements to traverse before seeing the value pivot. This means that inserting somewhere on the left end on the list (head) can be considered O(1) and inserting somewhere on the right end (tail) is O(N).","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LINSERT_History,LINSERT_tips,linsertCommand,5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LINSERT_Args},
+{"llen","Returns the length of a list.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LLEN_History,LLEN_tips,llenCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LLEN_Args},
+{"lmove","Returns an element after popping it from one list and pushing it to another. Deletes the list if the last element was moved.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LMOVE_History,LMOVE_tips,lmoveCommand,5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LMOVE_Args},
+{"lmpop","Returns multiple elements from a list after removing them. Deletes the list if the last element was popped.","O(N+M) where N is the number of provided keys and M is the number of elements returned.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LMPOP_History,LMPOP_tips,lmpopCommand,-4,CMD_WRITE,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},lmpopGetKeys,.args=LMPOP_Args},
+{"lpop","Returns the first elements in a list after removing it. Deletes the list if the last element was popped.","O(N) where N is the number of elements returned","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LPOP_History,LPOP_tips,lpopCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LPOP_Args},
+{"lpos","Returns the index of matching elements in a list.","O(N) where N is the number of elements in the list, for the average case. When searching for elements near the head or the tail of the list, or when the MAXLEN option is provided, the command may run in constant time.","6.0.6",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LPOS_History,LPOS_tips,lposCommand,-3,CMD_READONLY,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LPOS_Args},
+{"lpush","Prepends one or more elements to a list. Creates the key if it doesn't exist.","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LPUSH_History,LPUSH_tips,lpushCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LPUSH_Args},
+{"lpushx","Prepends one or more elements to a list only when the list exists.","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LPUSHX_History,LPUSHX_tips,lpushxCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LPUSHX_Args},
+{"lrange","Returns a range of elements from a list.","O(S+N) where S is the distance of start offset from HEAD for small lists, from nearest end (HEAD or TAIL) for large lists; and N is the number of elements in the specified range.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LRANGE_History,LRANGE_tips,lrangeCommand,4,CMD_READONLY,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LRANGE_Args},
+{"lrem","Removes elements from a list. Deletes the list if the last element was removed.","O(N+M) where N is the length of the list and M is the number of elements removed.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LREM_History,LREM_tips,lremCommand,4,CMD_WRITE,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LREM_Args},
+{"lset","Sets the value of an element in a list by its index.","O(N) where N is the length of the list. Setting either the first or the last element of the list is O(1).","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LSET_History,LSET_tips,lsetCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LSET_Args},
+{"ltrim","Removes elements from both ends a list. Deletes the list if all elements were trimmed.","O(N) where N is the number of elements to be removed by the operation.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,LTRIM_History,LTRIM_tips,ltrimCommand,4,CMD_WRITE,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=LTRIM_Args},
+{"rpop","Returns and removes the last elements of a list. Deletes the list if the lst element was popped.","O(N) where N is the number of elements returned","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,RPOP_History,RPOP_tips,rpopCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RPOP_Args},
+{"rpoplpush","Returns the last element of a list after removing and pushing it to another list. Deletes the list if the lst element was popped.","O(1)","1.2.0",CMD_DOC_DEPRECATED,"`LMOVE` with the `RIGHT` and `LEFT` arguments","6.2.0",COMMAND_GROUP_LIST,RPOPLPUSH_History,RPOPLPUSH_tips,rpoplpushCommand,3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RPOPLPUSH_Args},
+{"rpush","Appends one or more elements to a list. Creates the key if it doesn't exist.","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,RPUSH_History,RPUSH_tips,rpushCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RPUSH_Args},
+{"rpushx","Appends an element to a list only when the list exists.","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_LIST,RPUSHX_History,RPUSHX_tips,rpushxCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_LIST,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RPUSHX_Args},
/* pubsub */
-{"psubscribe","Listen for messages published to channels matching the given patterns","O(N) where N is the number of patterns the client is already subscribed to.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PSUBSCRIBE_History,PSUBSCRIBE_tips,psubscribeCommand,-2,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=PSUBSCRIBE_Args},
-{"publish","Post a message to a channel","O(N+M) where N is the number of clients subscribed to the receiving channel and M is the total number of subscribed patterns (by any client).","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBLISH_History,PUBLISH_tips,publishCommand,3,CMD_PUBSUB|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_MAY_REPLICATE|CMD_SENTINEL,0,.args=PUBLISH_Args},
-{"pubsub","A container for Pub/Sub commands","Depends on subcommand.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_History,PUBSUB_tips,NULL,-2,0,0,.subcommands=PUBSUB_Subcommands},
-{"punsubscribe","Stop listening for messages posted to channels matching the given patterns","O(N+M) where N is the number of patterns the client is already subscribed and M is the number of total patterns subscribed in the system (by any client).","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUNSUBSCRIBE_History,PUNSUBSCRIBE_tips,punsubscribeCommand,-1,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=PUNSUBSCRIBE_Args},
+{"psubscribe","Listens for messages published to channels that match one or more patterns.","O(N) where N is the number of patterns the client is already subscribed to.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PSUBSCRIBE_History,PSUBSCRIBE_tips,psubscribeCommand,-2,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=PSUBSCRIBE_Args},
+{"publish","Posts a message to a channel.","O(N+M) where N is the number of clients subscribed to the receiving channel and M is the total number of subscribed patterns (by any client).","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBLISH_History,PUBLISH_tips,publishCommand,3,CMD_PUBSUB|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_MAY_REPLICATE|CMD_SENTINEL,0,.args=PUBLISH_Args},
+{"pubsub","A container for Pub/Sub commands.","Depends on subcommand.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUBSUB_History,PUBSUB_tips,NULL,-2,0,0,.subcommands=PUBSUB_Subcommands},
+{"punsubscribe","Stops listening to messages published to channels that match one or more patterns.","O(N+M) where N is the number of patterns the client is already subscribed and M is the number of total patterns subscribed in the system (by any client).","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,PUNSUBSCRIBE_History,PUNSUBSCRIBE_tips,punsubscribeCommand,-1,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=PUNSUBSCRIBE_Args},
{"spublish","Post a message to a shard channel","O(N) where N is the number of clients subscribed to the receiving shard channel.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,SPUBLISH_History,SPUBLISH_tips,spublishCommand,3,CMD_PUBSUB|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_MAY_REPLICATE,0,{{NULL,CMD_KEY_NOT_KEY,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SPUBLISH_Args},
-{"ssubscribe","Listen for messages published to the given shard channels","O(N) where N is the number of shard channels to subscribe to.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,SSUBSCRIBE_History,SSUBSCRIBE_tips,ssubscribeCommand,-2,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,{{NULL,CMD_KEY_NOT_KEY,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SSUBSCRIBE_Args},
-{"subscribe","Listen for messages published to the given channels","O(N) where N is the number of channels to subscribe to.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,SUBSCRIBE_History,SUBSCRIBE_tips,subscribeCommand,-2,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=SUBSCRIBE_Args},
-{"sunsubscribe","Stop listening for messages posted to the given shard channels","O(N) where N is the number of clients already subscribed to a shard channel.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,SUNSUBSCRIBE_History,SUNSUBSCRIBE_tips,sunsubscribeCommand,-1,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,{{NULL,CMD_KEY_NOT_KEY,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SUNSUBSCRIBE_Args},
-{"unsubscribe","Stop listening for messages posted to the given channels","O(N) where N is the number of clients already subscribed to a channel.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,UNSUBSCRIBE_History,UNSUBSCRIBE_tips,unsubscribeCommand,-1,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=UNSUBSCRIBE_Args},
+{"ssubscribe","Listens for messages published to shard channels.","O(N) where N is the number of shard channels to subscribe to.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,SSUBSCRIBE_History,SSUBSCRIBE_tips,ssubscribeCommand,-2,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,{{NULL,CMD_KEY_NOT_KEY,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SSUBSCRIBE_Args},
+{"subscribe","Listens for messages published to channels.","O(N) where N is the number of channels to subscribe to.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,SUBSCRIBE_History,SUBSCRIBE_tips,subscribeCommand,-2,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=SUBSCRIBE_Args},
+{"sunsubscribe","Stops listening to messages posted to shard channels.","O(N) where N is the number of clients already subscribed to a shard channel.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,SUNSUBSCRIBE_History,SUNSUBSCRIBE_tips,sunsubscribeCommand,-1,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0,{{NULL,CMD_KEY_NOT_KEY,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SUNSUBSCRIBE_Args},
+{"unsubscribe","Stops listening to messages posted to channels.","O(N) where N is the number of clients already subscribed to a channel.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_PUBSUB,UNSUBSCRIBE_History,UNSUBSCRIBE_tips,unsubscribeCommand,-1,CMD_PUBSUB|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SENTINEL,0,.args=UNSUBSCRIBE_Args},
/* scripting */
-{"eval","Execute a Lua script server side","Depends on the script that is executed.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,EVAL_History,EVAL_tips,evalCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_MAY_REPLICATE|CMD_NO_MANDATORY_KEYS|CMD_STALE,ACL_CATEGORY_SCRIPTING,{{"We cannot tell how the keys will be used so we assume the worst, RW and UPDATE",CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},evalGetKeys,.args=EVAL_Args},
-{"evalsha","Execute a Lua script server side","Depends on the script that is executed.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,EVALSHA_History,EVALSHA_tips,evalShaCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_MAY_REPLICATE|CMD_NO_MANDATORY_KEYS|CMD_STALE,ACL_CATEGORY_SCRIPTING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},evalGetKeys,.args=EVALSHA_Args},
-{"evalsha_ro","Execute a read-only Lua script server side","Depends on the script that is executed.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,EVALSHA_RO_History,EVALSHA_RO_tips,evalShaRoCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_NO_MANDATORY_KEYS|CMD_STALE|CMD_READONLY,ACL_CATEGORY_SCRIPTING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},evalGetKeys,.args=EVALSHA_RO_Args},
-{"eval_ro","Execute a read-only Lua script server side","Depends on the script that is executed.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,EVAL_RO_History,EVAL_RO_tips,evalRoCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_NO_MANDATORY_KEYS|CMD_STALE|CMD_READONLY,ACL_CATEGORY_SCRIPTING,{{"We cannot tell how the keys will be used so we assume the worst, RO and ACCESS",CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},evalGetKeys,.args=EVAL_RO_Args},
-{"fcall","Invoke a function","Depends on the function that is executed.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FCALL_History,FCALL_tips,fcallCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_MAY_REPLICATE|CMD_NO_MANDATORY_KEYS|CMD_STALE,ACL_CATEGORY_SCRIPTING,{{"We cannot tell how the keys will be used so we assume the worst, RW and UPDATE",CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},functionGetKeys,.args=FCALL_Args},
-{"fcall_ro","Invoke a read-only function","Depends on the function that is executed.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FCALL_RO_History,FCALL_RO_tips,fcallroCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_NO_MANDATORY_KEYS|CMD_STALE|CMD_READONLY,ACL_CATEGORY_SCRIPTING,{{"We cannot tell how the keys will be used so we assume the worst, RO and ACCESS",CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},functionGetKeys,.args=FCALL_RO_Args},
-{"function","A container for function commands","Depends on subcommand.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_History,FUNCTION_tips,NULL,-2,0,0,.subcommands=FUNCTION_Subcommands},
-{"script","A container for Lua scripts management commands","Depends on subcommand.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_History,SCRIPT_tips,NULL,-2,0,0,.subcommands=SCRIPT_Subcommands},
+{"eval","Executes a server-side Lua script.","Depends on the script that is executed.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,EVAL_History,EVAL_tips,evalCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_MAY_REPLICATE|CMD_NO_MANDATORY_KEYS|CMD_STALE,ACL_CATEGORY_SCRIPTING,{{"We cannot tell how the keys will be used so we assume the worst, RW and UPDATE",CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},evalGetKeys,.args=EVAL_Args},
+{"evalsha","Executes a server-side Lua script by SHA1 digest.","Depends on the script that is executed.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,EVALSHA_History,EVALSHA_tips,evalShaCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_MAY_REPLICATE|CMD_NO_MANDATORY_KEYS|CMD_STALE,ACL_CATEGORY_SCRIPTING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},evalGetKeys,.args=EVALSHA_Args},
+{"evalsha_ro","Executes a read-only server-side Lua script by SHA1 digest.","Depends on the script that is executed.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,EVALSHA_RO_History,EVALSHA_RO_tips,evalShaRoCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_NO_MANDATORY_KEYS|CMD_STALE|CMD_READONLY,ACL_CATEGORY_SCRIPTING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},evalGetKeys,.args=EVALSHA_RO_Args},
+{"eval_ro","Executes a read-only server-side Lua script.","Depends on the script that is executed.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,EVAL_RO_History,EVAL_RO_tips,evalRoCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_NO_MANDATORY_KEYS|CMD_STALE|CMD_READONLY,ACL_CATEGORY_SCRIPTING,{{"We cannot tell how the keys will be used so we assume the worst, RO and ACCESS",CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},evalGetKeys,.args=EVAL_RO_Args},
+{"fcall","Invokes a function.","Depends on the function that is executed.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FCALL_History,FCALL_tips,fcallCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_MAY_REPLICATE|CMD_NO_MANDATORY_KEYS|CMD_STALE,ACL_CATEGORY_SCRIPTING,{{"We cannot tell how the keys will be used so we assume the worst, RW and UPDATE",CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},functionGetKeys,.args=FCALL_Args},
+{"fcall_ro","Invokes a read-only function.","Depends on the function that is executed.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FCALL_RO_History,FCALL_RO_tips,fcallroCommand,-3,CMD_NOSCRIPT|CMD_SKIP_MONITOR|CMD_NO_MANDATORY_KEYS|CMD_STALE|CMD_READONLY,ACL_CATEGORY_SCRIPTING,{{"We cannot tell how the keys will be used so we assume the worst, RO and ACCESS",CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},functionGetKeys,.args=FCALL_RO_Args},
+{"function","A container for function commands.","Depends on subcommand.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,FUNCTION_History,FUNCTION_tips,NULL,-2,0,0,.subcommands=FUNCTION_Subcommands},
+{"script","A container for Lua scripts management commands.","Depends on subcommand.","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SCRIPTING,SCRIPT_History,SCRIPT_tips,NULL,-2,0,0,.subcommands=SCRIPT_Subcommands},
/* sentinel */
-{"sentinel","A container for Sentinel commands","Depends on subcommand.","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_History,SENTINEL_tips,NULL,-2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.subcommands=SENTINEL_Subcommands},
+{"sentinel","A container for Redis Sentinel commands.","Depends on subcommand.","2.8.4",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SENTINEL,SENTINEL_History,SENTINEL_tips,NULL,-2,CMD_ADMIN|CMD_SENTINEL|CMD_ONLY_SENTINEL,0,.subcommands=SENTINEL_Subcommands},
/* server */
-{"acl","A container for Access List Control commands ","Depends on subcommand.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_History,ACL_tips,NULL,-2,CMD_SENTINEL,0,.subcommands=ACL_Subcommands},
-{"bgrewriteaof","Asynchronously rewrite the append-only file","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,BGREWRITEAOF_History,BGREWRITEAOF_tips,bgrewriteaofCommand,1,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT,0},
-{"bgsave","Asynchronously save the dataset to disk","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,BGSAVE_History,BGSAVE_tips,bgsaveCommand,-1,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT,0,.args=BGSAVE_Args},
-{"command","Get array of Redis command details","O(N) where N is the total number of Redis commands","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_History,COMMAND_tips,commandCommand,-1,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.subcommands=COMMAND_Subcommands},
-{"config","A container for server configuration commands","Depends on subcommand.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_History,CONFIG_tips,NULL,-2,0,0,.subcommands=CONFIG_Subcommands},
-{"dbsize","Return the number of keys in the selected database","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,DBSIZE_History,DBSIZE_tips,dbsizeCommand,1,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE},
-{"debug","A container for debugging commands","Depends on subcommand.","1.0.0",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_SERVER,DEBUG_History,DEBUG_tips,debugCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_PROTECTED,0},
-{"failover","Start a coordinated failover between this server and one of its replicas.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,FAILOVER_History,FAILOVER_tips,failoverCommand,-1,CMD_ADMIN|CMD_NOSCRIPT|CMD_STALE,0,.args=FAILOVER_Args},
-{"flushall","Remove all keys from all databases","O(N) where N is the total number of keys in all databases","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,FLUSHALL_History,FLUSHALL_tips,flushallCommand,-1,CMD_WRITE,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,.args=FLUSHALL_Args},
-{"flushdb","Remove all keys from the current database","O(N) where N is the number of keys in the selected database","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,FLUSHDB_History,FLUSHDB_tips,flushdbCommand,-1,CMD_WRITE,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,.args=FLUSHDB_Args},
-{"info","Get information and statistics about the server","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,INFO_History,INFO_tips,infoCommand,-1,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_DANGEROUS,.args=INFO_Args},
-{"lastsave","Get the UNIX time stamp of the last successful save to disk","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LASTSAVE_History,LASTSAVE_tips,lastsaveCommand,1,CMD_LOADING|CMD_STALE|CMD_FAST,ACL_CATEGORY_ADMIN|ACL_CATEGORY_DANGEROUS},
-{"latency","A container for latency diagnostics commands","Depends on subcommand.","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_History,LATENCY_tips,NULL,-2,0,0,.subcommands=LATENCY_Subcommands},
-{"lolwut","Display some computer art and the Redis version",NULL,"5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LOLWUT_History,LOLWUT_tips,lolwutCommand,-1,CMD_READONLY|CMD_FAST,0,.args=LOLWUT_Args},
-{"memory","A container for memory diagnostics commands","Depends on subcommand.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_History,MEMORY_tips,NULL,-2,0,0,.subcommands=MEMORY_Subcommands},
-{"module","A container for module commands","Depends on subcommand.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_History,MODULE_tips,NULL,-2,0,0,.subcommands=MODULE_Subcommands},
-{"monitor","Listen for all requests received by the server in real time",NULL,"1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MONITOR_History,MONITOR_tips,monitorCommand,1,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
-{"psync","Internal command used for replication",NULL,"2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,PSYNC_History,PSYNC_tips,syncCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NO_MULTI|CMD_NOSCRIPT,0,.args=PSYNC_Args},
-{"replconf","An internal command for configuring the replication stream","O(1)","3.0.0",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_SERVER,REPLCONF_History,REPLCONF_tips,replconfCommand,-1,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_ALLOW_BUSY,0},
-{"replicaof","Make the server a replica of another instance, or promote it as master.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,REPLICAOF_History,REPLICAOF_tips,replicaofCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_STALE,0,.args=REPLICAOF_Args},
-{"restore-asking","An internal command for migrating keys in a cluster","O(1) to create the new key and additional O(N*M) to reconstruct the serialized value, where N is the number of Redis objects composing the value and M their average size. For small string values the time complexity is thus O(1)+O(1*M) where M is small, so simply O(1). However for sorted set values the complexity is O(N*M*log(N)) because inserting values into sorted sets is O(log(N)).","3.0.0",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_SERVER,RESTORE_ASKING_History,RESTORE_ASKING_tips,restoreCommand,-4,CMD_WRITE|CMD_DENYOOM|CMD_ASKING,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RESTORE_ASKING_Args},
-{"role","Return the role of the instance in the context of replication","O(1)","2.8.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ROLE_History,ROLE_tips,roleCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_SENTINEL,ACL_CATEGORY_ADMIN|ACL_CATEGORY_DANGEROUS},
-{"save","Synchronously save the dataset to disk","O(N) where N is the total number of keys in all databases","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SAVE_History,SAVE_tips,saveCommand,1,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_NO_MULTI,0},
-{"shutdown","Synchronously save the dataset to disk and then shut down the server","O(N) when saving, where N is the total number of keys in all databases when saving data, otherwise O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SHUTDOWN_History,SHUTDOWN_tips,shutdownCommand,-1,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_NO_MULTI|CMD_SENTINEL|CMD_ALLOW_BUSY,0,.args=SHUTDOWN_Args},
-{"slaveof","Make the server a replica of another instance, or promote it as master.","O(1)","1.0.0",CMD_DOC_DEPRECATED,"`REPLICAOF`","5.0.0",COMMAND_GROUP_SERVER,SLAVEOF_History,SLAVEOF_tips,replicaofCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_STALE,0,.args=SLAVEOF_Args},
-{"slowlog","A container for slow log commands","Depends on subcommand.","2.2.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SLOWLOG_History,SLOWLOG_tips,NULL,-2,0,0,.subcommands=SLOWLOG_Subcommands},
-{"swapdb","Swaps two Redis databases","O(N) where N is the count of clients watching or blocking on keys from both databases.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SWAPDB_History,SWAPDB_tips,swapdbCommand,3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,.args=SWAPDB_Args},
-{"sync","Internal command used for replication",NULL,"1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SYNC_History,SYNC_tips,syncCommand,1,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NO_MULTI|CMD_NOSCRIPT,0},
-{"time","Return the current server time","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,TIME_History,TIME_tips,timeCommand,1,CMD_LOADING|CMD_STALE|CMD_FAST,0},
+{"acl","A container for Access List Control commands.","Depends on subcommand.","6.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ACL_History,ACL_tips,NULL,-2,CMD_SENTINEL,0,.subcommands=ACL_Subcommands},
+{"bgrewriteaof","Asynchronously rewrites the append-only file to disk.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,BGREWRITEAOF_History,BGREWRITEAOF_tips,bgrewriteaofCommand,1,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT,0},
+{"bgsave","Asynchronously saves the database(s) to disk.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,BGSAVE_History,BGSAVE_tips,bgsaveCommand,-1,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT,0,.args=BGSAVE_Args},
+{"command","Returns detailed information about all commands.","O(N) where N is the total number of Redis commands","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,COMMAND_History,COMMAND_tips,commandCommand,-1,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_CONNECTION,.subcommands=COMMAND_Subcommands},
+{"config","A container for server configuration commands.","Depends on subcommand.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,CONFIG_History,CONFIG_tips,NULL,-2,0,0,.subcommands=CONFIG_Subcommands},
+{"dbsize","Returns the number of keys in the database.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,DBSIZE_History,DBSIZE_tips,dbsizeCommand,1,CMD_READONLY|CMD_FAST,ACL_CATEGORY_KEYSPACE},
+{"debug","A container for debugging commands.","Depends on subcommand.","1.0.0",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_SERVER,DEBUG_History,DEBUG_tips,debugCommand,-2,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_PROTECTED,0},
+{"failover","Starts a coordinated failover from a server to one of its replicas.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,FAILOVER_History,FAILOVER_tips,failoverCommand,-1,CMD_ADMIN|CMD_NOSCRIPT|CMD_STALE,0,.args=FAILOVER_Args},
+{"flushall","Removes all keys from all databases.","O(N) where N is the total number of keys in all databases","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,FLUSHALL_History,FLUSHALL_tips,flushallCommand,-1,CMD_WRITE,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,.args=FLUSHALL_Args},
+{"flushdb","Remove all keys from the current database.","O(N) where N is the number of keys in the selected database","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,FLUSHDB_History,FLUSHDB_tips,flushdbCommand,-1,CMD_WRITE,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,.args=FLUSHDB_Args},
+{"info","Returns information and statistics about the server.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,INFO_History,INFO_tips,infoCommand,-1,CMD_LOADING|CMD_STALE|CMD_SENTINEL,ACL_CATEGORY_DANGEROUS,.args=INFO_Args},
+{"lastsave","Returns the Unix timestamp of the last successful save to disk.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LASTSAVE_History,LASTSAVE_tips,lastsaveCommand,1,CMD_LOADING|CMD_STALE|CMD_FAST,ACL_CATEGORY_ADMIN|ACL_CATEGORY_DANGEROUS},
+{"latency","A container for latency diagnostics commands.","Depends on subcommand.","2.8.13",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LATENCY_History,LATENCY_tips,NULL,-2,0,0,.subcommands=LATENCY_Subcommands},
+{"lolwut","Displays computer art and the Redis version",NULL,"5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,LOLWUT_History,LOLWUT_tips,lolwutCommand,-1,CMD_READONLY|CMD_FAST,0,.args=LOLWUT_Args},
+{"memory","A container for memory diagnostics commands.","Depends on subcommand.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MEMORY_History,MEMORY_tips,NULL,-2,0,0,.subcommands=MEMORY_Subcommands},
+{"module","A container for module commands.","Depends on subcommand.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MODULE_History,MODULE_tips,NULL,-2,0,0,.subcommands=MODULE_Subcommands},
+{"monitor","Listens for all requests received by the server in real-time.",NULL,"1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,MONITOR_History,MONITOR_tips,monitorCommand,1,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE,0},
+{"psync","An internal command used in replication.",NULL,"2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,PSYNC_History,PSYNC_tips,syncCommand,-3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NO_MULTI|CMD_NOSCRIPT,0,.args=PSYNC_Args},
+{"replconf","An internal command for configuring the replication stream.","O(1)","3.0.0",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_SERVER,REPLCONF_History,REPLCONF_tips,replconfCommand,-1,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_ALLOW_BUSY,0},
+{"replicaof","Configures a server as replica of another, or promotes it to a master.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,REPLICAOF_History,REPLICAOF_tips,replicaofCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_STALE,0,.args=REPLICAOF_Args},
+{"restore-asking","An internal command for migrating keys in a cluster.","O(1) to create the new key and additional O(N*M) to reconstruct the serialized value, where N is the number of Redis objects composing the value and M their average size. For small string values the time complexity is thus O(1)+O(1*M) where M is small, so simply O(1). However for sorted set values the complexity is O(N*M*log(N)) because inserting values into sorted sets is O(log(N)).","3.0.0",CMD_DOC_SYSCMD,NULL,NULL,COMMAND_GROUP_SERVER,RESTORE_ASKING_History,RESTORE_ASKING_tips,restoreCommand,-4,CMD_WRITE|CMD_DENYOOM|CMD_ASKING,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=RESTORE_ASKING_Args},
+{"role","Returns the replication role.","O(1)","2.8.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,ROLE_History,ROLE_tips,roleCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_SENTINEL,ACL_CATEGORY_ADMIN|ACL_CATEGORY_DANGEROUS},
+{"save","Synchronously saves the database(s) to disk.","O(N) where N is the total number of keys in all databases","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SAVE_History,SAVE_tips,saveCommand,1,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_NO_MULTI,0},
+{"shutdown","Synchronously saves the database(s) to disk and shuts down the Redis server.","O(N) when saving, where N is the total number of keys in all databases when saving data, otherwise O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SHUTDOWN_History,SHUTDOWN_tips,shutdownCommand,-1,CMD_ADMIN|CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_NO_MULTI|CMD_SENTINEL|CMD_ALLOW_BUSY,0,.args=SHUTDOWN_Args},
+{"slaveof","Sets a Redis server as a replica of another, or promotes it to being a master.","O(1)","1.0.0",CMD_DOC_DEPRECATED,"`REPLICAOF`","5.0.0",COMMAND_GROUP_SERVER,SLAVEOF_History,SLAVEOF_tips,replicaofCommand,3,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NOSCRIPT|CMD_STALE,0,.args=SLAVEOF_Args},
+{"slowlog","A container for slow log commands.","Depends on subcommand.","2.2.12",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SLOWLOG_History,SLOWLOG_tips,NULL,-2,0,0,.subcommands=SLOWLOG_Subcommands},
+{"swapdb","Swaps two Redis databases.","O(N) where N is the count of clients watching or blocking on keys from both databases.","4.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SWAPDB_History,SWAPDB_tips,swapdbCommand,3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_KEYSPACE|ACL_CATEGORY_DANGEROUS,.args=SWAPDB_Args},
+{"sync","An internal command used in replication.",NULL,"1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,SYNC_History,SYNC_tips,syncCommand,1,CMD_NO_ASYNC_LOADING|CMD_ADMIN|CMD_NO_MULTI|CMD_NOSCRIPT,0},
+{"time","Returns the server time.","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SERVER,TIME_History,TIME_tips,timeCommand,1,CMD_LOADING|CMD_STALE|CMD_FAST,0},
/* set */
-{"sadd","Add one or more members to a set","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SADD_History,SADD_tips,saddCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SADD_Args},
-{"scard","Get the number of members in a set","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SCARD_History,SCARD_tips,scardCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SCARD_Args},
-{"sdiff","Subtract multiple sets","O(N) where N is the total number of elements in all given sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SDIFF_History,SDIFF_tips,sdiffCommand,-2,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SDIFF_Args},
-{"sdiffstore","Subtract multiple sets and store the resulting set in a key","O(N) where N is the total number of elements in all given sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SDIFFSTORE_History,SDIFFSTORE_tips,sdiffstoreCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SDIFFSTORE_Args},
-{"sinter","Intersect multiple sets","O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SINTER_History,SINTER_tips,sinterCommand,-2,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SINTER_Args},
-{"sintercard","Intersect multiple sets and return the cardinality of the result","O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SINTERCARD_History,SINTERCARD_tips,sinterCardCommand,-3,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},sintercardGetKeys,.args=SINTERCARD_Args},
-{"sinterstore","Intersect multiple sets and store the resulting set in a key","O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SINTERSTORE_History,SINTERSTORE_tips,sinterstoreCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SINTERSTORE_Args},
-{"sismember","Determine if a given value is a member of a set","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SISMEMBER_History,SISMEMBER_tips,sismemberCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SISMEMBER_Args},
-{"smembers","Get all the members in a set","O(N) where N is the set cardinality.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SMEMBERS_History,SMEMBERS_tips,sinterCommand,2,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SMEMBERS_Args},
-{"smismember","Returns the membership associated with the given elements for a set","O(N) where N is the number of elements being checked for membership","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SMISMEMBER_History,SMISMEMBER_tips,smismemberCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SMISMEMBER_Args},
-{"smove","Move a member from one set to another","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SMOVE_History,SMOVE_tips,smoveCommand,4,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SMOVE_Args},
-{"spop","Remove and return one or multiple random members from a set","Without the count argument O(1), otherwise O(N) where N is the value of the passed count.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SPOP_History,SPOP_tips,spopCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SPOP_Args},
+{"sadd","Adds one or more members to a set. Creates the key if it doesn't exist.","O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SADD_History,SADD_tips,saddCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SADD_Args},
+{"scard","Returns the number of members in a set.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SCARD_History,SCARD_tips,scardCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SCARD_Args},
+{"sdiff","Returns the difference of multiple sets.","O(N) where N is the total number of elements in all given sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SDIFF_History,SDIFF_tips,sdiffCommand,-2,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SDIFF_Args},
+{"sdiffstore","Stores the difference of multiple sets in a key.","O(N) where N is the total number of elements in all given sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SDIFFSTORE_History,SDIFFSTORE_tips,sdiffstoreCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SDIFFSTORE_Args},
+{"sinter","Returns the intersect of multiple sets.","O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SINTER_History,SINTER_tips,sinterCommand,-2,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SINTER_Args},
+{"sintercard","Returns the number of members of the intersect of multiple sets.","O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SINTERCARD_History,SINTERCARD_tips,sinterCardCommand,-3,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},sintercardGetKeys,.args=SINTERCARD_Args},
+{"sinterstore","Stores the intersect of multiple sets in a key.","O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SINTERSTORE_History,SINTERSTORE_tips,sinterstoreCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SINTERSTORE_Args},
+{"sismember","Determines whether a member belongs to a set.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SISMEMBER_History,SISMEMBER_tips,sismemberCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SISMEMBER_Args},
+{"smembers","Returns all members of a set.","O(N) where N is the set cardinality.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SMEMBERS_History,SMEMBERS_tips,sinterCommand,2,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SMEMBERS_Args},
+{"smismember","Determines whether multiple members belong to a set.","O(N) where N is the number of elements being checked for membership","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SMISMEMBER_History,SMISMEMBER_tips,smismemberCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SMISMEMBER_Args},
+{"smove","Moves a member from one set to another.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SMOVE_History,SMOVE_tips,smoveCommand,4,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SMOVE_Args},
+{"spop","Returns one or more random members from a set after removing them. Deletes the set if the last member was popped.","Without the count argument O(1), otherwise O(N) where N is the value of the passed count.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SPOP_History,SPOP_tips,spopCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SPOP_Args},
{"srandmember","Get one or multiple random members from a set","Without the count argument O(1), otherwise O(N) where N is the absolute value of the passed count.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SRANDMEMBER_History,SRANDMEMBER_tips,srandmemberCommand,-2,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SRANDMEMBER_Args},
-{"srem","Remove one or more members from a set","O(N) where N is the number of members to be removed.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SREM_History,SREM_tips,sremCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SREM_Args},
-{"sscan","Incrementally iterate Set elements","O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SSCAN_History,SSCAN_tips,sscanCommand,-3,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SSCAN_Args},
-{"sunion","Add multiple sets","O(N) where N is the total number of elements in all given sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SUNION_History,SUNION_tips,sunionCommand,-2,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SUNION_Args},
-{"sunionstore","Add multiple sets and store the resulting set in a key","O(N) where N is the total number of elements in all given sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SUNIONSTORE_History,SUNIONSTORE_tips,sunionstoreCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SUNIONSTORE_Args},
+{"srem","Removes one or more members from a set. Deletes the set if the last member was removed.","O(N) where N is the number of members to be removed.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SREM_History,SREM_tips,sremCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SREM_Args},
+{"sscan","Iterates over members of a set.","O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SSCAN_History,SSCAN_tips,sscanCommand,-3,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SSCAN_Args},
+{"sunion","Returns the union of multiple sets.","O(N) where N is the total number of elements in all given sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SUNION_History,SUNION_tips,sunionCommand,-2,CMD_READONLY,ACL_CATEGORY_SET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SUNION_Args},
+{"sunionstore","Stores the union of multiple sets in a key.","O(N) where N is the total number of elements in all given sets.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SET,SUNIONSTORE_History,SUNIONSTORE_tips,sunionstoreCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=SUNIONSTORE_Args},
/* sorted_set */
-{"bzmpop","Remove and return members with scores in a sorted set or block until one is available","O(K) + O(M*log(N)) where K is the number of provided keys, N being the number of elements in the sorted set, and M being the number of elements popped.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,BZMPOP_History,BZMPOP_tips,bzmpopCommand,-5,CMD_WRITE|CMD_BLOCKING,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},blmpopGetKeys,.args=BZMPOP_Args},
-{"bzpopmax","Remove and return the member with the highest score from one or more sorted sets, or block until one is available","O(log(N)) with N being the number of elements in the sorted set.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,BZPOPMAX_History,BZPOPMAX_tips,bzpopmaxCommand,-3,CMD_WRITE|CMD_FAST|CMD_BLOCKING,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-2,1,0}}},.args=BZPOPMAX_Args},
-{"bzpopmin","Remove and return the member with the lowest score from one or more sorted sets, or block until one is available","O(log(N)) with N being the number of elements in the sorted set.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,BZPOPMIN_History,BZPOPMIN_tips,bzpopminCommand,-3,CMD_WRITE|CMD_FAST|CMD_BLOCKING,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-2,1,0}}},.args=BZPOPMIN_Args},
-{"zadd","Add one or more members to a sorted set, or update its score if it already exists","O(log(N)) for each item added, where N is the number of elements in the sorted set.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZADD_History,ZADD_tips,zaddCommand,-4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZADD_Args},
-{"zcard","Get the number of members in a sorted set","O(1)","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZCARD_History,ZCARD_tips,zcardCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZCARD_Args},
-{"zcount","Count the members in a sorted set with scores within the given values","O(log(N)) with N being the number of elements in the sorted set.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZCOUNT_History,ZCOUNT_tips,zcountCommand,4,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZCOUNT_Args},
-{"zdiff","Subtract multiple sorted sets","O(L + (N-K)log(N)) worst case where L is the total number of elements in all the sets, N is the size of the first set, and K is the size of the result set.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZDIFF_History,ZDIFF_tips,zdiffCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffGetKeys,.args=ZDIFF_Args},
-{"zdiffstore","Subtract multiple sorted sets and store the resulting sorted set in a new key","O(L + (N-K)log(N)) worst case where L is the total number of elements in all the sets, N is the size of the first set, and K is the size of the result set.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZDIFFSTORE_History,ZDIFFSTORE_tips,zdiffstoreCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffStoreGetKeys,.args=ZDIFFSTORE_Args},
-{"zincrby","Increment the score of a member in a sorted set","O(log(N)) where N is the number of elements in the sorted set.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZINCRBY_History,ZINCRBY_tips,zincrbyCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZINCRBY_Args},
-{"zinter","Intersect multiple sorted sets","O(N*K)+O(M*log(M)) worst case with N being the smallest input sorted set, K being the number of input sorted sets and M being the number of elements in the resulting sorted set.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZINTER_History,ZINTER_tips,zinterCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffGetKeys,.args=ZINTER_Args},
-{"zintercard","Intersect multiple sorted sets and return the cardinality of the result","O(N*K) worst case with N being the smallest input sorted set, K being the number of input sorted sets.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZINTERCARD_History,ZINTERCARD_tips,zinterCardCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffGetKeys,.args=ZINTERCARD_Args},
-{"zinterstore","Intersect multiple sorted sets and store the resulting sorted set in a new key","O(N*K)+O(M*log(M)) worst case with N being the smallest input sorted set, K being the number of input sorted sets and M being the number of elements in the resulting sorted set.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZINTERSTORE_History,ZINTERSTORE_tips,zinterstoreCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffStoreGetKeys,.args=ZINTERSTORE_Args},
-{"zlexcount","Count the number of members in a sorted set between a given lexicographical range","O(log(N)) with N being the number of elements in the sorted set.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZLEXCOUNT_History,ZLEXCOUNT_tips,zlexcountCommand,4,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZLEXCOUNT_Args},
-{"zmpop","Remove and return members with scores in a sorted set","O(K) + O(M*log(N)) where K is the number of provided keys, N being the number of elements in the sorted set, and M being the number of elements popped.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZMPOP_History,ZMPOP_tips,zmpopCommand,-4,CMD_WRITE,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zmpopGetKeys,.args=ZMPOP_Args},
-{"zmscore","Get the score associated with the given members in a sorted set","O(N) where N is the number of members being requested.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZMSCORE_History,ZMSCORE_tips,zmscoreCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZMSCORE_Args},
-{"zpopmax","Remove and return members with the highest scores in a sorted set","O(log(N)*M) with N being the number of elements in the sorted set, and M being the number of elements popped.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZPOPMAX_History,ZPOPMAX_tips,zpopmaxCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZPOPMAX_Args},
-{"zpopmin","Remove and return members with the lowest scores in a sorted set","O(log(N)*M) with N being the number of elements in the sorted set, and M being the number of elements popped.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZPOPMIN_History,ZPOPMIN_tips,zpopminCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZPOPMIN_Args},
-{"zrandmember","Get one or multiple random elements from a sorted set","O(N) where N is the number of elements returned","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZRANDMEMBER_History,ZRANDMEMBER_tips,zrandmemberCommand,-2,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANDMEMBER_Args},
-{"zrange","Return a range of members in a sorted set","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZRANGE_History,ZRANGE_tips,zrangeCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANGE_Args},
-{"zrangebylex","Return a range of members in a sorted set, by lexicographical range","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).","2.8.9",CMD_DOC_DEPRECATED,"`ZRANGE` with the `BYLEX` argument","6.2.0",COMMAND_GROUP_SORTED_SET,ZRANGEBYLEX_History,ZRANGEBYLEX_tips,zrangebylexCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANGEBYLEX_Args},
-{"zrangebyscore","Return a range of members in a sorted set, by score","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).","1.0.5",CMD_DOC_DEPRECATED,"`ZRANGE` with the `BYSCORE` argument","6.2.0",COMMAND_GROUP_SORTED_SET,ZRANGEBYSCORE_History,ZRANGEBYSCORE_tips,zrangebyscoreCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANGEBYSCORE_Args},
-{"zrangestore","Store a range of members from sorted set into another key","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements stored into the destination key.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZRANGESTORE_History,ZRANGESTORE_tips,zrangestoreCommand,-5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANGESTORE_Args},
-{"zrank","Determine the index of a member in a sorted set","O(log(N))","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZRANK_History,ZRANK_tips,zrankCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANK_Args},
-{"zrem","Remove one or more members from a sorted set","O(M*log(N)) with N being the number of elements in the sorted set and M the number of elements to be removed.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREM_History,ZREM_tips,zremCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREM_Args},
-{"zremrangebylex","Remove all members in a sorted set between the given lexicographical range","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements removed by the operation.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREMRANGEBYLEX_History,ZREMRANGEBYLEX_tips,zremrangebylexCommand,4,CMD_WRITE,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREMRANGEBYLEX_Args},
-{"zremrangebyrank","Remove all members in a sorted set within the given indexes","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements removed by the operation.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREMRANGEBYRANK_History,ZREMRANGEBYRANK_tips,zremrangebyrankCommand,4,CMD_WRITE,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREMRANGEBYRANK_Args},
-{"zremrangebyscore","Remove all members in a sorted set within the given scores","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements removed by the operation.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREMRANGEBYSCORE_History,ZREMRANGEBYSCORE_tips,zremrangebyscoreCommand,4,CMD_WRITE,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREMRANGEBYSCORE_Args},
-{"zrevrange","Return a range of members in a sorted set, by index, with scores ordered from high to low","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.","1.2.0",CMD_DOC_DEPRECATED,"`ZRANGE` with the `REV` argument","6.2.0",COMMAND_GROUP_SORTED_SET,ZREVRANGE_History,ZREVRANGE_tips,zrevrangeCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREVRANGE_Args},
-{"zrevrangebylex","Return a range of members in a sorted set, by lexicographical range, ordered from higher to lower strings.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).","2.8.9",CMD_DOC_DEPRECATED,"`ZRANGE` with the `REV` and `BYLEX` arguments","6.2.0",COMMAND_GROUP_SORTED_SET,ZREVRANGEBYLEX_History,ZREVRANGEBYLEX_tips,zrevrangebylexCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREVRANGEBYLEX_Args},
-{"zrevrangebyscore","Return a range of members in a sorted set, by score, with scores ordered from high to low","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).","2.2.0",CMD_DOC_DEPRECATED,"`ZRANGE` with the `REV` and `BYSCORE` arguments","6.2.0",COMMAND_GROUP_SORTED_SET,ZREVRANGEBYSCORE_History,ZREVRANGEBYSCORE_tips,zrevrangebyscoreCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREVRANGEBYSCORE_Args},
-{"zrevrank","Determine the index of a member in a sorted set, with scores ordered from high to low","O(log(N))","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREVRANK_History,ZREVRANK_tips,zrevrankCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREVRANK_Args},
-{"zscan","Incrementally iterate sorted sets elements and associated scores","O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZSCAN_History,ZSCAN_tips,zscanCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZSCAN_Args},
-{"zscore","Get the score associated with the given member in a sorted set","O(1)","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZSCORE_History,ZSCORE_tips,zscoreCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZSCORE_Args},
-{"zunion","Add multiple sorted sets","O(N)+O(M*log(M)) with N being the sum of the sizes of the input sorted sets, and M being the number of elements in the resulting sorted set.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZUNION_History,ZUNION_tips,zunionCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffGetKeys,.args=ZUNION_Args},
-{"zunionstore","Add multiple sorted sets and store the resulting sorted set in a new key","O(N)+O(M log(M)) with N being the sum of the sizes of the input sorted sets, and M being the number of elements in the resulting sorted set.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZUNIONSTORE_History,ZUNIONSTORE_tips,zunionstoreCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffStoreGetKeys,.args=ZUNIONSTORE_Args},
+{"bzmpop","Removes and returns a member by score from one or more sorted sets. Blocks until a member is available otherwise. Deletes the sorted set if the last element was popped.","O(K) + O(M*log(N)) where K is the number of provided keys, N being the number of elements in the sorted set, and M being the number of elements popped.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,BZMPOP_History,BZMPOP_tips,bzmpopCommand,-5,CMD_WRITE|CMD_BLOCKING,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},blmpopGetKeys,.args=BZMPOP_Args},
+{"bzpopmax","Removes and returns the member with the highest score from one or more sorted sets. Blocks until a member available otherwise. Deletes the sorted set if the last element was popped.","O(log(N)) with N being the number of elements in the sorted set.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,BZPOPMAX_History,BZPOPMAX_tips,bzpopmaxCommand,-3,CMD_WRITE|CMD_FAST|CMD_BLOCKING,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-2,1,0}}},.args=BZPOPMAX_Args},
+{"bzpopmin","Removes and returns the member with the lowest score from one or more sorted sets. Blocks until a member is available otherwise. Deletes the sorted set if the last element was popped.","O(log(N)) with N being the number of elements in the sorted set.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,BZPOPMIN_History,BZPOPMIN_tips,bzpopminCommand,-3,CMD_WRITE|CMD_FAST|CMD_BLOCKING,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-2,1,0}}},.args=BZPOPMIN_Args},
+{"zadd","Adds one or more members to a sorted set, or updates their scores. Creates the key if it doesn't exist.","O(log(N)) for each item added, where N is the number of elements in the sorted set.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZADD_History,ZADD_tips,zaddCommand,-4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZADD_Args},
+{"zcard","Returns the number of members in a sorted set.","O(1)","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZCARD_History,ZCARD_tips,zcardCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZCARD_Args},
+{"zcount","Returns the count of members in a sorted set that have scores within a range.","O(log(N)) with N being the number of elements in the sorted set.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZCOUNT_History,ZCOUNT_tips,zcountCommand,4,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZCOUNT_Args},
+{"zdiff","Returns the difference between multiple sorted sets.","O(L + (N-K)log(N)) worst case where L is the total number of elements in all the sets, N is the size of the first set, and K is the size of the result set.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZDIFF_History,ZDIFF_tips,zdiffCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffGetKeys,.args=ZDIFF_Args},
+{"zdiffstore","Stores the difference of multiple sorted sets in a key.","O(L + (N-K)log(N)) worst case where L is the total number of elements in all the sets, N is the size of the first set, and K is the size of the result set.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZDIFFSTORE_History,ZDIFFSTORE_tips,zdiffstoreCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffStoreGetKeys,.args=ZDIFFSTORE_Args},
+{"zincrby","Increments the score of a member in a sorted set.","O(log(N)) where N is the number of elements in the sorted set.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZINCRBY_History,ZINCRBY_tips,zincrbyCommand,4,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZINCRBY_Args},
+{"zinter","Returns the intersect of multiple sorted sets.","O(N*K)+O(M*log(M)) worst case with N being the smallest input sorted set, K being the number of input sorted sets and M being the number of elements in the resulting sorted set.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZINTER_History,ZINTER_tips,zinterCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffGetKeys,.args=ZINTER_Args},
+{"zintercard","Returns the number of members of the intersect of multiple sorted sets.","O(N*K) worst case with N being the smallest input sorted set, K being the number of input sorted sets.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZINTERCARD_History,ZINTERCARD_tips,zinterCardCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffGetKeys,.args=ZINTERCARD_Args},
+{"zinterstore","Stores the intersect of multiple sorted sets in a key.","O(N*K)+O(M*log(M)) worst case with N being the smallest input sorted set, K being the number of input sorted sets and M being the number of elements in the resulting sorted set.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZINTERSTORE_History,ZINTERSTORE_tips,zinterstoreCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffStoreGetKeys,.args=ZINTERSTORE_Args},
+{"zlexcount","Returns the number of members in a sorted set within a lexicographical range.","O(log(N)) with N being the number of elements in the sorted set.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZLEXCOUNT_History,ZLEXCOUNT_tips,zlexcountCommand,4,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZLEXCOUNT_Args},
+{"zmpop","Returns the highest- or lowest-scoring members from one or more sorted sets after removing them. Deletes the sorted set if the last member was popped.","O(K) + O(M*log(N)) where K is the number of provided keys, N being the number of elements in the sorted set, and M being the number of elements popped.","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZMPOP_History,ZMPOP_tips,zmpopCommand,-4,CMD_WRITE,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zmpopGetKeys,.args=ZMPOP_Args},
+{"zmscore","Returns the score of one or more members in a sorted set.","O(N) where N is the number of members being requested.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZMSCORE_History,ZMSCORE_tips,zmscoreCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZMSCORE_Args},
+{"zpopmax","Returns the highest-scoring members from a sorted set after removing them. Deletes the sorted set if the last member was popped.","O(log(N)*M) with N being the number of elements in the sorted set, and M being the number of elements popped.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZPOPMAX_History,ZPOPMAX_tips,zpopmaxCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZPOPMAX_Args},
+{"zpopmin","Returns the lowest-scoring members from a sorted set after removing them. Deletes the sorted set if the last member was popped.","O(log(N)*M) with N being the number of elements in the sorted set, and M being the number of elements popped.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZPOPMIN_History,ZPOPMIN_tips,zpopminCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZPOPMIN_Args},
+{"zrandmember","Returns one or more random members from a sorted set.","O(N) where N is the number of members returned","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZRANDMEMBER_History,ZRANDMEMBER_tips,zrandmemberCommand,-2,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANDMEMBER_Args},
+{"zrange","Returns members in a sorted set within a range of indexes.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZRANGE_History,ZRANGE_tips,zrangeCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANGE_Args},
+{"zrangebylex","Returns members in a sorted set within a lexicographical range.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).","2.8.9",CMD_DOC_DEPRECATED,"`ZRANGE` with the `BYLEX` argument","6.2.0",COMMAND_GROUP_SORTED_SET,ZRANGEBYLEX_History,ZRANGEBYLEX_tips,zrangebylexCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANGEBYLEX_Args},
+{"zrangebyscore","Returns members in a sorted set within a range of scores.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).","1.0.5",CMD_DOC_DEPRECATED,"`ZRANGE` with the `BYSCORE` argument","6.2.0",COMMAND_GROUP_SORTED_SET,ZRANGEBYSCORE_History,ZRANGEBYSCORE_tips,zrangebyscoreCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANGEBYSCORE_Args},
+{"zrangestore","Stores a range of members from sorted set in a key.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements stored into the destination key.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZRANGESTORE_History,ZRANGESTORE_tips,zrangestoreCommand,-5,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANGESTORE_Args},
+{"zrank","Returns the index of a member in a sorted set ordered by ascending scores.","O(log(N))","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZRANK_History,ZRANK_tips,zrankCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZRANK_Args},
+{"zrem","Removes one or more members from a sorted set. Deletes the sorted set if all members were removed.","O(M*log(N)) with N being the number of elements in the sorted set and M the number of elements to be removed.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREM_History,ZREM_tips,zremCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREM_Args},
+{"zremrangebylex","Removes members in a sorted set within a lexicographical range. Deletes the sorted set if all members were removed.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements removed by the operation.","2.8.9",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREMRANGEBYLEX_History,ZREMRANGEBYLEX_tips,zremrangebylexCommand,4,CMD_WRITE,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREMRANGEBYLEX_Args},
+{"zremrangebyrank","Removes members in a sorted set within a range of indexes. Deletes the sorted set if all members were removed.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements removed by the operation.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREMRANGEBYRANK_History,ZREMRANGEBYRANK_tips,zremrangebyrankCommand,4,CMD_WRITE,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREMRANGEBYRANK_Args},
+{"zremrangebyscore","Removes members in a sorted set within a range of scores. Deletes the sorted set if all members were removed.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements removed by the operation.","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREMRANGEBYSCORE_History,ZREMRANGEBYSCORE_tips,zremrangebyscoreCommand,4,CMD_WRITE,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREMRANGEBYSCORE_Args},
+{"zrevrange","Returns members in a sorted set within a range of indexes in reverse order.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.","1.2.0",CMD_DOC_DEPRECATED,"`ZRANGE` with the `REV` argument","6.2.0",COMMAND_GROUP_SORTED_SET,ZREVRANGE_History,ZREVRANGE_tips,zrevrangeCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREVRANGE_Args},
+{"zrevrangebylex","Returns members in a sorted set within a lexicographical range in reverse order.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).","2.8.9",CMD_DOC_DEPRECATED,"`ZRANGE` with the `REV` and `BYLEX` arguments","6.2.0",COMMAND_GROUP_SORTED_SET,ZREVRANGEBYLEX_History,ZREVRANGEBYLEX_tips,zrevrangebylexCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREVRANGEBYLEX_Args},
+{"zrevrangebyscore","Returns members in a sorted set within a range of scores in reverse order.","O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).","2.2.0",CMD_DOC_DEPRECATED,"`ZRANGE` with the `REV` and `BYSCORE` arguments","6.2.0",COMMAND_GROUP_SORTED_SET,ZREVRANGEBYSCORE_History,ZREVRANGEBYSCORE_tips,zrevrangebyscoreCommand,-4,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREVRANGEBYSCORE_Args},
+{"zrevrank","Returns the index of a member in a sorted set ordered by descending scores.","O(log(N))","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZREVRANK_History,ZREVRANK_tips,zrevrankCommand,-3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZREVRANK_Args},
+{"zscan","Iterates over members and scores of a sorted set.","O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.","2.8.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZSCAN_History,ZSCAN_tips,zscanCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZSCAN_Args},
+{"zscore","Returns the score of a member in a sorted set.","O(1)","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZSCORE_History,ZSCORE_tips,zscoreCommand,3,CMD_READONLY|CMD_FAST,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=ZSCORE_Args},
+{"zunion","Returns the union of multiple sorted sets.","O(N)+O(M*log(M)) with N being the sum of the sizes of the input sorted sets, and M being the number of elements in the resulting sorted set.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZUNION_History,ZUNION_tips,zunionCommand,-3,CMD_READONLY,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffGetKeys,.args=ZUNION_Args},
+{"zunionstore","Stores the union of multiple sorted sets in a key.","O(N)+O(M log(M)) with N being the sum of the sizes of the input sorted sets, and M being the number of elements in the resulting sorted set.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_SORTED_SET,ZUNIONSTORE_History,ZUNIONSTORE_tips,zunionstoreCommand,-4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_SORTEDSET,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}},{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={2},KSPEC_FK_KEYNUM,.fk.keynum={0,1,1}}},zunionInterDiffStoreGetKeys,.args=ZUNIONSTORE_Args},
/* stream */
-{"xack","Marks a pending message as correctly processed, effectively removing it from the pending entries list of the consumer group. Return value of the command is the number of messages successfully acknowledged, that is, the IDs we were actually able to resolve in the PEL.","O(1) for each message ID processed.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XACK_History,XACK_tips,xackCommand,-4,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XACK_Args},
-{"xadd","Appends a new entry to a stream","O(1) when adding a new entry, O(N) when trimming where N being the number of entries evicted.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XADD_History,XADD_tips,xaddCommand,-5,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STREAM,{{"UPDATE instead of INSERT because of the optional trimming feature",CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XADD_Args},
-{"xautoclaim","Changes (or acquires) ownership of messages in a consumer group, as if the messages were delivered to the specified consumer.","O(1) if COUNT is small.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XAUTOCLAIM_History,XAUTOCLAIM_tips,xautoclaimCommand,-6,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XAUTOCLAIM_Args},
-{"xclaim","Changes (or acquires) ownership of a message in a consumer group, as if the message was delivered to the specified consumer.","O(log N) with N being the number of messages in the PEL of the consumer group.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XCLAIM_History,XCLAIM_tips,xclaimCommand,-6,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XCLAIM_Args},
-{"xdel","Removes the specified entries from the stream. Returns the number of items actually deleted, that may be different from the number of IDs passed in case certain IDs do not exist.","O(1) for each single item to delete in the stream, regardless of the stream size.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XDEL_History,XDEL_tips,xdelCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XDEL_Args},
-{"xgroup","A container for consumer groups commands","Depends on subcommand.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_History,XGROUP_tips,NULL,-2,0,0,.subcommands=XGROUP_Subcommands},
-{"xinfo","A container for stream introspection commands","Depends on subcommand.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_History,XINFO_tips,NULL,-2,0,0,.subcommands=XINFO_Subcommands},
-{"xlen","Return the number of entries in a stream","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XLEN_History,XLEN_tips,xlenCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XLEN_Args},
-{"xpending","Return information and entries from a stream consumer group pending entries list, that are messages fetched but never acknowledged.","O(N) with N being the number of elements returned, so asking for a small fixed number of entries per call is O(1). O(M), where M is the total number of entries scanned when used with the IDLE filter. When the command returns just the summary and the list of consumers is small, it runs in O(1) time; otherwise, an additional O(N) time for iterating every consumer.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XPENDING_History,XPENDING_tips,xpendingCommand,-3,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XPENDING_Args},
-{"xrange","Return a range of elements in a stream, with IDs matching the specified IDs interval","O(N) with N being the number of elements being returned. If N is constant (e.g. always asking for the first 10 elements with COUNT), you can consider it O(1).","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XRANGE_History,XRANGE_tips,xrangeCommand,-4,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XRANGE_Args},
-{"xread","Return never seen elements in multiple streams, with IDs greater than the ones reported by the caller for each stream. Can block.","For each stream mentioned: O(N) with N being the number of elements being returned, it means that XREAD-ing with a fixed COUNT is O(1). Note that when the BLOCK option is used, XADD will pay O(M) time in order to serve the M clients blocked on the stream getting new data.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XREAD_History,XREAD_tips,xreadCommand,-4,CMD_BLOCKING|CMD_READONLY|CMD_BLOCKING,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_KEYWORD,.bs.keyword={"STREAMS",1},KSPEC_FK_RANGE,.fk.range={-1,1,2}}},xreadGetKeys,.args=XREAD_Args},
-{"xreadgroup","Return new entries from a stream using a consumer group, or access the history of the pending entries for a given consumer. Can block.","For each stream mentioned: O(M) with M being the number of elements returned. If M is constant (e.g. always asking for the first 10 elements with COUNT), you can consider it O(1). On the other side when XREADGROUP blocks, XADD will pay the O(N) time in order to serve the N clients blocked on the stream getting new data.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XREADGROUP_History,XREADGROUP_tips,xreadCommand,-7,CMD_BLOCKING|CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_KEYWORD,.bs.keyword={"STREAMS",4},KSPEC_FK_RANGE,.fk.range={-1,1,2}}},xreadGetKeys,.args=XREADGROUP_Args},
-{"xrevrange","Return a range of elements in a stream, with IDs matching the specified IDs interval, in reverse order (from greater to smaller IDs) compared to XRANGE","O(N) with N being the number of elements returned. If N is constant (e.g. always asking for the first 10 elements with COUNT), you can consider it O(1).","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XREVRANGE_History,XREVRANGE_tips,xrevrangeCommand,-4,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XREVRANGE_Args},
-{"xsetid","An internal command for replicating stream values","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XSETID_History,XSETID_tips,xsetidCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XSETID_Args},
-{"xtrim","Trims the stream to (approximately if '~' is passed) a certain size","O(N), with N being the number of evicted entries. Constant times are very small however, since entries are organized in macro nodes containing multiple entries that can be released with a single deallocation.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XTRIM_History,XTRIM_tips,xtrimCommand,-4,CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XTRIM_Args},
+{"xack","Returns the number of messages that were successfully acknowledged by the consumer group member of a stream.","O(1) for each message ID processed.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XACK_History,XACK_tips,xackCommand,-4,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XACK_Args},
+{"xadd","Appends a new message to a stream. Creates the key if it doesn't exist.","O(1) when adding a new entry, O(N) when trimming where N being the number of entries evicted.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XADD_History,XADD_tips,xaddCommand,-5,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STREAM,{{"UPDATE instead of INSERT because of the optional trimming feature",CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XADD_Args},
+{"xautoclaim","Changes, or acquires, ownership of messages in a consumer group, as if the messages were delivered to as consumer group member.","O(1) if COUNT is small.","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XAUTOCLAIM_History,XAUTOCLAIM_tips,xautoclaimCommand,-6,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XAUTOCLAIM_Args},
+{"xclaim","Changes, or acquires, ownership of a message in a consumer group, as if the message was delivered a consumer group member.","O(log N) with N being the number of messages in the PEL of the consumer group.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XCLAIM_History,XCLAIM_tips,xclaimCommand,-6,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XCLAIM_Args},
+{"xdel","Returns the number of messages after removing them from a stream.","O(1) for each single item to delete in the stream, regardless of the stream size.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XDEL_History,XDEL_tips,xdelCommand,-3,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XDEL_Args},
+{"xgroup","A container for consumer groups commands.","Depends on subcommand.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XGROUP_History,XGROUP_tips,NULL,-2,0,0,.subcommands=XGROUP_Subcommands},
+{"xinfo","A container for stream introspection commands.","Depends on subcommand.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XINFO_History,XINFO_tips,NULL,-2,0,0,.subcommands=XINFO_Subcommands},
+{"xlen","Return the number of messages in a stream.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XLEN_History,XLEN_tips,xlenCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XLEN_Args},
+{"xpending","Returns the information and entries from a stream consumer group's pending entries list.","O(N) with N being the number of elements returned, so asking for a small fixed number of entries per call is O(1). O(M), where M is the total number of entries scanned when used with the IDLE filter. When the command returns just the summary and the list of consumers is small, it runs in O(1) time; otherwise, an additional O(N) time for iterating every consumer.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XPENDING_History,XPENDING_tips,xpendingCommand,-3,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XPENDING_Args},
+{"xrange","Returns the messages from a stream within a range of IDs.","O(N) with N being the number of elements being returned. If N is constant (e.g. always asking for the first 10 elements with COUNT), you can consider it O(1).","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XRANGE_History,XRANGE_tips,xrangeCommand,-4,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XRANGE_Args},
+{"xread","Returns messages from multiple streams with IDs greater than the ones requested. Blocks until a message is available otherwise.",NULL,"5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XREAD_History,XREAD_tips,xreadCommand,-4,CMD_BLOCKING|CMD_READONLY|CMD_BLOCKING,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_KEYWORD,.bs.keyword={"STREAMS",1},KSPEC_FK_RANGE,.fk.range={-1,1,2}}},xreadGetKeys,.args=XREAD_Args},
+{"xreadgroup","Returns new or historical messages from a stream for a consumer in agroup. Blocks until a message is available otherwise.","For each stream mentioned: O(M) with M being the number of elements returned. If M is constant (e.g. always asking for the first 10 elements with COUNT), you can consider it O(1). On the other side when XREADGROUP blocks, XADD will pay the O(N) time in order to serve the N clients blocked on the stream getting new data.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XREADGROUP_History,XREADGROUP_tips,xreadCommand,-7,CMD_BLOCKING|CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_KEYWORD,.bs.keyword={"STREAMS",4},KSPEC_FK_RANGE,.fk.range={-1,1,2}}},xreadGetKeys,.args=XREADGROUP_Args},
+{"xrevrange","Returns the messages from a stream within a range of IDs in reverse order.","O(N) with N being the number of elements returned. If N is constant (e.g. always asking for the first 10 elements with COUNT), you can consider it O(1).","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XREVRANGE_History,XREVRANGE_tips,xrevrangeCommand,-4,CMD_READONLY,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XREVRANGE_Args},
+{"xsetid","An internal command for replicating stream values.","O(1)","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XSETID_History,XSETID_tips,xsetidCommand,-3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XSETID_Args},
+{"xtrim","Deletes messages from the beginning of a stream.","O(N), with N being the number of evicted entries. Constant times are very small however, since entries are organized in macro nodes containing multiple entries that can be released with a single deallocation.","5.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STREAM,XTRIM_History,XTRIM_tips,xtrimCommand,-4,CMD_WRITE,ACL_CATEGORY_STREAM,{{NULL,CMD_KEY_RW|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=XTRIM_Args},
/* string */
-{"append","Append a value to a key","O(1). The amortized time complexity is O(1) assuming the appended value is small and the already present value is of any size, since the dynamic string library used by Redis will double the free space available on every reallocation.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,APPEND_History,APPEND_tips,appendCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=APPEND_Args},
-{"decr","Decrement the integer value of a key by one","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,DECR_History,DECR_tips,decrCommand,2,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=DECR_Args},
-{"decrby","Decrement the integer value of a key by the given number","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,DECRBY_History,DECRBY_tips,decrbyCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=DECRBY_Args},
-{"get","Get the value of a key","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,GET_History,GET_tips,getCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GET_Args},
-{"getdel","Get the value of a key and delete the key","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,GETDEL_History,GETDEL_tips,getdelCommand,2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETDEL_Args},
-{"getex","Get the value of a key and optionally set its expiration","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,GETEX_History,GETEX_tips,getexCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STRING,{{"RW and UPDATE because it changes the TTL",CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETEX_Args},
-{"getrange","Get a substring of the string stored at a key","O(N) where N is the length of the returned string. The complexity is ultimately determined by the returned length, but because creating a substring from an existing string is very cheap, it can be considered O(1) for small strings.","2.4.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,GETRANGE_History,GETRANGE_tips,getrangeCommand,4,CMD_READONLY,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETRANGE_Args},
-{"getset","Set the string value of a key and return its old value","O(1)","1.0.0",CMD_DOC_DEPRECATED,"`SET` with the `!GET` argument","6.2.0",COMMAND_GROUP_STRING,GETSET_History,GETSET_tips,getsetCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETSET_Args},
-{"incr","Increment the integer value of a key by one","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,INCR_History,INCR_tips,incrCommand,2,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=INCR_Args},
-{"incrby","Increment the integer value of a key by the given amount","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,INCRBY_History,INCRBY_tips,incrbyCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=INCRBY_Args},
-{"incrbyfloat","Increment the float value of a key by the given amount","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,INCRBYFLOAT_History,INCRBYFLOAT_tips,incrbyfloatCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=INCRBYFLOAT_Args},
-{"lcs","Find longest common substring","O(N*M) where N and M are the lengths of s1 and s2, respectively","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,LCS_History,LCS_tips,lcsCommand,-3,CMD_READONLY,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={1,1,0}}},.args=LCS_Args},
-{"mget","Get the values of all the given keys","O(N) where N is the number of keys to retrieve.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,MGET_History,MGET_tips,mgetCommand,-2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=MGET_Args},
-{"mset","Set multiple keys to multiple values","O(N) where N is the number of keys to set.","1.0.1",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,MSET_History,MSET_tips,msetCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,2,0}}},.args=MSET_Args},
-{"msetnx","Set multiple keys to multiple values, only if none of the keys exist","O(N) where N is the number of keys to set.","1.0.1",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,MSETNX_History,MSETNX_tips,msetnxCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,2,0}}},.args=MSETNX_Args},
-{"psetex","Set the value and expiration in milliseconds of a key","O(1)","2.6.0",CMD_DOC_DEPRECATED,"`SET` with the `PX` argument","2.6.12",COMMAND_GROUP_STRING,PSETEX_History,PSETEX_tips,psetexCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PSETEX_Args},
-{"set","Set the string value of a key","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,SET_History,SET_tips,setCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{"RW and ACCESS due to the optional `GET` argument",CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE|CMD_KEY_VARIABLE_FLAGS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},setGetKeys,.args=SET_Args},
-{"setex","Set the value and expiration of a key","O(1)","2.0.0",CMD_DOC_DEPRECATED,"`SET` with the `EX` argument","2.6.12",COMMAND_GROUP_STRING,SETEX_History,SETEX_tips,setexCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SETEX_Args},
-{"setnx","Set the value of a key, only if the key does not exist","O(1)","1.0.0",CMD_DOC_DEPRECATED,"`SET` with the `NX` argument","2.6.12",COMMAND_GROUP_STRING,SETNX_History,SETNX_tips,setnxCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SETNX_Args},
-{"setrange","Overwrite part of a string at key starting at the specified offset","O(1), not counting the time taken to copy the new string in place. Usually, this string is very small so the amortized complexity is O(1). Otherwise, complexity is O(M) with M being the length of the value argument.","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,SETRANGE_History,SETRANGE_tips,setrangeCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SETRANGE_Args},
-{"strlen","Get the length of the value stored in a key","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,STRLEN_History,STRLEN_tips,strlenCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=STRLEN_Args},
-{"substr","Get a substring of the string stored at a key","O(N) where N is the length of the returned string. The complexity is ultimately determined by the returned length, but because creating a substring from an existing string is very cheap, it can be considered O(1) for small strings.","1.0.0",CMD_DOC_DEPRECATED,"`GETRANGE`","2.0.0",COMMAND_GROUP_STRING,SUBSTR_History,SUBSTR_tips,getrangeCommand,4,CMD_READONLY,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SUBSTR_Args},
+{"append","Appends a string to the value of a key. Creates the key if it doesn't exist.","O(1). The amortized time complexity is O(1) assuming the appended value is small and the already present value is of any size, since the dynamic string library used by Redis will double the free space available on every reallocation.","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,APPEND_History,APPEND_tips,appendCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=APPEND_Args},
+{"decr","Decrements the integer value of a key by one. Uses 0 as initial value if the key doesn't exist.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,DECR_History,DECR_tips,decrCommand,2,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=DECR_Args},
+{"decrby","Decrements a number from the integer value of a key. Uses 0 as initial value if the key doesn't exist.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,DECRBY_History,DECRBY_tips,decrbyCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=DECRBY_Args},
+{"get","Returns the string value of a key.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,GET_History,GET_tips,getCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GET_Args},
+{"getdel","Returns the string value of a key after deleting the key.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,GETDEL_History,GETDEL_tips,getdelCommand,2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_DELETE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETDEL_Args},
+{"getex","Returns the string value of a key after setting its expiration time.","O(1)","6.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,GETEX_History,GETEX_tips,getexCommand,-2,CMD_WRITE|CMD_FAST,ACL_CATEGORY_STRING,{{"RW and UPDATE because it changes the TTL",CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETEX_Args},
+{"getrange","Returns a substring of the string stored at a key.","O(N) where N is the length of the returned string. The complexity is ultimately determined by the returned length, but because creating a substring from an existing string is very cheap, it can be considered O(1) for small strings.","2.4.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,GETRANGE_History,GETRANGE_tips,getrangeCommand,4,CMD_READONLY,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETRANGE_Args},
+{"getset","Returns the previous string value of a key after setting it to a new value.","O(1)","1.0.0",CMD_DOC_DEPRECATED,"`SET` with the `!GET` argument","6.2.0",COMMAND_GROUP_STRING,GETSET_History,GETSET_tips,getsetCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=GETSET_Args},
+{"incr","Increments the integer value of a key by one. Uses 0 as initial value if the key doesn't exist.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,INCR_History,INCR_tips,incrCommand,2,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=INCR_Args},
+{"incrby","Increments the integer value of a key by a number. Uses 0 as initial value if the key doesn't exist.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,INCRBY_History,INCRBY_tips,incrbyCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=INCRBY_Args},
+{"incrbyfloat","Increment the floating point value of a key by a number. Uses 0 as initial value if the key doesn't exist.","O(1)","2.6.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,INCRBYFLOAT_History,INCRBYFLOAT_tips,incrbyfloatCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=INCRBYFLOAT_Args},
+{"lcs","Finds the longest common substring.","O(N*M) where N and M are the lengths of s1 and s2, respectively","7.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,LCS_History,LCS_tips,lcsCommand,-3,CMD_READONLY,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={1,1,0}}},.args=LCS_Args},
+{"mget","Atomically returns the string values of one or more keys.","O(N) where N is the number of keys to retrieve.","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,MGET_History,MGET_tips,mgetCommand,-2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=MGET_Args},
+{"mset","Atomically creates or modifies the string values of one or more keys.","O(N) where N is the number of keys to set.","1.0.1",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,MSET_History,MSET_tips,msetCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,2,0}}},.args=MSET_Args},
+{"msetnx","Atomically modifies the string values of one or more keys only when all keys don't exist.","O(N) where N is the number of keys to set.","1.0.1",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,MSETNX_History,MSETNX_tips,msetnxCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,2,0}}},.args=MSETNX_Args},
+{"psetex","Sets both string value and expiration time in milliseconds of a key. The key is created if it doesn't exist.","O(1)","2.6.0",CMD_DOC_DEPRECATED,"`SET` with the `PX` argument","2.6.12",COMMAND_GROUP_STRING,PSETEX_History,PSETEX_tips,psetexCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=PSETEX_Args},
+{"set","Sets the string value of a key, ignoring its type. The key is created if it doesn't exist.","O(1)","1.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,SET_History,SET_tips,setCommand,-3,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{"RW and ACCESS due to the optional `GET` argument",CMD_KEY_RW|CMD_KEY_ACCESS|CMD_KEY_UPDATE|CMD_KEY_VARIABLE_FLAGS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},setGetKeys,.args=SET_Args},
+{"setex","Sets the string value and expiration time of a key. Creates the key if it doesn't exist.","O(1)","2.0.0",CMD_DOC_DEPRECATED,"`SET` with the `EX` argument","2.6.12",COMMAND_GROUP_STRING,SETEX_History,SETEX_tips,setexCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SETEX_Args},
+{"setnx","Set the string value of a key only when the key doesn't exist.","O(1)","1.0.0",CMD_DOC_DEPRECATED,"`SET` with the `NX` argument","2.6.12",COMMAND_GROUP_STRING,SETNX_History,SETNX_tips,setnxCommand,3,CMD_WRITE|CMD_DENYOOM|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_OW|CMD_KEY_INSERT,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SETNX_Args},
+{"setrange","Overwrites a part of a string value with another by an offset. Creates the key if it doesn't exist.","O(1), not counting the time taken to copy the new string in place. Usually, this string is very small so the amortized complexity is O(1). Otherwise, complexity is O(M) with M being the length of the value argument.","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,SETRANGE_History,SETRANGE_tips,setrangeCommand,4,CMD_WRITE|CMD_DENYOOM,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RW|CMD_KEY_UPDATE,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SETRANGE_Args},
+{"strlen","Returns the length of a string value.","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_STRING,STRLEN_History,STRLEN_tips,strlenCommand,2,CMD_READONLY|CMD_FAST,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=STRLEN_Args},
+{"substr","Returns a substring from a string value.","O(N) where N is the length of the returned string. The complexity is ultimately determined by the returned length, but because creating a substring from an existing string is very cheap, it can be considered O(1) for small strings.","1.0.0",CMD_DOC_DEPRECATED,"`GETRANGE`","2.0.0",COMMAND_GROUP_STRING,SUBSTR_History,SUBSTR_tips,getrangeCommand,4,CMD_READONLY,ACL_CATEGORY_STRING,{{NULL,CMD_KEY_RO|CMD_KEY_ACCESS,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={0,1,0}}},.args=SUBSTR_Args},
/* transactions */
-{"discard","Discard all commands issued after MULTI","O(N), when N is the number of queued commands","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,DISCARD_History,DISCARD_tips,discardCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_ALLOW_BUSY,ACL_CATEGORY_TRANSACTION},
-{"exec","Execute all commands issued after MULTI","Depends on commands in the transaction","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,EXEC_History,EXEC_tips,execCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SKIP_SLOWLOG,ACL_CATEGORY_TRANSACTION},
-{"multi","Mark the start of a transaction block","O(1)","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,MULTI_History,MULTI_tips,multiCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_ALLOW_BUSY,ACL_CATEGORY_TRANSACTION},
-{"unwatch","Forget about all watched keys","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,UNWATCH_History,UNWATCH_tips,unwatchCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_ALLOW_BUSY,ACL_CATEGORY_TRANSACTION},
-{"watch","Watch the given keys to determine execution of the MULTI/EXEC block","O(1) for every key.","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,WATCH_History,WATCH_tips,watchCommand,-2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_ALLOW_BUSY,ACL_CATEGORY_TRANSACTION,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=WATCH_Args},
+{"discard","Discards a transaction.","O(N), when N is the number of queued commands","2.0.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,DISCARD_History,DISCARD_tips,discardCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_ALLOW_BUSY,ACL_CATEGORY_TRANSACTION},
+{"exec","Executes all commands in a transaction.","Depends on commands in the transaction","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,EXEC_History,EXEC_tips,execCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_SKIP_SLOWLOG,ACL_CATEGORY_TRANSACTION},
+{"multi","Starts a transaction.","O(1)","1.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,MULTI_History,MULTI_tips,multiCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_ALLOW_BUSY,ACL_CATEGORY_TRANSACTION},
+{"unwatch","Forgets about watched keys of a transaction.","O(1)","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,UNWATCH_History,UNWATCH_tips,unwatchCommand,1,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_ALLOW_BUSY,ACL_CATEGORY_TRANSACTION},
+{"watch","Monitors changes to keys to determine the execution of a transaction.","O(1) for every key.","2.2.0",CMD_DOC_NONE,NULL,NULL,COMMAND_GROUP_TRANSACTIONS,WATCH_History,WATCH_tips,watchCommand,-2,CMD_NOSCRIPT|CMD_LOADING|CMD_STALE|CMD_FAST|CMD_ALLOW_BUSY,ACL_CATEGORY_TRANSACTION,{{NULL,CMD_KEY_RO,KSPEC_BS_INDEX,.bs.index={1},KSPEC_FK_RANGE,.fk.range={-1,1,0}}},.args=WATCH_Args},
{0}
};
diff --git a/src/commands/acl-cat.json b/src/commands/acl-cat.json
index 635e2b88d..dfbe4c43e 100644
--- a/src/commands/acl-cat.json
+++ b/src/commands/acl-cat.json
@@ -1,6 +1,6 @@
{
"CAT": {
- "summary": "List the ACL categories or the commands inside a category",
+ "summary": "Lists the ACL categories, or the commands inside a category.",
"complexity": "O(1) since the categories and commands are a fixed set.",
"group": "server",
"since": "6.0.0",
@@ -17,14 +17,14 @@
"anyOf": [
{
"type": "array",
- "description": "In case `categoryname` was not given, a list of existing ACL categories",
+ "description": "In case `category` was not given, a list of existing ACL categories",
"items": {
"type": "string"
}
},
{
"type": "array",
- "description": "In case `categoryname` was given, list of commands that fall under the provided ACL category",
+ "description": "In case `category` was given, list of commands that fall under the provided ACL category",
"items": {
"type": "string"
}
@@ -33,7 +33,7 @@
},
"arguments": [
{
- "name": "categoryname",
+ "name": "category",
"type": "string",
"optional": true
}
diff --git a/src/commands/acl-deluser.json b/src/commands/acl-deluser.json
index 9568d6d4b..4fc106503 100644
--- a/src/commands/acl-deluser.json
+++ b/src/commands/acl-deluser.json
@@ -1,6 +1,6 @@
{
"DELUSER": {
- "summary": "Remove the specified ACL users and the associated rules",
+ "summary": "Deletes ACL users, and terminates their connections.",
"complexity": "O(1) amortized time considering the typical user.",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-dryrun.json b/src/commands/acl-dryrun.json
index f8d009d4d..bee6a6aac 100644
--- a/src/commands/acl-dryrun.json
+++ b/src/commands/acl-dryrun.json
@@ -1,6 +1,6 @@
{
"DRYRUN": {
- "summary": "Returns whether the user can execute the given command without executing the command.",
+ "summary": "Simulates the execution of a command by a user, without executing the command.",
"complexity": "O(1).",
"group": "server",
"since": "7.0.0",
diff --git a/src/commands/acl-genpass.json b/src/commands/acl-genpass.json
index 8af04875a..86c1f8e29 100644
--- a/src/commands/acl-genpass.json
+++ b/src/commands/acl-genpass.json
@@ -1,6 +1,6 @@
{
"GENPASS": {
- "summary": "Generate a pseudorandom secure password to use for ACL users",
+ "summary": "Generates a pseudorandom, secure password that can be used to identify ACL users.",
"complexity": "O(1)",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-getuser.json b/src/commands/acl-getuser.json
index b09b6abeb..535389bc5 100644
--- a/src/commands/acl-getuser.json
+++ b/src/commands/acl-getuser.json
@@ -1,6 +1,6 @@
{
"GETUSER": {
- "summary": "Get the rules for a specific ACL user",
+ "summary": "Lists the ACL rules of a user.",
"complexity": "O(N). Where N is the number of password, command and pattern rules that the user has.",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-help.json b/src/commands/acl-help.json
index f6afea308..3c95914db 100644
--- a/src/commands/acl-help.json
+++ b/src/commands/acl-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-list.json b/src/commands/acl-list.json
index cb4de7e9f..0d75b137f 100644
--- a/src/commands/acl-list.json
+++ b/src/commands/acl-list.json
@@ -1,6 +1,6 @@
{
"LIST": {
- "summary": "List the current ACL rules in ACL config file format",
+ "summary": "Dumps the effective rules in ACL file format.",
"complexity": "O(N). Where N is the number of configured users.",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-load.json b/src/commands/acl-load.json
index b9d377c2d..d7b91ba61 100644
--- a/src/commands/acl-load.json
+++ b/src/commands/acl-load.json
@@ -1,6 +1,6 @@
{
"LOAD": {
- "summary": "Reload the ACLs from the configured ACL file",
+ "summary": "Reloads the rules from the configured ACL file.",
"complexity": "O(N). Where N is the number of configured users.",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-log.json b/src/commands/acl-log.json
index eb3a59b0e..de5f029e4 100644
--- a/src/commands/acl-log.json
+++ b/src/commands/acl-log.json
@@ -1,6 +1,6 @@
{
"LOG": {
- "summary": "List latest events denied because of ACLs in place",
+ "summary": "Lists recent security events generated due to ACL rules.",
"complexity": "O(N) with N being the number of entries shown.",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-save.json b/src/commands/acl-save.json
index 4e2942f5d..0b2af21e6 100644
--- a/src/commands/acl-save.json
+++ b/src/commands/acl-save.json
@@ -1,6 +1,6 @@
{
"SAVE": {
- "summary": "Save the current ACL rules in the configured ACL file",
+ "summary": "Saves the effective ACL rules in the configured ACL file.",
"complexity": "O(N). Where N is the number of configured users.",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-setuser.json b/src/commands/acl-setuser.json
index 875840d42..e26df464f 100644
--- a/src/commands/acl-setuser.json
+++ b/src/commands/acl-setuser.json
@@ -1,6 +1,6 @@
{
"SETUSER": {
- "summary": "Modify or create the rules for a specific ACL user",
+ "summary": "Creates and modifies an ACL user and its rules.",
"complexity": "O(N). Where N is the number of rules provided.",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-users.json b/src/commands/acl-users.json
index 13e8eba95..1a6bc7557 100644
--- a/src/commands/acl-users.json
+++ b/src/commands/acl-users.json
@@ -1,6 +1,6 @@
{
"USERS": {
- "summary": "List the username of all the configured ACL rules",
+ "summary": "Lists all ACL users.",
"complexity": "O(N). Where N is the number of configured users.",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl-whoami.json b/src/commands/acl-whoami.json
index b0477b363..2efe98c52 100644
--- a/src/commands/acl-whoami.json
+++ b/src/commands/acl-whoami.json
@@ -1,6 +1,6 @@
{
"WHOAMI": {
- "summary": "Return the name of the user associated to the current connection",
+ "summary": "Returns the authenticated username of the current connection.",
"complexity": "O(1)",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/acl.json b/src/commands/acl.json
index 3c9141abc..1474b782f 100644
--- a/src/commands/acl.json
+++ b/src/commands/acl.json
@@ -1,6 +1,6 @@
{
"ACL": {
- "summary": "A container for Access List Control commands ",
+ "summary": "A container for Access List Control commands.",
"complexity": "Depends on subcommand.",
"group": "server",
"since": "6.0.0",
diff --git a/src/commands/append.json b/src/commands/append.json
index 0af5e7bb1..d21d468ef 100644
--- a/src/commands/append.json
+++ b/src/commands/append.json
@@ -1,6 +1,6 @@
{
"APPEND": {
- "summary": "Append a value to a key",
+ "summary": "Appends a string to the value of a key. Creates the key if it doesn't exist.",
"complexity": "O(1). The amortized time complexity is O(1) assuming the appended value is small and the already present value is of any size, since the dynamic string library used by Redis will double the free space available on every reallocation.",
"group": "string",
"since": "2.0.0",
diff --git a/src/commands/asking.json b/src/commands/asking.json
index 432c84709..388679509 100644
--- a/src/commands/asking.json
+++ b/src/commands/asking.json
@@ -1,6 +1,6 @@
{
"ASKING": {
- "summary": "Sent by cluster clients after an -ASK redirect",
+ "summary": "Signals that a cluster client is following an -ASK redirect.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/auth.json b/src/commands/auth.json
index aaad29ad2..3b1ba3543 100644
--- a/src/commands/auth.json
+++ b/src/commands/auth.json
@@ -1,6 +1,6 @@
{
"AUTH": {
- "summary": "Authenticate to the server",
+ "summary": "Authenticates the connection.",
"complexity": "O(N) where N is the number of passwords defined for the user",
"group": "connection",
"since": "1.0.0",
diff --git a/src/commands/bgrewriteaof.json b/src/commands/bgrewriteaof.json
index e73351294..6267d3122 100644
--- a/src/commands/bgrewriteaof.json
+++ b/src/commands/bgrewriteaof.json
@@ -1,6 +1,6 @@
{
"BGREWRITEAOF": {
- "summary": "Asynchronously rewrite the append-only file",
+ "summary": "Asynchronously rewrites the append-only file to disk.",
"complexity": "O(1)",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/bgsave.json b/src/commands/bgsave.json
index 28aa14a02..f73d8a89b 100644
--- a/src/commands/bgsave.json
+++ b/src/commands/bgsave.json
@@ -1,6 +1,6 @@
{
"BGSAVE": {
- "summary": "Asynchronously save the dataset to disk",
+ "summary": "Asynchronously saves the database(s) to disk.",
"complexity": "O(1)",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/bitcount.json b/src/commands/bitcount.json
index 7906415b6..2d277a855 100644
--- a/src/commands/bitcount.json
+++ b/src/commands/bitcount.json
@@ -1,6 +1,6 @@
{
"BITCOUNT": {
- "summary": "Count set bits in a string",
+ "summary": "Counts the number of set bits (population counting) in a string.",
"complexity": "O(N)",
"group": "bitmap",
"since": "2.6.0",
diff --git a/src/commands/bitfield.json b/src/commands/bitfield.json
index 9f867ab55..843cea866 100644
--- a/src/commands/bitfield.json
+++ b/src/commands/bitfield.json
@@ -1,6 +1,6 @@
{
"BITFIELD": {
- "summary": "Perform arbitrary bitfield integer operations on strings",
+ "summary": "Performs arbitrary bitfield integer operations on strings.",
"complexity": "O(1) for each subcommand specified",
"group": "bitmap",
"since": "3.2.0",
diff --git a/src/commands/bitfield_ro.json b/src/commands/bitfield_ro.json
index ccf1aae23..0b5aa7147 100644
--- a/src/commands/bitfield_ro.json
+++ b/src/commands/bitfield_ro.json
@@ -1,6 +1,6 @@
{
"BITFIELD_RO": {
- "summary": "Perform arbitrary bitfield integer operations on strings. Read-only variant of BITFIELD",
+ "summary": "Performs arbitrary read-only bitfield integer operations on strings.",
"complexity": "O(1) for each subcommand specified",
"group": "bitmap",
"since": "6.0.0",
diff --git a/src/commands/bitop.json b/src/commands/bitop.json
index 7c959683e..d9e1ff9ef 100644
--- a/src/commands/bitop.json
+++ b/src/commands/bitop.json
@@ -1,6 +1,6 @@
{
"BITOP": {
- "summary": "Perform bitwise operations between strings",
+ "summary": "Performs bitwise operations on multiple strings, and stores the result.",
"complexity": "O(N)",
"group": "bitmap",
"since": "2.6.0",
diff --git a/src/commands/bitpos.json b/src/commands/bitpos.json
index 439b61246..11b0851e8 100644
--- a/src/commands/bitpos.json
+++ b/src/commands/bitpos.json
@@ -1,6 +1,6 @@
{
"BITPOS": {
- "summary": "Find first bit set or clear in a string",
+ "summary": "Finds the first set (1) or clear (0) bit in a string.",
"complexity": "O(N)",
"group": "bitmap",
"since": "2.8.7",
diff --git a/src/commands/blmove.json b/src/commands/blmove.json
index 2445ccf45..b316c5271 100644
--- a/src/commands/blmove.json
+++ b/src/commands/blmove.json
@@ -1,6 +1,6 @@
{
"BLMOVE": {
- "summary": "Pop an element from a list, push it to another list and return it; or block until one is available",
+ "summary": "Pops an element from a list, pushes it to another list and returns it. Blocks until an element is available otherwise. Deletes the list if the last element was moved.",
"complexity": "O(1)",
"group": "list",
"since": "6.2.0",
diff --git a/src/commands/blmpop.json b/src/commands/blmpop.json
index 419eb3e6f..48bfa3e89 100644
--- a/src/commands/blmpop.json
+++ b/src/commands/blmpop.json
@@ -1,6 +1,6 @@
{
"BLMPOP": {
- "summary": "Pop elements from a list, or block until one is available",
+ "summary": "Pops the first element from one of multiple lists. Blocks until an element is available otherwise. Deletes the list if the last element was popped.",
"complexity": "O(N+M) where N is the number of provided keys and M is the number of elements returned.",
"group": "list",
"since": "7.0.0",
diff --git a/src/commands/blpop.json b/src/commands/blpop.json
index 1c7f3b7b9..cf90f0aa4 100644
--- a/src/commands/blpop.json
+++ b/src/commands/blpop.json
@@ -1,6 +1,6 @@
{
"BLPOP": {
- "summary": "Remove and get the first element in a list, or block until one is available",
+ "summary": "Removes and returns the first element in a list. Blocks until an element is available otherwise. Deletes the list if the last element was popped.",
"complexity": "O(N) where N is the number of provided keys.",
"group": "list",
"since": "2.0.0",
diff --git a/src/commands/brpop.json b/src/commands/brpop.json
index 928f63967..129f74dd1 100644
--- a/src/commands/brpop.json
+++ b/src/commands/brpop.json
@@ -1,6 +1,6 @@
{
"BRPOP": {
- "summary": "Remove and get the last element in a list, or block until one is available",
+ "summary": "Removes and returns the last element in a list. Blocks until an element is available otherwise. Deletes the list if the last element was popped.",
"complexity": "O(N) where N is the number of provided keys.",
"group": "list",
"since": "2.0.0",
diff --git a/src/commands/brpoplpush.json b/src/commands/brpoplpush.json
index af8761666..dce1516e2 100644
--- a/src/commands/brpoplpush.json
+++ b/src/commands/brpoplpush.json
@@ -1,6 +1,6 @@
{
"BRPOPLPUSH": {
- "summary": "Pop an element from a list, push it to another list and return it; or block until one is available",
+ "summary": "Pops an element from a list, pushes it to another list and returns it. Block until an element is available otherwise. Deletes the list if the last element was popped.",
"complexity": "O(1)",
"group": "list",
"since": "2.2.0",
diff --git a/src/commands/bzmpop.json b/src/commands/bzmpop.json
index 30d502dc3..4ff5c110a 100644
--- a/src/commands/bzmpop.json
+++ b/src/commands/bzmpop.json
@@ -1,6 +1,6 @@
{
"BZMPOP": {
- "summary": "Remove and return members with scores in a sorted set or block until one is available",
+ "summary": "Removes and returns a member by score from one or more sorted sets. Blocks until a member is available otherwise. Deletes the sorted set if the last element was popped.",
"complexity": "O(K) + O(M*log(N)) where K is the number of provided keys, N being the number of elements in the sorted set, and M being the number of elements popped.",
"group": "sorted_set",
"since": "7.0.0",
diff --git a/src/commands/bzpopmax.json b/src/commands/bzpopmax.json
index ef0272320..70b0b70ab 100644
--- a/src/commands/bzpopmax.json
+++ b/src/commands/bzpopmax.json
@@ -1,6 +1,6 @@
{
"BZPOPMAX": {
- "summary": "Remove and return the member with the highest score from one or more sorted sets, or block until one is available",
+ "summary": "Removes and returns the member with the highest score from one or more sorted sets. Blocks until a member available otherwise. Deletes the sorted set if the last element was popped.",
"complexity": "O(log(N)) with N being the number of elements in the sorted set.",
"group": "sorted_set",
"since": "5.0.0",
diff --git a/src/commands/bzpopmin.json b/src/commands/bzpopmin.json
index c378a3da9..a2f305cd2 100644
--- a/src/commands/bzpopmin.json
+++ b/src/commands/bzpopmin.json
@@ -1,6 +1,6 @@
{
"BZPOPMIN": {
- "summary": "Remove and return the member with the lowest score from one or more sorted sets, or block until one is available",
+ "summary": "Removes and returns the member with the lowest score from one or more sorted sets. Blocks until a member is available otherwise. Deletes the sorted set if the last element was popped.",
"complexity": "O(log(N)) with N being the number of elements in the sorted set.",
"group": "sorted_set",
"since": "5.0.0",
diff --git a/src/commands/client-caching.json b/src/commands/client-caching.json
index 22172e094..2a4ae891d 100644
--- a/src/commands/client-caching.json
+++ b/src/commands/client-caching.json
@@ -1,6 +1,6 @@
{
"CACHING": {
- "summary": "Instruct the server about tracking or not keys in the next request",
+ "summary": "Instructs the server whether to track the keys in the next request.",
"complexity": "O(1)",
"group": "connection",
"since": "6.0.0",
diff --git a/src/commands/client-getname.json b/src/commands/client-getname.json
index c8cb21946..9e237af84 100644
--- a/src/commands/client-getname.json
+++ b/src/commands/client-getname.json
@@ -1,6 +1,6 @@
{
"GETNAME": {
- "summary": "Get the current connection name",
+ "summary": "Returns the name of the connection.",
"complexity": "O(1)",
"group": "connection",
"since": "2.6.9",
diff --git a/src/commands/client-getredir.json b/src/commands/client-getredir.json
index 5cbc27b87..6fdb002dc 100644
--- a/src/commands/client-getredir.json
+++ b/src/commands/client-getredir.json
@@ -1,6 +1,6 @@
{
"GETREDIR": {
- "summary": "Get tracking notifications redirection client ID if any",
+ "summary": "Returns the client ID to which the connection's tracking notifications are redirected.",
"complexity": "O(1)",
"group": "connection",
"since": "6.0.0",
diff --git a/src/commands/client-help.json b/src/commands/client-help.json
index ab18a6e6c..b49294c9e 100644
--- a/src/commands/client-help.json
+++ b/src/commands/client-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "connection",
"since": "5.0.0",
diff --git a/src/commands/client-id.json b/src/commands/client-id.json
index 771a3d057..7c2bf0820 100644
--- a/src/commands/client-id.json
+++ b/src/commands/client-id.json
@@ -1,6 +1,6 @@
{
"ID": {
- "summary": "Returns the client ID for the current connection",
+ "summary": "Returns the unique client ID of the connection.",
"complexity": "O(1)",
"group": "connection",
"since": "5.0.0",
diff --git a/src/commands/client-info.json b/src/commands/client-info.json
index 19c0a3cfd..93fa008f5 100644
--- a/src/commands/client-info.json
+++ b/src/commands/client-info.json
@@ -1,6 +1,6 @@
{
"INFO": {
- "summary": "Returns information about the current client connection.",
+ "summary": "Returns information about the connection.",
"complexity": "O(1)",
"group": "connection",
"since": "6.2.0",
diff --git a/src/commands/client-kill.json b/src/commands/client-kill.json
index 5791eea40..bd0262d4e 100644
--- a/src/commands/client-kill.json
+++ b/src/commands/client-kill.json
@@ -1,6 +1,6 @@
{
"KILL": {
- "summary": "Kill the connection of a client",
+ "summary": "Terminates open connections.",
"complexity": "O(N) where N is the number of client connections",
"group": "connection",
"since": "2.4.0",
diff --git a/src/commands/client-list.json b/src/commands/client-list.json
index 5c822e6c3..f72ffaf40 100644
--- a/src/commands/client-list.json
+++ b/src/commands/client-list.json
@@ -1,6 +1,6 @@
{
"LIST": {
- "summary": "Get the list of client connections",
+ "summary": "Lists open connections.",
"complexity": "O(N) where N is the number of client connections",
"group": "connection",
"since": "2.4.0",
diff --git a/src/commands/client-no-evict.json b/src/commands/client-no-evict.json
index 9cfb06628..9ed671840 100644
--- a/src/commands/client-no-evict.json
+++ b/src/commands/client-no-evict.json
@@ -1,6 +1,6 @@
{
"NO-EVICT": {
- "summary": "Set client eviction mode for the current connection",
+ "summary": "Sets the client eviction mode of the connection.",
"complexity": "O(1)",
"group": "connection",
"since": "7.0.0",
diff --git a/src/commands/client-no-touch.json b/src/commands/client-no-touch.json
index 03c2ad0dc..4cf7b7241 100644
--- a/src/commands/client-no-touch.json
+++ b/src/commands/client-no-touch.json
@@ -1,6 +1,6 @@
{
"NO-TOUCH": {
- "summary": "Controls whether commands sent by the client will alter the LRU/LFU of the keys they access.",
+ "summary": "Controls whether commands sent by the client affect the LRU/LFU of accessed keys.",
"complexity": "O(1)",
"group": "connection",
"since": "7.2.0",
diff --git a/src/commands/client-pause.json b/src/commands/client-pause.json
index 2be85424c..b1dd7bc47 100644
--- a/src/commands/client-pause.json
+++ b/src/commands/client-pause.json
@@ -1,6 +1,6 @@
{
"PAUSE": {
- "summary": "Stop processing commands from clients for some time",
+ "summary": "Suspends commands processing.",
"complexity": "O(1)",
"group": "connection",
"since": "3.0.0",
diff --git a/src/commands/client-reply.json b/src/commands/client-reply.json
index 51e93c81d..9406de85c 100644
--- a/src/commands/client-reply.json
+++ b/src/commands/client-reply.json
@@ -1,6 +1,6 @@
{
"REPLY": {
- "summary": "Instruct the server whether to reply to commands",
+ "summary": "Instructs the server whether to reply to commands.",
"complexity": "O(1)",
"group": "connection",
"since": "3.2.0",
diff --git a/src/commands/client-setinfo.json b/src/commands/client-setinfo.json
index 426ff4d28..e61ba5664 100644
--- a/src/commands/client-setinfo.json
+++ b/src/commands/client-setinfo.json
@@ -1,6 +1,6 @@
{
"SETINFO": {
- "summary": "Set client or connection specific info",
+ "summary": "Sets information specific to the client or connection.",
"complexity": "O(1)",
"group": "connection",
"since": "7.2.0",
diff --git a/src/commands/client-setname.json b/src/commands/client-setname.json
index c53bf1651..e8920b686 100644
--- a/src/commands/client-setname.json
+++ b/src/commands/client-setname.json
@@ -1,6 +1,6 @@
{
"SETNAME": {
- "summary": "Set the current connection name",
+ "summary": "Sets the connection name.",
"complexity": "O(1)",
"group": "connection",
"since": "2.6.9",
diff --git a/src/commands/client-tracking.json b/src/commands/client-tracking.json
index 48ed0f7ea..28e84eceb 100644
--- a/src/commands/client-tracking.json
+++ b/src/commands/client-tracking.json
@@ -1,6 +1,6 @@
{
"TRACKING": {
- "summary": "Enable or disable server assisted client side caching support",
+ "summary": "Controls server-assisted client-side caching for the connection.",
"complexity": "O(1). Some options may introduce additional complexity.",
"group": "connection",
"since": "6.0.0",
diff --git a/src/commands/client-trackinginfo.json b/src/commands/client-trackinginfo.json
index 6873c7512..270a3d5e6 100644
--- a/src/commands/client-trackinginfo.json
+++ b/src/commands/client-trackinginfo.json
@@ -1,6 +1,6 @@
{
"TRACKINGINFO": {
- "summary": "Return information about server assisted client side caching for the current connection",
+ "summary": "Returns information about server-assisted client-side caching for the connection.",
"complexity": "O(1)",
"group": "connection",
"since": "6.2.0",
diff --git a/src/commands/client-unblock.json b/src/commands/client-unblock.json
index c96b78d24..d028f4714 100644
--- a/src/commands/client-unblock.json
+++ b/src/commands/client-unblock.json
@@ -1,6 +1,6 @@
{
"UNBLOCK": {
- "summary": "Unblock a client blocked in a blocking command from a different connection",
+ "summary": "Unblocks a client blocked by a blocking command from a different connection.",
"complexity": "O(log N) where N is the number of client connections",
"group": "connection",
"since": "5.0.0",
diff --git a/src/commands/client-unpause.json b/src/commands/client-unpause.json
index 186b9cc4a..6c55210d2 100644
--- a/src/commands/client-unpause.json
+++ b/src/commands/client-unpause.json
@@ -1,6 +1,6 @@
{
"UNPAUSE": {
- "summary": "Resume processing of clients that were paused",
+ "summary": "Resumes processing commands from paused clients.",
"complexity": "O(N) Where N is the number of paused clients",
"group": "connection",
"since": "6.2.0",
diff --git a/src/commands/client.json b/src/commands/client.json
index dfe2a9bc7..b50996128 100644
--- a/src/commands/client.json
+++ b/src/commands/client.json
@@ -1,6 +1,6 @@
{
"CLIENT": {
- "summary": "A container for client connection commands",
+ "summary": "A container for client connection commands.",
"complexity": "Depends on subcommand.",
"group": "connection",
"since": "2.4.0",
diff --git a/src/commands/cluster-addslots.json b/src/commands/cluster-addslots.json
index db06e1ddb..4d2ea2593 100644
--- a/src/commands/cluster-addslots.json
+++ b/src/commands/cluster-addslots.json
@@ -1,6 +1,6 @@
{
"ADDSLOTS": {
- "summary": "Assign new hash slots to receiving node",
+ "summary": "Assigns new hash slots to a node.",
"complexity": "O(N) where N is the total number of hash slot arguments",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-addslotsrange.json b/src/commands/cluster-addslotsrange.json
index 769392bca..4ff8a4084 100644
--- a/src/commands/cluster-addslotsrange.json
+++ b/src/commands/cluster-addslotsrange.json
@@ -1,6 +1,6 @@
{
"ADDSLOTSRANGE": {
- "summary": "Assign new hash slots to receiving node",
+ "summary": "Assigns new hash slot ranges to a node.",
"complexity": "O(N) where N is the total number of the slots between the start slot and end slot arguments.",
"group": "cluster",
"since": "7.0.0",
diff --git a/src/commands/cluster-bumpepoch.json b/src/commands/cluster-bumpepoch.json
index ce4af47f3..786723c5c 100644
--- a/src/commands/cluster-bumpepoch.json
+++ b/src/commands/cluster-bumpepoch.json
@@ -1,6 +1,6 @@
{
"BUMPEPOCH": {
- "summary": "Advance the cluster config epoch",
+ "summary": "Advances the cluster config epoch.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-count-failure-reports.json b/src/commands/cluster-count-failure-reports.json
index 7964d2be6..b80632d0f 100644
--- a/src/commands/cluster-count-failure-reports.json
+++ b/src/commands/cluster-count-failure-reports.json
@@ -1,6 +1,6 @@
{
"COUNT-FAILURE-REPORTS": {
- "summary": "Return the number of failure reports active for a given node",
+ "summary": "Returns the number of active failure reports active for a node.",
"complexity": "O(N) where N is the number of failure reports",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-countkeysinslot.json b/src/commands/cluster-countkeysinslot.json
index c4e7d7d4b..caeec5132 100644
--- a/src/commands/cluster-countkeysinslot.json
+++ b/src/commands/cluster-countkeysinslot.json
@@ -1,6 +1,6 @@
{
"COUNTKEYSINSLOT": {
- "summary": "Return the number of local keys in the specified hash slot",
+ "summary": "Returns the number of keys in a hash slot.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-delslots.json b/src/commands/cluster-delslots.json
index cc96b214f..0732d2b9a 100644
--- a/src/commands/cluster-delslots.json
+++ b/src/commands/cluster-delslots.json
@@ -1,6 +1,6 @@
{
"DELSLOTS": {
- "summary": "Set hash slots as unbound in receiving node",
+ "summary": "Sets hash slots as unbound for a node.",
"complexity": "O(N) where N is the total number of hash slot arguments",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-delslotsrange.json b/src/commands/cluster-delslotsrange.json
index 2ecc81701..77f1aea82 100644
--- a/src/commands/cluster-delslotsrange.json
+++ b/src/commands/cluster-delslotsrange.json
@@ -1,6 +1,6 @@
{
"DELSLOTSRANGE": {
- "summary": "Set hash slots as unbound in receiving node",
+ "summary": "Sets hash slot ranges as unbound for a node.",
"complexity": "O(N) where N is the total number of the slots between the start slot and end slot arguments.",
"group": "cluster",
"since": "7.0.0",
diff --git a/src/commands/cluster-flushslots.json b/src/commands/cluster-flushslots.json
index 7834a4f35..09902ad7c 100644
--- a/src/commands/cluster-flushslots.json
+++ b/src/commands/cluster-flushslots.json
@@ -1,6 +1,6 @@
{
"FLUSHSLOTS": {
- "summary": "Delete a node's own slots information",
+ "summary": "Deletes all slots information from a node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-forget.json b/src/commands/cluster-forget.json
index 1c4e74aa3..6f9a25ce6 100644
--- a/src/commands/cluster-forget.json
+++ b/src/commands/cluster-forget.json
@@ -1,6 +1,6 @@
{
"FORGET": {
- "summary": "Remove a node from the nodes table",
+ "summary": "Removes a node from the nodes table.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-getkeysinslot.json b/src/commands/cluster-getkeysinslot.json
index 6aa90234e..039dfeabf 100644
--- a/src/commands/cluster-getkeysinslot.json
+++ b/src/commands/cluster-getkeysinslot.json
@@ -1,6 +1,6 @@
{
"GETKEYSINSLOT": {
- "summary": "Return local key names in the specified hash slot",
+ "summary": "Returns the key names in a hash slot.",
"complexity": "O(N) where N is the number of requested keys",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-help.json b/src/commands/cluster-help.json
index 59a8362d7..27f7d0833 100644
--- a/src/commands/cluster-help.json
+++ b/src/commands/cluster-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "cluster",
"since": "5.0.0",
diff --git a/src/commands/cluster-info.json b/src/commands/cluster-info.json
index cf8b611b4..2c88760eb 100644
--- a/src/commands/cluster-info.json
+++ b/src/commands/cluster-info.json
@@ -1,6 +1,6 @@
{
"INFO": {
- "summary": "Provides info about Redis Cluster node state",
+ "summary": "Returns information about the state of a node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-keyslot.json b/src/commands/cluster-keyslot.json
index 19f1ad65e..e51b643b9 100644
--- a/src/commands/cluster-keyslot.json
+++ b/src/commands/cluster-keyslot.json
@@ -1,6 +1,6 @@
{
"KEYSLOT": {
- "summary": "Returns the hash slot of the specified key",
+ "summary": "Returns the hash slot for a key.",
"complexity": "O(N) where N is the number of bytes in the key",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-links.json b/src/commands/cluster-links.json
index 3681c7c55..07b2e833b 100644
--- a/src/commands/cluster-links.json
+++ b/src/commands/cluster-links.json
@@ -1,6 +1,6 @@
{
"LINKS": {
- "summary": "Returns a list of all TCP links to and from peer nodes in cluster",
+ "summary": "Returns a list of all TCP links to and from peer nodes.",
"complexity": "O(N) where N is the total number of Cluster nodes",
"group": "cluster",
"since": "7.0.0",
diff --git a/src/commands/cluster-meet.json b/src/commands/cluster-meet.json
index 04d374ae2..7ca23a74b 100644
--- a/src/commands/cluster-meet.json
+++ b/src/commands/cluster-meet.json
@@ -1,6 +1,6 @@
{
"MEET": {
- "summary": "Force a node cluster to handshake with another node",
+ "summary": "Forces a node to handshake with another node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-myid.json b/src/commands/cluster-myid.json
index f2c13b581..340d425fd 100644
--- a/src/commands/cluster-myid.json
+++ b/src/commands/cluster-myid.json
@@ -1,6 +1,6 @@
{
"MYID": {
- "summary": "Return the node id",
+ "summary": "Returns the ID of a node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-myshardid.json b/src/commands/cluster-myshardid.json
index 70ac1ddc3..7db63fd19 100644
--- a/src/commands/cluster-myshardid.json
+++ b/src/commands/cluster-myshardid.json
@@ -1,6 +1,6 @@
{
"MYSHARDID": {
- "summary": "Return the node shard id",
+ "summary": "Returns the shard ID of a node.",
"complexity": "O(1)",
"group": "cluster",
"since": "7.2.0",
diff --git a/src/commands/cluster-nodes.json b/src/commands/cluster-nodes.json
index 6eb7f5385..ce34944e1 100644
--- a/src/commands/cluster-nodes.json
+++ b/src/commands/cluster-nodes.json
@@ -1,6 +1,6 @@
{
"NODES": {
- "summary": "Get Cluster config for the node",
+ "summary": "Returns the cluster configuration for a node.",
"complexity": "O(N) where N is the total number of Cluster nodes",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-replicas.json b/src/commands/cluster-replicas.json
index a7c5a4604..49a922770 100644
--- a/src/commands/cluster-replicas.json
+++ b/src/commands/cluster-replicas.json
@@ -1,6 +1,6 @@
{
"REPLICAS": {
- "summary": "List replica nodes of the specified master node",
+ "summary": "Lists the replica nodes of a master node.",
"complexity": "O(1)",
"group": "cluster",
"since": "5.0.0",
diff --git a/src/commands/cluster-replicate.json b/src/commands/cluster-replicate.json
index d49be4fb2..060d4af19 100644
--- a/src/commands/cluster-replicate.json
+++ b/src/commands/cluster-replicate.json
@@ -1,6 +1,6 @@
{
"REPLICATE": {
- "summary": "Reconfigure a node as a replica of the specified master node",
+ "summary": "Configure a node as replica of a master node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-reset.json b/src/commands/cluster-reset.json
index cd49900c5..6bd4fe659 100644
--- a/src/commands/cluster-reset.json
+++ b/src/commands/cluster-reset.json
@@ -1,6 +1,6 @@
{
"RESET": {
- "summary": "Reset a Redis Cluster node",
+ "summary": "Resets a node.",
"complexity": "O(N) where N is the number of known nodes. The command may execute a FLUSHALL as a side effect.",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-saveconfig.json b/src/commands/cluster-saveconfig.json
index 09b73db5f..d004509ab 100644
--- a/src/commands/cluster-saveconfig.json
+++ b/src/commands/cluster-saveconfig.json
@@ -1,6 +1,6 @@
{
"SAVECONFIG": {
- "summary": "Forces the node to save cluster state on disk",
+ "summary": "Forces a node to save the cluster configuration to disk.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-set-config-epoch.json b/src/commands/cluster-set-config-epoch.json
index c92cc62a7..70c7de454 100644
--- a/src/commands/cluster-set-config-epoch.json
+++ b/src/commands/cluster-set-config-epoch.json
@@ -1,6 +1,6 @@
{
"SET-CONFIG-EPOCH": {
- "summary": "Set the configuration epoch in a new node",
+ "summary": "Sets the configuration epoch for a new node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-setslot.json b/src/commands/cluster-setslot.json
index 9ddff8136..d0d48193d 100644
--- a/src/commands/cluster-setslot.json
+++ b/src/commands/cluster-setslot.json
@@ -1,6 +1,6 @@
{
"SETSLOT": {
- "summary": "Bind a hash slot to a specific node",
+ "summary": "Binds a hash slot to a node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-shards.json b/src/commands/cluster-shards.json
index ac45d70eb..cfc7250b0 100644
--- a/src/commands/cluster-shards.json
+++ b/src/commands/cluster-shards.json
@@ -1,6 +1,6 @@
{
"SHARDS": {
- "summary": "Get array of cluster slots to node mappings",
+ "summary": "Returns the mapping of cluster slots to shards.",
"complexity": "O(N) where N is the total number of cluster nodes",
"group": "cluster",
"since": "7.0.0",
diff --git a/src/commands/cluster-slaves.json b/src/commands/cluster-slaves.json
index e7a0eb3be..a2e6755a0 100644
--- a/src/commands/cluster-slaves.json
+++ b/src/commands/cluster-slaves.json
@@ -1,6 +1,6 @@
{
"SLAVES": {
- "summary": "List replica nodes of the specified master node",
+ "summary": "Lists the replica nodes of a master node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster-slots.json b/src/commands/cluster-slots.json
index 3f76af518..fc98ba79a 100644
--- a/src/commands/cluster-slots.json
+++ b/src/commands/cluster-slots.json
@@ -1,6 +1,6 @@
{
"SLOTS": {
- "summary": "Get array of Cluster slot to node mappings",
+ "summary": "Returns the mapping of cluster slots to nodes.",
"complexity": "O(N) where N is the total number of Cluster nodes",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/cluster.json b/src/commands/cluster.json
index 732a82954..e74404d8e 100644
--- a/src/commands/cluster.json
+++ b/src/commands/cluster.json
@@ -1,6 +1,6 @@
{
"CLUSTER": {
- "summary": "A container for cluster commands",
+ "summary": "A container for Redis Cluster commands.",
"complexity": "Depends on subcommand.",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/command-count.json b/src/commands/command-count.json
index ecc29e4af..7306767b6 100644
--- a/src/commands/command-count.json
+++ b/src/commands/command-count.json
@@ -1,6 +1,6 @@
{
"COUNT": {
- "summary": "Get total number of Redis commands",
+ "summary": "Returns a count of commands.",
"complexity": "O(1)",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/command-docs.json b/src/commands/command-docs.json
index 73ac9fd3e..27e2acf91 100644
--- a/src/commands/command-docs.json
+++ b/src/commands/command-docs.json
@@ -1,6 +1,6 @@
{
"DOCS": {
- "summary": "Get array of specific Redis command documentation",
+ "summary": "Returns documentary information about a command.",
"complexity": "O(N) where N is the number of commands to look up",
"group": "server",
"since": "7.0.0",
diff --git a/src/commands/command-getkeys.json b/src/commands/command-getkeys.json
index 92c95252d..88103c5e6 100644
--- a/src/commands/command-getkeys.json
+++ b/src/commands/command-getkeys.json
@@ -1,6 +1,6 @@
{
"GETKEYS": {
- "summary": "Extract keys given a full Redis command",
+ "summary": "Extracts the key names from an arbitrary command.",
"complexity": "O(N) where N is the number of arguments to the command",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/command-getkeysandflags.json b/src/commands/command-getkeysandflags.json
index 05668a241..a069f5e60 100644
--- a/src/commands/command-getkeysandflags.json
+++ b/src/commands/command-getkeysandflags.json
@@ -1,6 +1,6 @@
{
"GETKEYSANDFLAGS": {
- "summary": "Extract keys and access flags given a full Redis command",
+ "summary": "Extracts the key names and access flags for an arbitrary command.",
"complexity": "O(N) where N is the number of arguments to the command",
"group": "server",
"since": "7.0.0",
diff --git a/src/commands/command-help.json b/src/commands/command-help.json
index 22d31563a..5735f01d4 100644
--- a/src/commands/command-help.json
+++ b/src/commands/command-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "server",
"since": "5.0.0",
diff --git a/src/commands/command-info.json b/src/commands/command-info.json
index 84e36dfaf..8c6906095 100644
--- a/src/commands/command-info.json
+++ b/src/commands/command-info.json
@@ -1,6 +1,6 @@
{
"INFO": {
- "summary": "Get array of specific Redis command details, or all when no argument is given.",
+ "summary": "Returns information about one, multiple or all commands.",
"complexity": "O(N) where N is the number of commands to look up",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/command-list.json b/src/commands/command-list.json
index 5d6be8071..b85a9a5d7 100644
--- a/src/commands/command-list.json
+++ b/src/commands/command-list.json
@@ -1,6 +1,6 @@
{
"LIST": {
- "summary": "Get an array of Redis command names",
+ "summary": "Returns a list of command names.",
"complexity": "O(N) where N is the total number of Redis commands",
"group": "server",
"since": "7.0.0",
diff --git a/src/commands/command.json b/src/commands/command.json
index 0bed04040..9d15be244 100644
--- a/src/commands/command.json
+++ b/src/commands/command.json
@@ -1,6 +1,6 @@
{
"COMMAND": {
- "summary": "Get array of Redis command details",
+ "summary": "Returns detailed information about all commands.",
"complexity": "O(N) where N is the total number of Redis commands",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/config-get.json b/src/commands/config-get.json
index e21c64b78..53f2d8545 100644
--- a/src/commands/config-get.json
+++ b/src/commands/config-get.json
@@ -1,6 +1,6 @@
{
"GET": {
- "summary": "Get the values of configuration parameters",
+ "summary": "Returns the effective values of configuration parameters.",
"complexity": "O(N) when N is the number of configuration parameters provided",
"group": "server",
"since": "2.0.0",
diff --git a/src/commands/config-help.json b/src/commands/config-help.json
index cd90bbb59..da3e9c418 100644
--- a/src/commands/config-help.json
+++ b/src/commands/config-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "server",
"since": "5.0.0",
diff --git a/src/commands/config-resetstat.json b/src/commands/config-resetstat.json
index 353d46bd2..87a08972a 100644
--- a/src/commands/config-resetstat.json
+++ b/src/commands/config-resetstat.json
@@ -1,6 +1,6 @@
{
"RESETSTAT": {
- "summary": "Reset the stats returned by INFO",
+ "summary": "Resets the server's statistics.",
"complexity": "O(1)",
"group": "server",
"since": "2.0.0",
diff --git a/src/commands/config-rewrite.json b/src/commands/config-rewrite.json
index 3e37bf49a..490e2f8e8 100644
--- a/src/commands/config-rewrite.json
+++ b/src/commands/config-rewrite.json
@@ -1,6 +1,6 @@
{
"REWRITE": {
- "summary": "Rewrite the configuration file with the in memory configuration",
+ "summary": "Persists the effective configuration to file.",
"complexity": "O(1)",
"group": "server",
"since": "2.8.0",
diff --git a/src/commands/config-set.json b/src/commands/config-set.json
index 6e95fe0ef..83f246111 100644
--- a/src/commands/config-set.json
+++ b/src/commands/config-set.json
@@ -1,6 +1,6 @@
{
"SET": {
- "summary": "Set configuration parameters to the given values",
+ "summary": "Sets configuration parameters in-flight.",
"complexity": "O(N) when N is the number of configuration parameters provided",
"group": "server",
"since": "2.0.0",
diff --git a/src/commands/config.json b/src/commands/config.json
index a12271dcc..1c4457a54 100644
--- a/src/commands/config.json
+++ b/src/commands/config.json
@@ -1,6 +1,6 @@
{
"CONFIG": {
- "summary": "A container for server configuration commands",
+ "summary": "A container for server configuration commands.",
"complexity": "Depends on subcommand.",
"group": "server",
"since": "2.0.0",
diff --git a/src/commands/copy.json b/src/commands/copy.json
index 450b7397a..b30ddaeae 100644
--- a/src/commands/copy.json
+++ b/src/commands/copy.json
@@ -1,6 +1,6 @@
{
"COPY": {
- "summary": "Copy a key",
+ "summary": "Copies the value of a key to a new key.",
"complexity": "O(N) worst case for collections, where N is the number of nested items. O(1) for string values.",
"group": "generic",
"since": "6.2.0",
diff --git a/src/commands/dbsize.json b/src/commands/dbsize.json
index 989e37d9f..249df419a 100644
--- a/src/commands/dbsize.json
+++ b/src/commands/dbsize.json
@@ -1,6 +1,6 @@
{
"DBSIZE": {
- "summary": "Return the number of keys in the selected database",
+ "summary": "Returns the number of keys in the database.",
"complexity": "O(1)",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/debug.json b/src/commands/debug.json
index 092d2e9ab..1646d7b92 100644
--- a/src/commands/debug.json
+++ b/src/commands/debug.json
@@ -1,6 +1,6 @@
{
"DEBUG": {
- "summary": "A container for debugging commands",
+ "summary": "A container for debugging commands.",
"complexity": "Depends on subcommand.",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/decr.json b/src/commands/decr.json
index 1bae4e098..0841928a5 100644
--- a/src/commands/decr.json
+++ b/src/commands/decr.json
@@ -1,6 +1,6 @@
{
"DECR": {
- "summary": "Decrement the integer value of a key by one",
+ "summary": "Decrements the integer value of a key by one. Uses 0 as initial value if the key doesn't exist.",
"complexity": "O(1)",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/decrby.json b/src/commands/decrby.json
index de5724c3a..3db98791a 100644
--- a/src/commands/decrby.json
+++ b/src/commands/decrby.json
@@ -1,6 +1,6 @@
{
"DECRBY": {
- "summary": "Decrement the integer value of a key by the given number",
+ "summary": "Decrements a number from the integer value of a key. Uses 0 as initial value if the key doesn't exist.",
"complexity": "O(1)",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/del.json b/src/commands/del.json
index 6d2ff7209..2727b536c 100644
--- a/src/commands/del.json
+++ b/src/commands/del.json
@@ -1,6 +1,6 @@
{
"DEL": {
- "summary": "Delete a key",
+ "summary": "Deletes one or more keys.",
"complexity": "O(N) where N is the number of keys that will be removed. When a key to remove holds a value other than a string, the individual complexity for this key is O(M) where M is the number of elements in the list, set, sorted set or hash. Removing a single key that holds a string value is O(1).",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/discard.json b/src/commands/discard.json
index 6ef0dd809..ffd37f05e 100644
--- a/src/commands/discard.json
+++ b/src/commands/discard.json
@@ -1,6 +1,6 @@
{
"DISCARD": {
- "summary": "Discard all commands issued after MULTI",
+ "summary": "Discards a transaction.",
"complexity": "O(N), when N is the number of queued commands",
"group": "transactions",
"since": "2.0.0",
diff --git a/src/commands/dump.json b/src/commands/dump.json
index c0f0aa0ea..9e772edd1 100644
--- a/src/commands/dump.json
+++ b/src/commands/dump.json
@@ -1,6 +1,6 @@
{
"DUMP": {
- "summary": "Return a serialized version of the value stored at the specified key.",
+ "summary": "Returns a serialized representation of the value stored at a key.",
"complexity": "O(1) to access the key and additional O(N*M) to serialize it, where N is the number of Redis objects composing the value and M their average size. For small string values the time complexity is thus O(1)+O(1*M) where M is small, so simply O(1).",
"group": "generic",
"since": "2.6.0",
diff --git a/src/commands/echo.json b/src/commands/echo.json
index abb3d26f3..df8719825 100644
--- a/src/commands/echo.json
+++ b/src/commands/echo.json
@@ -1,6 +1,6 @@
{
"ECHO": {
- "summary": "Echo the given string",
+ "summary": "Returns the given string.",
"complexity": "O(1)",
"group": "connection",
"since": "1.0.0",
diff --git a/src/commands/eval.json b/src/commands/eval.json
index 4f25b2fe3..05e1cb5bf 100644
--- a/src/commands/eval.json
+++ b/src/commands/eval.json
@@ -1,6 +1,6 @@
{
"EVAL": {
- "summary": "Execute a Lua script server side",
+ "summary": "Executes a server-side Lua script.",
"complexity": "Depends on the script that is executed.",
"group": "scripting",
"since": "2.6.0",
diff --git a/src/commands/eval_ro.json b/src/commands/eval_ro.json
index f9aa54942..1440998ae 100644
--- a/src/commands/eval_ro.json
+++ b/src/commands/eval_ro.json
@@ -1,6 +1,6 @@
{
"EVAL_RO": {
- "summary": "Execute a read-only Lua script server side",
+ "summary": "Executes a read-only server-side Lua script.",
"complexity": "Depends on the script that is executed.",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/evalsha.json b/src/commands/evalsha.json
index 66e4379c6..c7d0aa79b 100644
--- a/src/commands/evalsha.json
+++ b/src/commands/evalsha.json
@@ -1,6 +1,6 @@
{
"EVALSHA": {
- "summary": "Execute a Lua script server side",
+ "summary": "Executes a server-side Lua script by SHA1 digest.",
"complexity": "Depends on the script that is executed.",
"group": "scripting",
"since": "2.6.0",
diff --git a/src/commands/evalsha_ro.json b/src/commands/evalsha_ro.json
index 8dca0964b..51e4dabf9 100644
--- a/src/commands/evalsha_ro.json
+++ b/src/commands/evalsha_ro.json
@@ -1,6 +1,6 @@
{
"EVALSHA_RO": {
- "summary": "Execute a read-only Lua script server side",
+ "summary": "Executes a read-only server-side Lua script by SHA1 digest.",
"complexity": "Depends on the script that is executed.",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/exec.json b/src/commands/exec.json
index b5ec6f0ab..5f03d76e0 100644
--- a/src/commands/exec.json
+++ b/src/commands/exec.json
@@ -1,6 +1,6 @@
{
"EXEC": {
- "summary": "Execute all commands issued after MULTI",
+ "summary": "Executes all commands in a transaction.",
"complexity": "Depends on commands in the transaction",
"group": "transactions",
"since": "1.2.0",
diff --git a/src/commands/exists.json b/src/commands/exists.json
index e8793cf2b..8b108bca2 100644
--- a/src/commands/exists.json
+++ b/src/commands/exists.json
@@ -1,6 +1,6 @@
{
"EXISTS": {
- "summary": "Determine if a key exists",
+ "summary": "Determines whether one or more keys exist.",
"complexity": "O(N) where N is the number of keys to check.",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/expire.json b/src/commands/expire.json
index f0236f1d5..bf80939e9 100644
--- a/src/commands/expire.json
+++ b/src/commands/expire.json
@@ -1,6 +1,6 @@
{
"EXPIRE": {
- "summary": "Set a key's time to live in seconds",
+ "summary": "Sets the expiration time of a key in seconds.",
"complexity": "O(1)",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/expireat.json b/src/commands/expireat.json
index a6e22754b..c2ba5d8c3 100644
--- a/src/commands/expireat.json
+++ b/src/commands/expireat.json
@@ -1,6 +1,6 @@
{
"EXPIREAT": {
- "summary": "Set the expiration for a key as a UNIX timestamp",
+ "summary": "Sets the expiration time of a key to a Unix timestamp.",
"complexity": "O(1)",
"group": "generic",
"since": "1.2.0",
diff --git a/src/commands/expiretime.json b/src/commands/expiretime.json
index 90d8525ad..99da9d26c 100644
--- a/src/commands/expiretime.json
+++ b/src/commands/expiretime.json
@@ -1,6 +1,6 @@
{
"EXPIRETIME": {
- "summary": "Get the expiration Unix timestamp for a key",
+ "summary": "Returns the expiration time of a key as a Unix timestamp.",
"complexity": "O(1)",
"group": "generic",
"since": "7.0.0",
diff --git a/src/commands/failover.json b/src/commands/failover.json
index d208bfcf1..c6948629a 100644
--- a/src/commands/failover.json
+++ b/src/commands/failover.json
@@ -1,6 +1,6 @@
{
"FAILOVER": {
- "summary": "Start a coordinated failover between this server and one of its replicas.",
+ "summary": "Starts a coordinated failover from a server to one of its replicas.",
"complexity": "O(1)",
"group": "server",
"since": "6.2.0",
diff --git a/src/commands/fcall.json b/src/commands/fcall.json
index 5817ed7c9..7d6be691a 100644
--- a/src/commands/fcall.json
+++ b/src/commands/fcall.json
@@ -1,6 +1,6 @@
{
"FCALL": {
- "summary": "Invoke a function",
+ "summary": "Invokes a function.",
"complexity": "Depends on the function that is executed.",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/fcall_ro.json b/src/commands/fcall_ro.json
index def485ffa..d0e4c7619 100644
--- a/src/commands/fcall_ro.json
+++ b/src/commands/fcall_ro.json
@@ -1,6 +1,6 @@
{
"FCALL_RO": {
- "summary": "Invoke a read-only function",
+ "summary": "Invokes a read-only function.",
"complexity": "Depends on the function that is executed.",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/flushall.json b/src/commands/flushall.json
index dc5c7ca39..304bd03f9 100644
--- a/src/commands/flushall.json
+++ b/src/commands/flushall.json
@@ -1,6 +1,6 @@
{
"FLUSHALL": {
- "summary": "Remove all keys from all databases",
+ "summary": "Removes all keys from all databases.",
"complexity": "O(N) where N is the total number of keys in all databases",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/flushdb.json b/src/commands/flushdb.json
index 1590221eb..f1d10b8ad 100644
--- a/src/commands/flushdb.json
+++ b/src/commands/flushdb.json
@@ -1,6 +1,6 @@
{
"FLUSHDB": {
- "summary": "Remove all keys from the current database",
+ "summary": "Remove all keys from the current database.",
"complexity": "O(N) where N is the number of keys in the selected database",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/function-delete.json b/src/commands/function-delete.json
index c56a0fbe6..0895457c0 100644
--- a/src/commands/function-delete.json
+++ b/src/commands/function-delete.json
@@ -1,6 +1,6 @@
{
"DELETE": {
- "summary": "Delete a function by name",
+ "summary": "Deletes a library and its functions.",
"complexity": "O(1)",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/function-dump.json b/src/commands/function-dump.json
index b535b28ad..d117241de 100644
--- a/src/commands/function-dump.json
+++ b/src/commands/function-dump.json
@@ -1,6 +1,6 @@
{
"DUMP": {
- "summary": "Dump all functions into a serialized binary payload",
+ "summary": "Dumps all libraries into a serialized binary payload.",
"complexity": "O(N) where N is the number of functions",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/function-flush.json b/src/commands/function-flush.json
index 538074878..58742a0af 100644
--- a/src/commands/function-flush.json
+++ b/src/commands/function-flush.json
@@ -1,6 +1,6 @@
{
"FLUSH": {
- "summary": "Deleting all functions",
+ "summary": "Deletes all libraries and functions.",
"complexity": "O(N) where N is the number of functions deleted",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/function-help.json b/src/commands/function-help.json
index 37a3826df..662e7e6f3 100644
--- a/src/commands/function-help.json
+++ b/src/commands/function-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/function-kill.json b/src/commands/function-kill.json
index 2f9ae833e..396370c38 100644
--- a/src/commands/function-kill.json
+++ b/src/commands/function-kill.json
@@ -1,6 +1,6 @@
{
"KILL": {
- "summary": "Kill the function currently in execution.",
+ "summary": "Terminates a function during execution.",
"complexity": "O(1)",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/function-list.json b/src/commands/function-list.json
index 89c5162e7..2ab1cf510 100644
--- a/src/commands/function-list.json
+++ b/src/commands/function-list.json
@@ -1,6 +1,6 @@
{
"LIST": {
- "summary": "List information about all the functions",
+ "summary": "Returns information about all libraries.",
"complexity": "O(N) where N is the number of functions",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/function-load.json b/src/commands/function-load.json
index 28f5b2084..f918b6599 100644
--- a/src/commands/function-load.json
+++ b/src/commands/function-load.json
@@ -1,6 +1,6 @@
{
"LOAD": {
- "summary": "Create a function with the given arguments (name, code, description)",
+ "summary": "Creates a library.",
"complexity": "O(1) (considering compilation time is redundant)",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/function-restore.json b/src/commands/function-restore.json
index 900602577..0c37004b8 100644
--- a/src/commands/function-restore.json
+++ b/src/commands/function-restore.json
@@ -1,6 +1,6 @@
{
"RESTORE": {
- "summary": "Restore all the functions on the given payload",
+ "summary": "Restores all libraries from a payload.",
"complexity": "O(N) where N is the number of functions on the payload",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/function-stats.json b/src/commands/function-stats.json
index 8a64b9246..65519db1c 100644
--- a/src/commands/function-stats.json
+++ b/src/commands/function-stats.json
@@ -1,6 +1,6 @@
{
"STATS": {
- "summary": "Return information about the function currently running (name, description, duration)",
+ "summary": "Returns information about a function during execution.",
"complexity": "O(1)",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/function.json b/src/commands/function.json
index 3d33345cf..c474137a6 100644
--- a/src/commands/function.json
+++ b/src/commands/function.json
@@ -1,6 +1,6 @@
{
"FUNCTION": {
- "summary": "A container for function commands",
+ "summary": "A container for function commands.",
"complexity": "Depends on subcommand.",
"group": "scripting",
"since": "7.0.0",
diff --git a/src/commands/geoadd.json b/src/commands/geoadd.json
index bd9c40ebc..5409bfcdb 100644
--- a/src/commands/geoadd.json
+++ b/src/commands/geoadd.json
@@ -1,6 +1,6 @@
{
"GEOADD": {
- "summary": "Add one or more geospatial items in the geospatial index represented using a sorted set",
+ "summary": "Adds one or more members to a geospatial index. The key is created if it doesn't exist.",
"complexity": "O(log(N)) for each item added, where N is the number of elements in the sorted set.",
"group": "geo",
"since": "3.2.0",
diff --git a/src/commands/geodist.json b/src/commands/geodist.json
index 61f281a1b..97969d332 100644
--- a/src/commands/geodist.json
+++ b/src/commands/geodist.json
@@ -1,6 +1,6 @@
{
"GEODIST": {
- "summary": "Returns the distance between two members of a geospatial index",
+ "summary": "Returns the distance between two members of a geospatial index.",
"complexity": "O(log(N))",
"group": "geo",
"since": "3.2.0",
diff --git a/src/commands/geohash.json b/src/commands/geohash.json
index 0db62f315..8f4d55a62 100644
--- a/src/commands/geohash.json
+++ b/src/commands/geohash.json
@@ -1,6 +1,6 @@
{
"GEOHASH": {
- "summary": "Returns members of a geospatial index as standard geohash strings",
+ "summary": "Returns members from a geospatial index as geohash strings.",
"complexity": "O(log(N)) for each member requested, where N is the number of elements in the sorted set.",
"group": "geo",
"since": "3.2.0",
diff --git a/src/commands/geopos.json b/src/commands/geopos.json
index 64635fa7f..5473c1b76 100644
--- a/src/commands/geopos.json
+++ b/src/commands/geopos.json
@@ -1,6 +1,6 @@
{
"GEOPOS": {
- "summary": "Returns longitude and latitude of members of a geospatial index",
+ "summary": "Returns the longitude and latitude of members from a geospatial index.",
"complexity": "O(N) where N is the number of members requested.",
"group": "geo",
"since": "3.2.0",
diff --git a/src/commands/georadius.json b/src/commands/georadius.json
index 3c475784b..0eb919407 100644
--- a/src/commands/georadius.json
+++ b/src/commands/georadius.json
@@ -1,6 +1,6 @@
{
"GEORADIUS": {
- "summary": "Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point",
+ "summary": "Queries a geospatial index for members within a distance from a coordinate, optionally stores the result.",
"complexity": "O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.",
"group": "geo",
"since": "3.2.0",
diff --git a/src/commands/georadius_ro.json b/src/commands/georadius_ro.json
index 5b0b2a5e0..964246a20 100644
--- a/src/commands/georadius_ro.json
+++ b/src/commands/georadius_ro.json
@@ -1,6 +1,6 @@
{
"GEORADIUS_RO": {
- "summary": "A read-only variant for GEORADIUS",
+ "summary": "Returns members from a geospatial index that are within a distance from a coordinate.",
"complexity": "O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.",
"group": "geo",
"since": "3.2.10",
diff --git a/src/commands/georadiusbymember.json b/src/commands/georadiusbymember.json
index f2db041d1..0a8b27119 100644
--- a/src/commands/georadiusbymember.json
+++ b/src/commands/georadiusbymember.json
@@ -1,6 +1,6 @@
{
"GEORADIUSBYMEMBER": {
- "summary": "Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member",
+ "summary": "Queries a geospatial index for members within a distance from a member, optionally stores the result.",
"complexity": "O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.",
"group": "geo",
"since": "3.2.0",
diff --git a/src/commands/georadiusbymember_ro.json b/src/commands/georadiusbymember_ro.json
index fa35d529b..592588191 100644
--- a/src/commands/georadiusbymember_ro.json
+++ b/src/commands/georadiusbymember_ro.json
@@ -1,6 +1,6 @@
{
"GEORADIUSBYMEMBER_RO": {
- "summary": "A read-only variant for GEORADIUSBYMEMBER",
+ "summary": "Returns members from a geospatial index that are within a distance from a member.",
"complexity": "O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.",
"group": "geo",
"since": "3.2.10",
diff --git a/src/commands/geosearch.json b/src/commands/geosearch.json
index 88c6bf287..b2e2825d9 100644
--- a/src/commands/geosearch.json
+++ b/src/commands/geosearch.json
@@ -1,6 +1,6 @@
{
"GEOSEARCH": {
- "summary": "Query a sorted set representing a geospatial index to fetch members inside an area of a box or a circle.",
+ "summary": "Queries a geospatial index for members inside an area of a box or a circle.",
"complexity": "O(N+log(M)) where N is the number of elements in the grid-aligned bounding box area around the shape provided as the filter and M is the number of items inside the shape",
"group": "geo",
"since": "6.2.0",
diff --git a/src/commands/geosearchstore.json b/src/commands/geosearchstore.json
index abb7ba152..dfbdaaaec 100644
--- a/src/commands/geosearchstore.json
+++ b/src/commands/geosearchstore.json
@@ -1,6 +1,6 @@
{
"GEOSEARCHSTORE": {
- "summary": "Query a sorted set representing a geospatial index to fetch members inside an area of a box or a circle, and store the result in another key.",
+ "summary": "Queries a geospatial index for members inside an area of a box or a circle, optionally stores the result.",
"complexity": "O(N+log(M)) where N is the number of elements in the grid-aligned bounding box area around the shape provided as the filter and M is the number of items inside the shape",
"group": "geo",
"since": "6.2.0",
diff --git a/src/commands/get.json b/src/commands/get.json
index 0de9b164c..693c1ac82 100644
--- a/src/commands/get.json
+++ b/src/commands/get.json
@@ -1,6 +1,6 @@
{
"GET": {
- "summary": "Get the value of a key",
+ "summary": "Returns the string value of a key.",
"complexity": "O(1)",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/getbit.json b/src/commands/getbit.json
index 773445f63..629f5dbdd 100644
--- a/src/commands/getbit.json
+++ b/src/commands/getbit.json
@@ -1,6 +1,6 @@
{
"GETBIT": {
- "summary": "Returns the bit value at offset in the string value stored at key",
+ "summary": "Returns a bit value by offset.",
"complexity": "O(1)",
"group": "bitmap",
"since": "2.2.0",
diff --git a/src/commands/getdel.json b/src/commands/getdel.json
index 17e1664bb..f3d86b0ec 100644
--- a/src/commands/getdel.json
+++ b/src/commands/getdel.json
@@ -1,6 +1,6 @@
{
"GETDEL": {
- "summary": "Get the value of a key and delete the key",
+ "summary": "Returns the string value of a key after deleting the key.",
"complexity": "O(1)",
"group": "string",
"since": "6.2.0",
diff --git a/src/commands/getex.json b/src/commands/getex.json
index cb70eac8f..978b9d10a 100644
--- a/src/commands/getex.json
+++ b/src/commands/getex.json
@@ -1,6 +1,6 @@
{
"GETEX": {
- "summary": "Get the value of a key and optionally set its expiration",
+ "summary": "Returns the string value of a key after setting its expiration time.",
"complexity": "O(1)",
"group": "string",
"since": "6.2.0",
diff --git a/src/commands/getrange.json b/src/commands/getrange.json
index f54836535..82bb72326 100644
--- a/src/commands/getrange.json
+++ b/src/commands/getrange.json
@@ -1,6 +1,6 @@
{
"GETRANGE": {
- "summary": "Get a substring of the string stored at a key",
+ "summary": "Returns a substring of the string stored at a key.",
"complexity": "O(N) where N is the length of the returned string. The complexity is ultimately determined by the returned length, but because creating a substring from an existing string is very cheap, it can be considered O(1) for small strings.",
"group": "string",
"since": "2.4.0",
diff --git a/src/commands/getset.json b/src/commands/getset.json
index 78629ff91..42823d5ab 100644
--- a/src/commands/getset.json
+++ b/src/commands/getset.json
@@ -1,6 +1,6 @@
{
"GETSET": {
- "summary": "Set the string value of a key and return its old value",
+ "summary": "Returns the previous string value of a key after setting it to a new value.",
"complexity": "O(1)",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/hdel.json b/src/commands/hdel.json
index b5d63476b..11da02d3b 100644
--- a/src/commands/hdel.json
+++ b/src/commands/hdel.json
@@ -1,6 +1,6 @@
{
"HDEL": {
- "summary": "Delete one or more hash fields",
+ "summary": "Deletes one or more fields and their values from a hash. Deletes the hash if no fields remain.",
"complexity": "O(N) where N is the number of fields to be removed.",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hello.json b/src/commands/hello.json
index 7f5d6f202..e916e7255 100644
--- a/src/commands/hello.json
+++ b/src/commands/hello.json
@@ -1,6 +1,6 @@
{
"HELLO": {
- "summary": "Handshake with Redis",
+ "summary": "Handshakes with the Redis server.",
"complexity": "O(1)",
"group": "connection",
"since": "6.0.0",
diff --git a/src/commands/hexists.json b/src/commands/hexists.json
index 1fc1b6565..f5ea40571 100644
--- a/src/commands/hexists.json
+++ b/src/commands/hexists.json
@@ -1,6 +1,6 @@
{
"HEXISTS": {
- "summary": "Determine if a hash field exists",
+ "summary": "Determines whether a field exists in a hash.",
"complexity": "O(1)",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hget.json b/src/commands/hget.json
index 101a38ab4..a041143ec 100644
--- a/src/commands/hget.json
+++ b/src/commands/hget.json
@@ -1,6 +1,6 @@
{
"HGET": {
- "summary": "Get the value of a hash field",
+ "summary": "Returns the value of a field in a hash.",
"complexity": "O(1)",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hgetall.json b/src/commands/hgetall.json
index 03373ae77..9bbf835a3 100644
--- a/src/commands/hgetall.json
+++ b/src/commands/hgetall.json
@@ -1,6 +1,6 @@
{
"HGETALL": {
- "summary": "Get all the fields and values in a hash",
+ "summary": "Returns all fields and values in a hash.",
"complexity": "O(N) where N is the size of the hash.",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hincrby.json b/src/commands/hincrby.json
index bd9b0ea4c..a90f5baf0 100644
--- a/src/commands/hincrby.json
+++ b/src/commands/hincrby.json
@@ -1,6 +1,6 @@
{
"HINCRBY": {
- "summary": "Increment the integer value of a hash field by the given number",
+ "summary": "Increments the integer value of a field in a hash by a number. Uses 0 as initial value if the field doesn't exist.",
"complexity": "O(1)",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hincrbyfloat.json b/src/commands/hincrbyfloat.json
index bd34db5e1..6a7d1fdcb 100644
--- a/src/commands/hincrbyfloat.json
+++ b/src/commands/hincrbyfloat.json
@@ -1,6 +1,6 @@
{
"HINCRBYFLOAT": {
- "summary": "Increment the float value of a hash field by the given amount",
+ "summary": "Increments the floating point value of a field by a number. Uses 0 as initial value if the field doesn't exist.",
"complexity": "O(1)",
"group": "hash",
"since": "2.6.0",
diff --git a/src/commands/hkeys.json b/src/commands/hkeys.json
index c6a4d1fcf..917df1c9e 100644
--- a/src/commands/hkeys.json
+++ b/src/commands/hkeys.json
@@ -1,6 +1,6 @@
{
"HKEYS": {
- "summary": "Get all the fields in a hash",
+ "summary": "Returns all fields in a hash.",
"complexity": "O(N) where N is the size of the hash.",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hlen.json b/src/commands/hlen.json
index 1b476ab74..d4c13ac11 100644
--- a/src/commands/hlen.json
+++ b/src/commands/hlen.json
@@ -1,6 +1,6 @@
{
"HLEN": {
- "summary": "Get the number of fields in a hash",
+ "summary": "Returns the number of fields in a hash.",
"complexity": "O(1)",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hmget.json b/src/commands/hmget.json
index 7a31598a7..73fa9c311 100644
--- a/src/commands/hmget.json
+++ b/src/commands/hmget.json
@@ -1,6 +1,6 @@
{
"HMGET": {
- "summary": "Get the values of all the given hash fields",
+ "summary": "Returns the values of all fields in a hash.",
"complexity": "O(N) where N is the number of fields being requested.",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hmset.json b/src/commands/hmset.json
index c498b9086..e92f411e2 100644
--- a/src/commands/hmset.json
+++ b/src/commands/hmset.json
@@ -1,6 +1,6 @@
{
"HMSET": {
- "summary": "Set multiple hash fields to multiple values",
+ "summary": "Sets the values of multiple fields.",
"complexity": "O(N) where N is the number of fields being set.",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hrandfield.json b/src/commands/hrandfield.json
index c821d4508..83abc74a9 100644
--- a/src/commands/hrandfield.json
+++ b/src/commands/hrandfield.json
@@ -1,6 +1,6 @@
{
"HRANDFIELD": {
- "summary": "Get one or multiple random fields from a hash",
+ "summary": "Returns one or more random fields from a hash.",
"complexity": "O(N) where N is the number of fields returned",
"group": "hash",
"since": "6.2.0",
diff --git a/src/commands/hscan.json b/src/commands/hscan.json
index 478bda447..0888eec9f 100644
--- a/src/commands/hscan.json
+++ b/src/commands/hscan.json
@@ -1,6 +1,6 @@
{
"HSCAN": {
- "summary": "Incrementally iterate hash fields and associated values",
+ "summary": "Iterates over fields and values of a hash.",
"complexity": "O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.",
"group": "hash",
"since": "2.8.0",
diff --git a/src/commands/hset.json b/src/commands/hset.json
index 27762afea..a335681e1 100644
--- a/src/commands/hset.json
+++ b/src/commands/hset.json
@@ -1,6 +1,6 @@
{
"HSET": {
- "summary": "Set the string value of a hash field",
+ "summary": "Creates or modifies the value of a field in a hash.",
"complexity": "O(1) for each field/value pair added, so O(N) to add N field/value pairs when the command is called with multiple field/value pairs.",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hsetnx.json b/src/commands/hsetnx.json
index 53cd9c9d0..e024c412a 100644
--- a/src/commands/hsetnx.json
+++ b/src/commands/hsetnx.json
@@ -1,6 +1,6 @@
{
"HSETNX": {
- "summary": "Set the value of a hash field, only if the field does not exist",
+ "summary": "Sets the value of a field in a hash only when the field doesn't exist.",
"complexity": "O(1)",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/hstrlen.json b/src/commands/hstrlen.json
index 5d2c6b1a9..82ac6dbe4 100644
--- a/src/commands/hstrlen.json
+++ b/src/commands/hstrlen.json
@@ -1,6 +1,6 @@
{
"HSTRLEN": {
- "summary": "Get the length of the value of a hash field",
+ "summary": "Returns the length of the value of a field.",
"complexity": "O(1)",
"group": "hash",
"since": "3.2.0",
diff --git a/src/commands/hvals.json b/src/commands/hvals.json
index 6118bcff4..55aeaaff9 100644
--- a/src/commands/hvals.json
+++ b/src/commands/hvals.json
@@ -1,6 +1,6 @@
{
"HVALS": {
- "summary": "Get all the values in a hash",
+ "summary": "Returns all values in a hash.",
"complexity": "O(N) where N is the size of the hash.",
"group": "hash",
"since": "2.0.0",
diff --git a/src/commands/incr.json b/src/commands/incr.json
index d6c1bd2cd..f33ec02b4 100644
--- a/src/commands/incr.json
+++ b/src/commands/incr.json
@@ -1,6 +1,6 @@
{
"INCR": {
- "summary": "Increment the integer value of a key by one",
+ "summary": "Increments the integer value of a key by one. Uses 0 as initial value if the key doesn't exist.",
"complexity": "O(1)",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/incrby.json b/src/commands/incrby.json
index 0febdd56e..2668011ac 100644
--- a/src/commands/incrby.json
+++ b/src/commands/incrby.json
@@ -1,6 +1,6 @@
{
"INCRBY": {
- "summary": "Increment the integer value of a key by the given amount",
+ "summary": "Increments the integer value of a key by a number. Uses 0 as initial value if the key doesn't exist.",
"complexity": "O(1)",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/incrbyfloat.json b/src/commands/incrbyfloat.json
index 0f2440024..c594a1afe 100644
--- a/src/commands/incrbyfloat.json
+++ b/src/commands/incrbyfloat.json
@@ -1,6 +1,6 @@
{
"INCRBYFLOAT": {
- "summary": "Increment the float value of a key by the given amount",
+ "summary": "Increment the floating point value of a key by a number. Uses 0 as initial value if the key doesn't exist.",
"complexity": "O(1)",
"group": "string",
"since": "2.6.0",
diff --git a/src/commands/info.json b/src/commands/info.json
index b44e0c01f..fed0749b8 100644
--- a/src/commands/info.json
+++ b/src/commands/info.json
@@ -1,6 +1,6 @@
{
"INFO": {
- "summary": "Get information and statistics about the server",
+ "summary": "Returns information and statistics about the server.",
"complexity": "O(1)",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/keys.json b/src/commands/keys.json
index cedf3ce7f..9dd4e1101 100644
--- a/src/commands/keys.json
+++ b/src/commands/keys.json
@@ -1,6 +1,6 @@
{
"KEYS": {
- "summary": "Find all keys matching the given pattern",
+ "summary": "Returns all key names that match a pattern.",
"complexity": "O(N) with N being the number of keys in the database, under the assumption that the key names in the database and the given pattern have limited length.",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/lastsave.json b/src/commands/lastsave.json
index 8988e75d7..dc0615425 100644
--- a/src/commands/lastsave.json
+++ b/src/commands/lastsave.json
@@ -1,6 +1,6 @@
{
"LASTSAVE": {
- "summary": "Get the UNIX time stamp of the last successful save to disk",
+ "summary": "Returns the Unix timestamp of the last successful save to disk.",
"complexity": "O(1)",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/latency-doctor.json b/src/commands/latency-doctor.json
index 8d3a98b3c..8f1f8dd37 100644
--- a/src/commands/latency-doctor.json
+++ b/src/commands/latency-doctor.json
@@ -1,6 +1,6 @@
{
"DOCTOR": {
- "summary": "Return a human readable latency analysis report.",
+ "summary": "Returns a human-readable latency analysis report.",
"complexity": "O(1)",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/latency-graph.json b/src/commands/latency-graph.json
index d634da746..cb5d209ea 100644
--- a/src/commands/latency-graph.json
+++ b/src/commands/latency-graph.json
@@ -1,6 +1,6 @@
{
"GRAPH": {
- "summary": "Return a latency graph for the event.",
+ "summary": "Returns a latency graph for an event.",
"complexity": "O(1)",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/latency-help.json b/src/commands/latency-help.json
index e91679eb7..36ff52766 100644
--- a/src/commands/latency-help.json
+++ b/src/commands/latency-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands.",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/latency-histogram.json b/src/commands/latency-histogram.json
index d9821ea85..5e33eb60d 100644
--- a/src/commands/latency-histogram.json
+++ b/src/commands/latency-histogram.json
@@ -1,6 +1,6 @@
{
"HISTOGRAM": {
- "summary": "Return the cumulative distribution of latencies of a subset of commands or all.",
+ "summary": "Returns the cumulative distribution of latencies of a subset or all commands.",
"complexity": "O(N) where N is the number of commands with latency information being retrieved.",
"group": "server",
"since": "7.0.0",
diff --git a/src/commands/latency-history.json b/src/commands/latency-history.json
index 11fa8857b..7c3591aa2 100644
--- a/src/commands/latency-history.json
+++ b/src/commands/latency-history.json
@@ -1,6 +1,6 @@
{
"HISTORY": {
- "summary": "Return timestamp-latency samples for the event.",
+ "summary": "Returns timestamp-latency samples for an event.",
"complexity": "O(1)",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/latency-latest.json b/src/commands/latency-latest.json
index 7e4d42317..88c9e7a8c 100644
--- a/src/commands/latency-latest.json
+++ b/src/commands/latency-latest.json
@@ -1,6 +1,6 @@
{
"LATEST": {
- "summary": "Return the latest latency samples for all events.",
+ "summary": "Returns the latest latency samples for all events.",
"complexity": "O(1)",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/latency-reset.json b/src/commands/latency-reset.json
index 354e3fe74..d4891da5e 100644
--- a/src/commands/latency-reset.json
+++ b/src/commands/latency-reset.json
@@ -1,6 +1,6 @@
{
"RESET": {
- "summary": "Reset latency data for one or more events.",
+ "summary": "Resets the latency data for one or more events.",
"complexity": "O(1)",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/latency.json b/src/commands/latency.json
index 1845fd4ff..e4844d4d7 100644
--- a/src/commands/latency.json
+++ b/src/commands/latency.json
@@ -1,6 +1,6 @@
{
"LATENCY": {
- "summary": "A container for latency diagnostics commands",
+ "summary": "A container for latency diagnostics commands.",
"complexity": "Depends on subcommand.",
"group": "server",
"since": "2.8.13",
diff --git a/src/commands/lcs.json b/src/commands/lcs.json
index fe7840b34..a26b089de 100644
--- a/src/commands/lcs.json
+++ b/src/commands/lcs.json
@@ -1,6 +1,6 @@
{
"LCS": {
- "summary": "Find longest common substring",
+ "summary": "Finds the longest common substring.",
"complexity": "O(N*M) where N and M are the lengths of s1 and s2, respectively",
"group": "string",
"since": "7.0.0",
diff --git a/src/commands/lindex.json b/src/commands/lindex.json
index 89b14ea9f..a589d52fc 100644
--- a/src/commands/lindex.json
+++ b/src/commands/lindex.json
@@ -1,6 +1,6 @@
{
"LINDEX": {
- "summary": "Get an element from a list by its index",
+ "summary": "Returns an element from a list by its index.",
"complexity": "O(N) where N is the number of elements to traverse to get to the element at index. This makes asking for the first or the last element of the list O(1).",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/linsert.json b/src/commands/linsert.json
index d31a4de8d..8059dc50d 100644
--- a/src/commands/linsert.json
+++ b/src/commands/linsert.json
@@ -1,6 +1,6 @@
{
"LINSERT": {
- "summary": "Insert an element before or after another element in a list",
+ "summary": "Inserts an element before or after another element in a list.",
"complexity": "O(N) where N is the number of elements to traverse before seeing the value pivot. This means that inserting somewhere on the left end on the list (head) can be considered O(1) and inserting somewhere on the right end (tail) is O(N).",
"group": "list",
"since": "2.2.0",
diff --git a/src/commands/llen.json b/src/commands/llen.json
index 1452e22d7..846aa4086 100644
--- a/src/commands/llen.json
+++ b/src/commands/llen.json
@@ -1,6 +1,6 @@
{
"LLEN": {
- "summary": "Get the length of a list",
+ "summary": "Returns the length of a list.",
"complexity": "O(1)",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/lmove.json b/src/commands/lmove.json
index 82c305c12..ab0c6adeb 100644
--- a/src/commands/lmove.json
+++ b/src/commands/lmove.json
@@ -1,6 +1,6 @@
{
"LMOVE": {
- "summary": "Pop an element from a list, push it to another list and return it",
+ "summary": "Returns an element after popping it from one list and pushing it to another. Deletes the list if the last element was moved.",
"complexity": "O(1)",
"group": "list",
"since": "6.2.0",
diff --git a/src/commands/lmpop.json b/src/commands/lmpop.json
index e788b5136..7cc347689 100644
--- a/src/commands/lmpop.json
+++ b/src/commands/lmpop.json
@@ -1,6 +1,6 @@
{
"LMPOP": {
- "summary": "Pop elements from a list",
+ "summary": "Returns multiple elements from a list after removing them. Deletes the list if the last element was popped.",
"complexity": "O(N+M) where N is the number of provided keys and M is the number of elements returned.",
"group": "list",
"since": "7.0.0",
diff --git a/src/commands/lolwut.json b/src/commands/lolwut.json
index b093404b5..546c14cfc 100644
--- a/src/commands/lolwut.json
+++ b/src/commands/lolwut.json
@@ -1,6 +1,6 @@
{
"LOLWUT": {
- "summary": "Display some computer art and the Redis version",
+ "summary": "Displays computer art and the Redis version",
"group": "server",
"since": "5.0.0",
"arity": -1,
diff --git a/src/commands/lpop.json b/src/commands/lpop.json
index a7b93c276..b1d6cd177 100644
--- a/src/commands/lpop.json
+++ b/src/commands/lpop.json
@@ -1,6 +1,6 @@
{
"LPOP": {
- "summary": "Remove and get the first elements in a list",
+ "summary": "Returns the first elements in a list after removing it. Deletes the list if the last element was popped.",
"complexity": "O(N) where N is the number of elements returned",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/lpos.json b/src/commands/lpos.json
index 8e3a9fa02..7b63b72b5 100644
--- a/src/commands/lpos.json
+++ b/src/commands/lpos.json
@@ -1,6 +1,6 @@
{
"LPOS": {
- "summary": "Return the index of matching elements on a list",
+ "summary": "Returns the index of matching elements in a list.",
"complexity": "O(N) where N is the number of elements in the list, for the average case. When searching for elements near the head or the tail of the list, or when the MAXLEN option is provided, the command may run in constant time.",
"group": "list",
"since": "6.0.6",
diff --git a/src/commands/lpush.json b/src/commands/lpush.json
index 6fc815298..34cd8e246 100644
--- a/src/commands/lpush.json
+++ b/src/commands/lpush.json
@@ -1,6 +1,6 @@
{
"LPUSH": {
- "summary": "Prepend one or multiple elements to a list",
+ "summary": "Prepends one or more elements to a list. Creates the key if it doesn't exist.",
"complexity": "O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/lpushx.json b/src/commands/lpushx.json
index d41f50b77..5f6d17cbc 100644
--- a/src/commands/lpushx.json
+++ b/src/commands/lpushx.json
@@ -1,6 +1,6 @@
{
"LPUSHX": {
- "summary": "Prepend an element to a list, only if the list exists",
+ "summary": "Prepends one or more elements to a list only when the list exists.",
"complexity": "O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.",
"group": "list",
"since": "2.2.0",
diff --git a/src/commands/lrange.json b/src/commands/lrange.json
index 1c0868caa..303d2f60b 100644
--- a/src/commands/lrange.json
+++ b/src/commands/lrange.json
@@ -1,6 +1,6 @@
{
"LRANGE": {
- "summary": "Get a range of elements from a list",
+ "summary": "Returns a range of elements from a list.",
"complexity": "O(S+N) where S is the distance of start offset from HEAD for small lists, from nearest end (HEAD or TAIL) for large lists; and N is the number of elements in the specified range.",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/lrem.json b/src/commands/lrem.json
index 84baeea0b..c267d3ebc 100644
--- a/src/commands/lrem.json
+++ b/src/commands/lrem.json
@@ -1,6 +1,6 @@
{
"LREM": {
- "summary": "Remove elements from a list",
+ "summary": "Removes elements from a list. Deletes the list if the last element was removed.",
"complexity": "O(N+M) where N is the length of the list and M is the number of elements removed.",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/lset.json b/src/commands/lset.json
index 441db073c..473b02c34 100644
--- a/src/commands/lset.json
+++ b/src/commands/lset.json
@@ -1,6 +1,6 @@
{
"LSET": {
- "summary": "Set the value of an element in a list by its index",
+ "summary": "Sets the value of an element in a list by its index.",
"complexity": "O(N) where N is the length of the list. Setting either the first or the last element of the list is O(1).",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/ltrim.json b/src/commands/ltrim.json
index c041f49ca..3bba299f8 100644
--- a/src/commands/ltrim.json
+++ b/src/commands/ltrim.json
@@ -1,6 +1,6 @@
{
"LTRIM": {
- "summary": "Trim a list to the specified range",
+ "summary": "Removes elements from both ends a list. Deletes the list if all elements were trimmed.",
"complexity": "O(N) where N is the number of elements to be removed by the operation.",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/memory-doctor.json b/src/commands/memory-doctor.json
index 5df7456f5..c0c8c22a8 100644
--- a/src/commands/memory-doctor.json
+++ b/src/commands/memory-doctor.json
@@ -1,6 +1,6 @@
{
"DOCTOR": {
- "summary": "Outputs memory problems report",
+ "summary": "Outputs a memory problems report.",
"complexity": "O(1)",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/memory-help.json b/src/commands/memory-help.json
index 34ee382c5..e72934c56 100644
--- a/src/commands/memory-help.json
+++ b/src/commands/memory-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/memory-malloc-stats.json b/src/commands/memory-malloc-stats.json
index a44959c88..5ef6a31c4 100644
--- a/src/commands/memory-malloc-stats.json
+++ b/src/commands/memory-malloc-stats.json
@@ -1,6 +1,6 @@
{
"MALLOC-STATS": {
- "summary": "Show allocator internal stats",
+ "summary": "Returns the allocator statistics.",
"complexity": "Depends on how much memory is allocated, could be slow",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/memory-purge.json b/src/commands/memory-purge.json
index 09c7d124c..77ed61dc5 100644
--- a/src/commands/memory-purge.json
+++ b/src/commands/memory-purge.json
@@ -1,6 +1,6 @@
{
"PURGE": {
- "summary": "Ask the allocator to release memory",
+ "summary": "Asks the allocator to release memory.",
"complexity": "Depends on how much memory is allocated, could be slow",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/memory-stats.json b/src/commands/memory-stats.json
index b50a9eb31..de82dc8cc 100644
--- a/src/commands/memory-stats.json
+++ b/src/commands/memory-stats.json
@@ -1,6 +1,6 @@
{
"STATS": {
- "summary": "Show memory usage details",
+ "summary": "Returns details about memory usage.",
"complexity": "O(1)",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/memory-usage.json b/src/commands/memory-usage.json
index ff977d9be..78678ad1e 100644
--- a/src/commands/memory-usage.json
+++ b/src/commands/memory-usage.json
@@ -1,6 +1,6 @@
{
"USAGE": {
- "summary": "Estimate the memory usage of a key",
+ "summary": "Estimates the memory usage of a key.",
"complexity": "O(N) where N is the number of samples.",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/memory.json b/src/commands/memory.json
index d3fa02f5a..aab0841d1 100644
--- a/src/commands/memory.json
+++ b/src/commands/memory.json
@@ -1,6 +1,6 @@
{
"MEMORY": {
- "summary": "A container for memory diagnostics commands",
+ "summary": "A container for memory diagnostics commands.",
"complexity": "Depends on subcommand.",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/mget.json b/src/commands/mget.json
index a5bd8c30e..a177853ca 100644
--- a/src/commands/mget.json
+++ b/src/commands/mget.json
@@ -1,6 +1,6 @@
{
"MGET": {
- "summary": "Get the values of all the given keys",
+ "summary": "Atomically returns the string values of one or more keys.",
"complexity": "O(N) where N is the number of keys to retrieve.",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/migrate.json b/src/commands/migrate.json
index 83a1dd149..f1dfae4e0 100644
--- a/src/commands/migrate.json
+++ b/src/commands/migrate.json
@@ -1,6 +1,6 @@
{
"MIGRATE": {
- "summary": "Atomically transfer a key from a Redis instance to another one.",
+ "summary": "Atomically transfers a key from one Redis instance to another.",
"complexity": "This command actually executes a DUMP+DEL in the source instance, and a RESTORE in the target instance. See the pages of these commands for time complexity. Also an O(N) data transfer between the two instances is performed.",
"group": "generic",
"since": "2.6.0",
diff --git a/src/commands/module-help.json b/src/commands/module-help.json
index 10b59dc2d..5f3db0f51 100644
--- a/src/commands/module-help.json
+++ b/src/commands/module-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "server",
"since": "5.0.0",
diff --git a/src/commands/module-list.json b/src/commands/module-list.json
index 65a8c9f3b..92a022bc7 100644
--- a/src/commands/module-list.json
+++ b/src/commands/module-list.json
@@ -1,6 +1,6 @@
{
"LIST": {
- "summary": "List all modules loaded by the server",
+ "summary": "Returns all loaded modules.",
"complexity": "O(N) where N is the number of loaded modules.",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/module-load.json b/src/commands/module-load.json
index 1ce5faf10..dd5d654ed 100644
--- a/src/commands/module-load.json
+++ b/src/commands/module-load.json
@@ -1,6 +1,6 @@
{
"LOAD": {
- "summary": "Load a module",
+ "summary": "Loads a module.",
"complexity": "O(1)",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/module-loadex.json b/src/commands/module-loadex.json
index 7aa278831..6c750ea7f 100644
--- a/src/commands/module-loadex.json
+++ b/src/commands/module-loadex.json
@@ -1,6 +1,6 @@
{
"LOADEX": {
- "summary": "Load a module with extended parameters",
+ "summary": "Loads a module using extended parameters.",
"complexity": "O(1)",
"group": "server",
"since": "7.0.0",
diff --git a/src/commands/module-unload.json b/src/commands/module-unload.json
index 3cd85b378..f2fbf80fa 100644
--- a/src/commands/module-unload.json
+++ b/src/commands/module-unload.json
@@ -1,6 +1,6 @@
{
"UNLOAD": {
- "summary": "Unload a module",
+ "summary": "Unloads a module.",
"complexity": "O(1)",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/module.json b/src/commands/module.json
index f04d5daf6..148f18223 100644
--- a/src/commands/module.json
+++ b/src/commands/module.json
@@ -1,6 +1,6 @@
{
"MODULE": {
- "summary": "A container for module commands",
+ "summary": "A container for module commands.",
"complexity": "Depends on subcommand.",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/monitor.json b/src/commands/monitor.json
index a305c4fce..23c659e4e 100644
--- a/src/commands/monitor.json
+++ b/src/commands/monitor.json
@@ -1,6 +1,6 @@
{
"MONITOR": {
- "summary": "Listen for all requests received by the server in real time",
+ "summary": "Listens for all requests received by the server in real-time.",
"group": "server",
"since": "1.0.0",
"arity": 1,
diff --git a/src/commands/move.json b/src/commands/move.json
index cd588ff59..203068067 100644
--- a/src/commands/move.json
+++ b/src/commands/move.json
@@ -1,6 +1,6 @@
{
"MOVE": {
- "summary": "Move a key to another database",
+ "summary": "Moves a key to another database.",
"complexity": "O(1)",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/mset.json b/src/commands/mset.json
index deff39ec8..9a57446b5 100644
--- a/src/commands/mset.json
+++ b/src/commands/mset.json
@@ -1,6 +1,6 @@
{
"MSET": {
- "summary": "Set multiple keys to multiple values",
+ "summary": "Atomically creates or modifies the string values of one or more keys.",
"complexity": "O(N) where N is the number of keys to set.",
"group": "string",
"since": "1.0.1",
diff --git a/src/commands/msetnx.json b/src/commands/msetnx.json
index 90a6449d1..fa71d2b45 100644
--- a/src/commands/msetnx.json
+++ b/src/commands/msetnx.json
@@ -1,6 +1,6 @@
{
"MSETNX": {
- "summary": "Set multiple keys to multiple values, only if none of the keys exist",
+ "summary": "Atomically modifies the string values of one or more keys only when all keys don't exist.",
"complexity": "O(N) where N is the number of keys to set.",
"group": "string",
"since": "1.0.1",
diff --git a/src/commands/multi.json b/src/commands/multi.json
index dd94bce26..5f17a1da2 100644
--- a/src/commands/multi.json
+++ b/src/commands/multi.json
@@ -1,6 +1,6 @@
{
"MULTI": {
- "summary": "Mark the start of a transaction block",
+ "summary": "Starts a transaction.",
"complexity": "O(1)",
"group": "transactions",
"since": "1.2.0",
diff --git a/src/commands/object-encoding.json b/src/commands/object-encoding.json
index 902a2f39e..f255b57d7 100644
--- a/src/commands/object-encoding.json
+++ b/src/commands/object-encoding.json
@@ -1,6 +1,6 @@
{
"ENCODING": {
- "summary": "Inspect the internal encoding of a Redis object",
+ "summary": "Returns the internal encoding of a Redis object.",
"complexity": "O(1)",
"group": "generic",
"since": "2.2.3",
diff --git a/src/commands/object-freq.json b/src/commands/object-freq.json
index 79c58fb63..03b5b2b20 100644
--- a/src/commands/object-freq.json
+++ b/src/commands/object-freq.json
@@ -1,6 +1,6 @@
{
"FREQ": {
- "summary": "Get the logarithmic access frequency counter of a Redis object",
+ "summary": "Returns the logarithmic access frequency counter of a Redis object.",
"complexity": "O(1)",
"group": "generic",
"since": "4.0.0",
diff --git a/src/commands/object-help.json b/src/commands/object-help.json
index bf1fac643..52616508c 100644
--- a/src/commands/object-help.json
+++ b/src/commands/object-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "generic",
"since": "6.2.0",
diff --git a/src/commands/object-idletime.json b/src/commands/object-idletime.json
index 8e124df6f..03c202a2b 100644
--- a/src/commands/object-idletime.json
+++ b/src/commands/object-idletime.json
@@ -1,6 +1,6 @@
{
"IDLETIME": {
- "summary": "Get the time since a Redis object was last accessed",
+ "summary": "Returns the time since the last access to a Redis object.",
"complexity": "O(1)",
"group": "generic",
"since": "2.2.3",
diff --git a/src/commands/object-refcount.json b/src/commands/object-refcount.json
index 82e2a54ea..48009bbf7 100644
--- a/src/commands/object-refcount.json
+++ b/src/commands/object-refcount.json
@@ -1,6 +1,6 @@
{
"REFCOUNT": {
- "summary": "Get the number of references to the value of the key",
+ "summary": "Returns the reference count of a value of a key.",
"complexity": "O(1)",
"group": "generic",
"since": "2.2.3",
diff --git a/src/commands/object.json b/src/commands/object.json
index f51988cd7..14be26b28 100644
--- a/src/commands/object.json
+++ b/src/commands/object.json
@@ -1,6 +1,6 @@
{
"OBJECT": {
- "summary": "A container for object introspection commands",
+ "summary": "A container for object introspection commands.",
"complexity": "Depends on subcommand.",
"group": "generic",
"since": "2.2.3",
diff --git a/src/commands/persist.json b/src/commands/persist.json
index 2ca99642b..11e6e01ca 100644
--- a/src/commands/persist.json
+++ b/src/commands/persist.json
@@ -1,6 +1,6 @@
{
"PERSIST": {
- "summary": "Remove the expiration from a key",
+ "summary": "Removes the expiration time of a key.",
"complexity": "O(1)",
"group": "generic",
"since": "2.2.0",
diff --git a/src/commands/pexpire.json b/src/commands/pexpire.json
index 03416a1eb..a133f4fa2 100644
--- a/src/commands/pexpire.json
+++ b/src/commands/pexpire.json
@@ -1,6 +1,6 @@
{
"PEXPIRE": {
- "summary": "Set a key's time to live in milliseconds",
+ "summary": "Sets the expiration time of a key in milliseconds.",
"complexity": "O(1)",
"group": "generic",
"since": "2.6.0",
diff --git a/src/commands/pexpireat.json b/src/commands/pexpireat.json
index ac09ba2e0..dd08ed0a5 100644
--- a/src/commands/pexpireat.json
+++ b/src/commands/pexpireat.json
@@ -1,6 +1,6 @@
{
"PEXPIREAT": {
- "summary": "Set the expiration for a key as a UNIX timestamp specified in milliseconds",
+ "summary": "Sets the expiration time of a key to a Unix milliseconds timestamp.",
"complexity": "O(1)",
"group": "generic",
"since": "2.6.0",
diff --git a/src/commands/pexpiretime.json b/src/commands/pexpiretime.json
index 9295a6a17..3fa055cb0 100644
--- a/src/commands/pexpiretime.json
+++ b/src/commands/pexpiretime.json
@@ -1,6 +1,6 @@
{
"PEXPIRETIME": {
- "summary": "Get the expiration Unix timestamp for a key in milliseconds",
+ "summary": "Returns the expiration time of a key as a Unix milliseconds timestamp.",
"complexity": "O(1)",
"group": "generic",
"since": "7.0.0",
diff --git a/src/commands/pfadd.json b/src/commands/pfadd.json
index f457d0f55..7d8448ad8 100644
--- a/src/commands/pfadd.json
+++ b/src/commands/pfadd.json
@@ -1,6 +1,6 @@
{
"PFADD": {
- "summary": "Adds the specified elements to the specified HyperLogLog.",
+ "summary": "Adds elements to a HyperLogLog key. Creates the key if it doesn't exist.",
"complexity": "O(1) to add every element.",
"group": "hyperloglog",
"since": "2.8.9",
diff --git a/src/commands/pfcount.json b/src/commands/pfcount.json
index 92f84d895..02a64c3d5 100644
--- a/src/commands/pfcount.json
+++ b/src/commands/pfcount.json
@@ -1,6 +1,6 @@
{
"PFCOUNT": {
- "summary": "Return the approximated cardinality of the set(s) observed by the HyperLogLog at key(s).",
+ "summary": "Returns the approximated cardinality of the set(s) observed by the HyperLogLog key(s).",
"complexity": "O(1) with a very small average constant time when called with a single key. O(N) with N being the number of keys, and much bigger constant times, when called with multiple keys.",
"group": "hyperloglog",
"since": "2.8.9",
diff --git a/src/commands/pfdebug.json b/src/commands/pfdebug.json
index b07e725bc..4cd2853bc 100644
--- a/src/commands/pfdebug.json
+++ b/src/commands/pfdebug.json
@@ -1,6 +1,6 @@
{
"PFDEBUG": {
- "summary": "Internal commands for debugging HyperLogLog values",
+ "summary": "Internal commands for debugging HyperLogLog values.",
"complexity": "N/A",
"group": "hyperloglog",
"since": "2.8.9",
diff --git a/src/commands/pfmerge.json b/src/commands/pfmerge.json
index 9f1f417ff..c93070f11 100644
--- a/src/commands/pfmerge.json
+++ b/src/commands/pfmerge.json
@@ -1,6 +1,6 @@
{
"PFMERGE": {
- "summary": "Merge N different HyperLogLogs into a single one.",
+ "summary": "Merges one or more HyperLogLog values into a single key.",
"complexity": "O(N) to merge N HyperLogLogs, but with high constant times.",
"group": "hyperloglog",
"since": "2.8.9",
diff --git a/src/commands/pfselftest.json b/src/commands/pfselftest.json
index f9c6a1002..ed29280b4 100644
--- a/src/commands/pfselftest.json
+++ b/src/commands/pfselftest.json
@@ -1,6 +1,6 @@
{
"PFSELFTEST": {
- "summary": "An internal command for testing HyperLogLog values",
+ "summary": "An internal command for testing HyperLogLog values.",
"complexity": "N/A",
"group": "hyperloglog",
"since": "2.8.9",
diff --git a/src/commands/ping.json b/src/commands/ping.json
index 13db35d43..b634c0be0 100644
--- a/src/commands/ping.json
+++ b/src/commands/ping.json
@@ -1,6 +1,6 @@
{
"PING": {
- "summary": "Ping the server",
+ "summary": "Returns the server's liveliness response.",
"complexity": "O(1)",
"group": "connection",
"since": "1.0.0",
diff --git a/src/commands/psetex.json b/src/commands/psetex.json
index 427f23279..8d8876602 100644
--- a/src/commands/psetex.json
+++ b/src/commands/psetex.json
@@ -1,6 +1,6 @@
{
"PSETEX": {
- "summary": "Set the value and expiration in milliseconds of a key",
+ "summary": "Sets both string value and expiration time in milliseconds of a key. The key is created if it doesn't exist.",
"complexity": "O(1)",
"group": "string",
"since": "2.6.0",
diff --git a/src/commands/psubscribe.json b/src/commands/psubscribe.json
index 8a1e66e08..db9592139 100644
--- a/src/commands/psubscribe.json
+++ b/src/commands/psubscribe.json
@@ -1,6 +1,6 @@
{
"PSUBSCRIBE": {
- "summary": "Listen for messages published to channels matching the given patterns",
+ "summary": "Listens for messages published to channels that match one or more patterns.",
"complexity": "O(N) where N is the number of patterns the client is already subscribed to.",
"group": "pubsub",
"since": "2.0.0",
diff --git a/src/commands/psync.json b/src/commands/psync.json
index 91175a198..60da8ed21 100644
--- a/src/commands/psync.json
+++ b/src/commands/psync.json
@@ -1,6 +1,6 @@
{
"PSYNC": {
- "summary": "Internal command used for replication",
+ "summary": "An internal command used in replication.",
"group": "server",
"since": "2.8.0",
"arity": -3,
diff --git a/src/commands/pttl.json b/src/commands/pttl.json
index 863248901..304270b9e 100644
--- a/src/commands/pttl.json
+++ b/src/commands/pttl.json
@@ -1,6 +1,6 @@
{
"PTTL": {
- "summary": "Get the time to live for a key in milliseconds",
+ "summary": "Returns the expiration time in milliseconds of a key.",
"complexity": "O(1)",
"group": "generic",
"since": "2.6.0",
diff --git a/src/commands/publish.json b/src/commands/publish.json
index 05313766b..1dd757d69 100644
--- a/src/commands/publish.json
+++ b/src/commands/publish.json
@@ -1,6 +1,6 @@
{
"PUBLISH": {
- "summary": "Post a message to a channel",
+ "summary": "Posts a message to a channel.",
"complexity": "O(N+M) where N is the number of clients subscribed to the receiving channel and M is the total number of subscribed patterns (by any client).",
"group": "pubsub",
"since": "2.0.0",
diff --git a/src/commands/pubsub-channels.json b/src/commands/pubsub-channels.json
index 173271271..08505b3eb 100644
--- a/src/commands/pubsub-channels.json
+++ b/src/commands/pubsub-channels.json
@@ -1,6 +1,6 @@
{
"CHANNELS": {
- "summary": "List active channels",
+ "summary": "Returns the active channels.",
"complexity": "O(N) where N is the number of active channels, and assuming constant time pattern matching (relatively short channels and patterns)",
"group": "pubsub",
"since": "2.8.0",
diff --git a/src/commands/pubsub-help.json b/src/commands/pubsub-help.json
index 09c04f3a4..32faedcbe 100644
--- a/src/commands/pubsub-help.json
+++ b/src/commands/pubsub-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "pubsub",
"since": "6.2.0",
diff --git a/src/commands/pubsub-numpat.json b/src/commands/pubsub-numpat.json
index b593a4e6d..ae653b74f 100644
--- a/src/commands/pubsub-numpat.json
+++ b/src/commands/pubsub-numpat.json
@@ -1,6 +1,6 @@
{
"NUMPAT": {
- "summary": "Get the count of unique patterns pattern subscriptions",
+ "summary": "Returns a count of unique pattern subscriptions.",
"complexity": "O(1)",
"group": "pubsub",
"since": "2.8.0",
diff --git a/src/commands/pubsub-numsub.json b/src/commands/pubsub-numsub.json
index 1df663be2..1cfe8e2ef 100644
--- a/src/commands/pubsub-numsub.json
+++ b/src/commands/pubsub-numsub.json
@@ -1,6 +1,6 @@
{
"NUMSUB": {
- "summary": "Get the count of subscribers for channels",
+ "summary": "Returns a count of subscribers to channels.",
"complexity": "O(N) for the NUMSUB subcommand, where N is the number of requested channels",
"group": "pubsub",
"since": "2.8.0",
diff --git a/src/commands/pubsub-shardchannels.json b/src/commands/pubsub-shardchannels.json
index cd196105b..7aa0a7a87 100644
--- a/src/commands/pubsub-shardchannels.json
+++ b/src/commands/pubsub-shardchannels.json
@@ -1,6 +1,6 @@
{
"SHARDCHANNELS": {
- "summary": "List active shard channels",
+ "summary": "Returns the active shard channels.",
"complexity": "O(N) where N is the number of active shard channels, and assuming constant time pattern matching (relatively short shard channels).",
"group": "pubsub",
"since": "7.0.0",
diff --git a/src/commands/pubsub-shardnumsub.json b/src/commands/pubsub-shardnumsub.json
index 536568a2a..43675340f 100644
--- a/src/commands/pubsub-shardnumsub.json
+++ b/src/commands/pubsub-shardnumsub.json
@@ -1,6 +1,6 @@
{
"SHARDNUMSUB": {
- "summary": "Get the count of subscribers for shard channels",
+ "summary": "Returns the count of subscribers of shard channels.",
"complexity": "O(N) for the SHARDNUMSUB subcommand, where N is the number of requested shard channels",
"group": "pubsub",
"since": "7.0.0",
diff --git a/src/commands/pubsub.json b/src/commands/pubsub.json
index e31bd4043..2f0bb5e25 100644
--- a/src/commands/pubsub.json
+++ b/src/commands/pubsub.json
@@ -1,6 +1,6 @@
{
"PUBSUB": {
- "summary": "A container for Pub/Sub commands",
+ "summary": "A container for Pub/Sub commands.",
"complexity": "Depends on subcommand.",
"group": "pubsub",
"since": "2.8.0",
diff --git a/src/commands/punsubscribe.json b/src/commands/punsubscribe.json
index 30136b316..3a074517b 100644
--- a/src/commands/punsubscribe.json
+++ b/src/commands/punsubscribe.json
@@ -1,6 +1,6 @@
{
"PUNSUBSCRIBE": {
- "summary": "Stop listening for messages posted to channels matching the given patterns",
+ "summary": "Stops listening to messages published to channels that match one or more patterns.",
"complexity": "O(N+M) where N is the number of patterns the client is already subscribed and M is the number of total patterns subscribed in the system (by any client).",
"group": "pubsub",
"since": "2.0.0",
diff --git a/src/commands/quit.json b/src/commands/quit.json
index feb371955..e8dd6e9de 100644
--- a/src/commands/quit.json
+++ b/src/commands/quit.json
@@ -1,6 +1,6 @@
{
"QUIT": {
- "summary": "Close the connection",
+ "summary": "Closes the connection.",
"complexity": "O(1)",
"group": "connection",
"since": "1.0.0",
diff --git a/src/commands/randomkey.json b/src/commands/randomkey.json
index 18f838b05..e8773ee6b 100644
--- a/src/commands/randomkey.json
+++ b/src/commands/randomkey.json
@@ -1,6 +1,6 @@
{
"RANDOMKEY": {
- "summary": "Return a random key from the keyspace",
+ "summary": "Returns a random key name from the database.",
"complexity": "O(1)",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/readonly.json b/src/commands/readonly.json
index 4dcd50af8..253573c97 100644
--- a/src/commands/readonly.json
+++ b/src/commands/readonly.json
@@ -1,6 +1,6 @@
{
"READONLY": {
- "summary": "Enables read queries for a connection to a cluster replica node",
+ "summary": "Enables read-only queries for a connection to a Redis Cluster replica node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/readwrite.json b/src/commands/readwrite.json
index e72d5cac5..440dd596b 100644
--- a/src/commands/readwrite.json
+++ b/src/commands/readwrite.json
@@ -1,6 +1,6 @@
{
"READWRITE": {
- "summary": "Disables read queries for a connection to a cluster replica node",
+ "summary": "Enables read-write queries for a connection to a Reids Cluster replica node.",
"complexity": "O(1)",
"group": "cluster",
"since": "3.0.0",
diff --git a/src/commands/rename.json b/src/commands/rename.json
index 046d40ae3..a8b65aee7 100644
--- a/src/commands/rename.json
+++ b/src/commands/rename.json
@@ -1,6 +1,6 @@
{
"RENAME": {
- "summary": "Rename a key",
+ "summary": "Renames a key and overwrites the destination.",
"complexity": "O(1)",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/renamenx.json b/src/commands/renamenx.json
index a6c039182..72f0569d8 100644
--- a/src/commands/renamenx.json
+++ b/src/commands/renamenx.json
@@ -1,6 +1,6 @@
{
"RENAMENX": {
- "summary": "Rename a key, only if the new key does not exist",
+ "summary": "Renames a key only when the target key name doesn't exist.",
"complexity": "O(1)",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/replconf.json b/src/commands/replconf.json
index d5c43d525..e8efc7b42 100644
--- a/src/commands/replconf.json
+++ b/src/commands/replconf.json
@@ -1,6 +1,6 @@
{
"REPLCONF": {
- "summary": "An internal command for configuring the replication stream",
+ "summary": "An internal command for configuring the replication stream.",
"complexity": "O(1)",
"group": "server",
"since": "3.0.0",
diff --git a/src/commands/replicaof.json b/src/commands/replicaof.json
index 7f1d08754..aa4939019 100644
--- a/src/commands/replicaof.json
+++ b/src/commands/replicaof.json
@@ -1,6 +1,6 @@
{
"REPLICAOF": {
- "summary": "Make the server a replica of another instance, or promote it as master.",
+ "summary": "Configures a server as replica of another, or promotes it to a master.",
"complexity": "O(1)",
"group": "server",
"since": "5.0.0",
diff --git a/src/commands/reset.json b/src/commands/reset.json
index 81a20a3a8..3fb1a449d 100644
--- a/src/commands/reset.json
+++ b/src/commands/reset.json
@@ -1,6 +1,6 @@
{
"RESET": {
- "summary": "Reset the connection",
+ "summary": "Resets the connection.",
"complexity": "O(1)",
"group": "connection",
"since": "6.2.0",
diff --git a/src/commands/restore-asking.json b/src/commands/restore-asking.json
index b260478f2..2694a873c 100644
--- a/src/commands/restore-asking.json
+++ b/src/commands/restore-asking.json
@@ -1,6 +1,6 @@
{
"RESTORE-ASKING": {
- "summary": "An internal command for migrating keys in a cluster",
+ "summary": "An internal command for migrating keys in a cluster.",
"complexity": "O(1) to create the new key and additional O(N*M) to reconstruct the serialized value, where N is the number of Redis objects composing the value and M their average size. For small string values the time complexity is thus O(1)+O(1*M) where M is small, so simply O(1). However for sorted set values the complexity is O(N*M*log(N)) because inserting values into sorted sets is O(log(N)).",
"group": "server",
"since": "3.0.0",
diff --git a/src/commands/restore.json b/src/commands/restore.json
index 7e40d1c4f..383dd451e 100644
--- a/src/commands/restore.json
+++ b/src/commands/restore.json
@@ -1,6 +1,6 @@
{
"RESTORE": {
- "summary": "Create a key using the provided serialized value, previously obtained using DUMP.",
+ "summary": "Creates a key from the serialized representation of a value.",
"complexity": "O(1) to create the new key and additional O(N*M) to reconstruct the serialized value, where N is the number of Redis objects composing the value and M their average size. For small string values the time complexity is thus O(1)+O(1*M) where M is small, so simply O(1). However for sorted set values the complexity is O(N*M*log(N)) because inserting values into sorted sets is O(log(N)).",
"group": "generic",
"since": "2.6.0",
diff --git a/src/commands/role.json b/src/commands/role.json
index 498a5de52..a0299fa73 100644
--- a/src/commands/role.json
+++ b/src/commands/role.json
@@ -1,6 +1,6 @@
{
"ROLE": {
- "summary": "Return the role of the instance in the context of replication",
+ "summary": "Returns the replication role.",
"complexity": "O(1)",
"group": "server",
"since": "2.8.12",
diff --git a/src/commands/rpop.json b/src/commands/rpop.json
index c9b55b125..4eabdf5ea 100644
--- a/src/commands/rpop.json
+++ b/src/commands/rpop.json
@@ -1,6 +1,6 @@
{
"RPOP": {
- "summary": "Remove and get the last elements in a list",
+ "summary": "Returns and removes the last elements of a list. Deletes the list if the lst element was popped.",
"complexity": "O(N) where N is the number of elements returned",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/rpoplpush.json b/src/commands/rpoplpush.json
index ddb0537e7..755224194 100644
--- a/src/commands/rpoplpush.json
+++ b/src/commands/rpoplpush.json
@@ -1,6 +1,6 @@
{
"RPOPLPUSH": {
- "summary": "Remove the last element in a list, prepend it to another list and return it",
+ "summary": "Returns the last element of a list after removing and pushing it to another list. Deletes the list if the lst element was popped.",
"complexity": "O(1)",
"group": "list",
"since": "1.2.0",
diff --git a/src/commands/rpush.json b/src/commands/rpush.json
index 7b6a4a634..e5d6908c8 100644
--- a/src/commands/rpush.json
+++ b/src/commands/rpush.json
@@ -1,6 +1,6 @@
{
"RPUSH": {
- "summary": "Append one or multiple elements to a list",
+ "summary": "Appends one or more elements to a list. Creates the key if it doesn't exist.",
"complexity": "O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.",
"group": "list",
"since": "1.0.0",
diff --git a/src/commands/rpushx.json b/src/commands/rpushx.json
index 19294dd02..b41f9c506 100644
--- a/src/commands/rpushx.json
+++ b/src/commands/rpushx.json
@@ -1,6 +1,6 @@
{
"RPUSHX": {
- "summary": "Append an element to a list, only if the list exists",
+ "summary": "Appends an element to a list only when the list exists.",
"complexity": "O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.",
"group": "list",
"since": "2.2.0",
diff --git a/src/commands/sadd.json b/src/commands/sadd.json
index 89c824625..00b3c26df 100644
--- a/src/commands/sadd.json
+++ b/src/commands/sadd.json
@@ -1,6 +1,6 @@
{
"SADD": {
- "summary": "Add one or more members to a set",
+ "summary": "Adds one or more members to a set. Creates the key if it doesn't exist.",
"complexity": "O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/save.json b/src/commands/save.json
index 1885128bf..0645e2778 100644
--- a/src/commands/save.json
+++ b/src/commands/save.json
@@ -1,6 +1,6 @@
{
"SAVE": {
- "summary": "Synchronously save the dataset to disk",
+ "summary": "Synchronously saves the database(s) to disk.",
"complexity": "O(N) where N is the total number of keys in all databases",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/scan.json b/src/commands/scan.json
index bdf27a575..ca9adf5b4 100644
--- a/src/commands/scan.json
+++ b/src/commands/scan.json
@@ -1,6 +1,6 @@
{
"SCAN": {
- "summary": "Incrementally iterate the keys space",
+ "summary": "Iterates over the key names in the database.",
"complexity": "O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.",
"group": "generic",
"since": "2.8.0",
diff --git a/src/commands/scard.json b/src/commands/scard.json
index 0b7a832de..8df0a4f1c 100644
--- a/src/commands/scard.json
+++ b/src/commands/scard.json
@@ -1,6 +1,6 @@
{
"SCARD": {
- "summary": "Get the number of members in a set",
+ "summary": "Returns the number of members in a set.",
"complexity": "O(1)",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/script-debug.json b/src/commands/script-debug.json
index 25899b94a..ebba38a6c 100644
--- a/src/commands/script-debug.json
+++ b/src/commands/script-debug.json
@@ -1,6 +1,6 @@
{
"DEBUG": {
- "summary": "Set the debug mode for executed scripts.",
+ "summary": "Sets the debug mode of server-side Lua scripts.",
"complexity": "O(1)",
"group": "scripting",
"since": "3.2.0",
diff --git a/src/commands/script-exists.json b/src/commands/script-exists.json
index 629615907..d8c47e482 100644
--- a/src/commands/script-exists.json
+++ b/src/commands/script-exists.json
@@ -1,6 +1,6 @@
{
"EXISTS": {
- "summary": "Check existence of scripts in the script cache.",
+ "summary": "Determines whether server-side Lua scripts exist in the script cache.",
"complexity": "O(N) with N being the number of scripts to check (so checking a single script is an O(1) operation).",
"group": "scripting",
"since": "2.6.0",
diff --git a/src/commands/script-flush.json b/src/commands/script-flush.json
index 63cfb1e28..7487dc51f 100644
--- a/src/commands/script-flush.json
+++ b/src/commands/script-flush.json
@@ -1,6 +1,6 @@
{
"FLUSH": {
- "summary": "Remove all the scripts from the script cache.",
+ "summary": "Removes all server-side Lua scripts from the script cache.",
"complexity": "O(N) with N being the number of scripts in cache",
"group": "scripting",
"since": "2.6.0",
diff --git a/src/commands/script-help.json b/src/commands/script-help.json
index d6c6853fd..c5ea5df6b 100644
--- a/src/commands/script-help.json
+++ b/src/commands/script-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "scripting",
"since": "5.0.0",
diff --git a/src/commands/script-kill.json b/src/commands/script-kill.json
index c10ff0a0d..fe72d31eb 100644
--- a/src/commands/script-kill.json
+++ b/src/commands/script-kill.json
@@ -1,6 +1,6 @@
{
"KILL": {
- "summary": "Kill the script currently in execution.",
+ "summary": "Terminates a server-side Lua script during execution.",
"complexity": "O(1)",
"group": "scripting",
"since": "2.6.0",
diff --git a/src/commands/script-load.json b/src/commands/script-load.json
index a369ee459..37f80fdc7 100644
--- a/src/commands/script-load.json
+++ b/src/commands/script-load.json
@@ -1,6 +1,6 @@
{
"LOAD": {
- "summary": "Load the specified Lua script into the script cache.",
+ "summary": "Loads a server-side Lua script to the script cache.",
"complexity": "O(N) with N being the length in bytes of the script body.",
"group": "scripting",
"since": "2.6.0",
diff --git a/src/commands/script.json b/src/commands/script.json
index 16e307a3c..1d420c138 100644
--- a/src/commands/script.json
+++ b/src/commands/script.json
@@ -1,6 +1,6 @@
{
"SCRIPT": {
- "summary": "A container for Lua scripts management commands",
+ "summary": "A container for Lua scripts management commands.",
"complexity": "Depends on subcommand.",
"group": "scripting",
"since": "2.6.0",
diff --git a/src/commands/sdiff.json b/src/commands/sdiff.json
index ce7846c46..ac04d0349 100644
--- a/src/commands/sdiff.json
+++ b/src/commands/sdiff.json
@@ -1,6 +1,6 @@
{
"SDIFF": {
- "summary": "Subtract multiple sets",
+ "summary": "Returns the difference of multiple sets.",
"complexity": "O(N) where N is the total number of elements in all given sets.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/sdiffstore.json b/src/commands/sdiffstore.json
index 8ba88e627..94b2d242d 100644
--- a/src/commands/sdiffstore.json
+++ b/src/commands/sdiffstore.json
@@ -1,6 +1,6 @@
{
"SDIFFSTORE": {
- "summary": "Subtract multiple sets and store the resulting set in a key",
+ "summary": "Stores the difference of multiple sets in a key.",
"complexity": "O(N) where N is the total number of elements in all given sets.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/select.json b/src/commands/select.json
index 0f68cde80..5cf8634a9 100644
--- a/src/commands/select.json
+++ b/src/commands/select.json
@@ -1,6 +1,6 @@
{
"SELECT": {
- "summary": "Change the selected database for the current connection",
+ "summary": "Changes the selected database.",
"complexity": "O(1)",
"group": "connection",
"since": "1.0.0",
diff --git a/src/commands/sentinel-ckquorum.json b/src/commands/sentinel-ckquorum.json
index df0a0032e..cdd6cd197 100644
--- a/src/commands/sentinel-ckquorum.json
+++ b/src/commands/sentinel-ckquorum.json
@@ -1,6 +1,6 @@
{
"CKQUORUM": {
- "summary": "Check for a Sentinel quorum",
+ "summary": "Checks for a Redis Sentinel quorum.",
"group": "sentinel",
"since": "2.8.4",
"arity": 3,
diff --git a/src/commands/sentinel-config.json b/src/commands/sentinel-config.json
index 2369ec1fe..ecc317603 100644
--- a/src/commands/sentinel-config.json
+++ b/src/commands/sentinel-config.json
@@ -1,6 +1,6 @@
{
"CONFIG": {
- "summary": "Configure Sentinel",
+ "summary": "Configures Redis Sentinel.",
"complexity": "O(1)",
"group": "sentinel",
"since": "6.2.0",
diff --git a/src/commands/sentinel-debug.json b/src/commands/sentinel-debug.json
index dac2f6b60..186b1df9d 100644
--- a/src/commands/sentinel-debug.json
+++ b/src/commands/sentinel-debug.json
@@ -1,6 +1,6 @@
{
"DEBUG": {
- "summary": "List or update the current configurable parameters",
+ "summary": "Lists or updates the current configurable parameters of Redis Sentinel.",
"complexity": "O(N) where N is the number of configurable parameters",
"group": "sentinel",
"since": "7.0.0",
diff --git a/src/commands/sentinel-failover.json b/src/commands/sentinel-failover.json
index 87f9c4aca..8f5037589 100644
--- a/src/commands/sentinel-failover.json
+++ b/src/commands/sentinel-failover.json
@@ -1,6 +1,6 @@
{
"FAILOVER": {
- "summary": "Force a failover",
+ "summary": "Forces a Redis Sentinel failover.",
"group": "sentinel",
"since": "2.8.4",
"arity": 3,
diff --git a/src/commands/sentinel-flushconfig.json b/src/commands/sentinel-flushconfig.json
index 117109f06..b2fa5decf 100644
--- a/src/commands/sentinel-flushconfig.json
+++ b/src/commands/sentinel-flushconfig.json
@@ -1,6 +1,6 @@
{
"FLUSHCONFIG": {
- "summary": "Rewrite configuration file",
+ "summary": "Rewrites the Redis Sentinel configuration file.",
"complexity": "O(1)",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-get-master-addr-by-name.json b/src/commands/sentinel-get-master-addr-by-name.json
index 3dc307867..998f95ec9 100644
--- a/src/commands/sentinel-get-master-addr-by-name.json
+++ b/src/commands/sentinel-get-master-addr-by-name.json
@@ -1,6 +1,6 @@
{
"GET-MASTER-ADDR-BY-NAME": {
- "summary": "Get port and address of a master",
+ "summary": "Returns the port and address of a master Redis instance.",
"complexity": "O(1)",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-help.json b/src/commands/sentinel-help.json
index 5e3e9a712..d60145016 100644
--- a/src/commands/sentinel-help.json
+++ b/src/commands/sentinel-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "sentinel",
"since": "6.2.0",
diff --git a/src/commands/sentinel-info-cache.json b/src/commands/sentinel-info-cache.json
index 5c7855663..29af975bc 100644
--- a/src/commands/sentinel-info-cache.json
+++ b/src/commands/sentinel-info-cache.json
@@ -1,6 +1,6 @@
{
"INFO-CACHE": {
- "summary": "Get cached INFO from the instances in the deployment",
+ "summary": "Returns the cached `INFO` replies from the deployment's instances.",
"complexity": "O(N) where N is the number of instances",
"group": "sentinel",
"since": "3.2.0",
diff --git a/src/commands/sentinel-is-master-down-by-addr.json b/src/commands/sentinel-is-master-down-by-addr.json
index b0ca319f2..a13e96b79 100644
--- a/src/commands/sentinel-is-master-down-by-addr.json
+++ b/src/commands/sentinel-is-master-down-by-addr.json
@@ -1,6 +1,6 @@
{
"IS-MASTER-DOWN-BY-ADDR": {
- "summary": "Check if a master is down",
+ "summary": "Determines whether a master Redis instance is down.",
"complexity": "O(1)",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-master.json b/src/commands/sentinel-master.json
index 46d6d950a..8ca446d49 100644
--- a/src/commands/sentinel-master.json
+++ b/src/commands/sentinel-master.json
@@ -1,6 +1,6 @@
{
"MASTER": {
- "summary": "Shows the state of a master",
+ "summary": "Returns the state of a master Redis instance.",
"complexity": "O(1)",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-masters.json b/src/commands/sentinel-masters.json
index abfb0b5bf..0b6e15b63 100644
--- a/src/commands/sentinel-masters.json
+++ b/src/commands/sentinel-masters.json
@@ -1,6 +1,6 @@
{
"MASTERS": {
- "summary": "List the monitored masters",
+ "summary": "Returns a list of monitored Redis masters.",
"complexity": "O(N) where N is the number of masters",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-monitor.json b/src/commands/sentinel-monitor.json
index 2ea9aff58..cf6b4eebf 100644
--- a/src/commands/sentinel-monitor.json
+++ b/src/commands/sentinel-monitor.json
@@ -1,6 +1,6 @@
{
"MONITOR": {
- "summary": "Start monitoring",
+ "summary": "Starts monitoring.",
"complexity": "O(1)",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-myid.json b/src/commands/sentinel-myid.json
index 1f8585942..a49c78bd9 100644
--- a/src/commands/sentinel-myid.json
+++ b/src/commands/sentinel-myid.json
@@ -1,6 +1,6 @@
{
"MYID": {
- "summary": "Get the Sentinel instance ID",
+ "summary": "Returns the Redis Sentinel instance ID.",
"complexity": "O(1)",
"group": "sentinel",
"since": "6.2.0",
diff --git a/src/commands/sentinel-pending-scripts.json b/src/commands/sentinel-pending-scripts.json
index 6ef33ec69..141343149 100644
--- a/src/commands/sentinel-pending-scripts.json
+++ b/src/commands/sentinel-pending-scripts.json
@@ -1,6 +1,6 @@
{
"PENDING-SCRIPTS": {
- "summary": "Get information about pending scripts",
+ "summary": "Returns information about pending scripts for Redis Sentinel.",
"group": "sentinel",
"since": "2.8.4",
"arity": 2,
diff --git a/src/commands/sentinel-remove.json b/src/commands/sentinel-remove.json
index d79f60e6c..1fe084f42 100644
--- a/src/commands/sentinel-remove.json
+++ b/src/commands/sentinel-remove.json
@@ -1,6 +1,6 @@
{
"REMOVE": {
- "summary": "Stop monitoring",
+ "summary": "Stops monitoring.",
"complexity": "O(1)",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-replicas.json b/src/commands/sentinel-replicas.json
index 454fcfb91..09d88f2d0 100644
--- a/src/commands/sentinel-replicas.json
+++ b/src/commands/sentinel-replicas.json
@@ -1,6 +1,6 @@
{
"REPLICAS": {
- "summary": "List the monitored replicas",
+ "summary": "Returns a list of the monitored Redis replicas.",
"complexity": "O(N) where N is the number of replicas",
"group": "sentinel",
"since": "5.0.0",
diff --git a/src/commands/sentinel-reset.json b/src/commands/sentinel-reset.json
index 9c60c6be7..14ccbd5a1 100644
--- a/src/commands/sentinel-reset.json
+++ b/src/commands/sentinel-reset.json
@@ -1,6 +1,6 @@
{
"RESET": {
- "summary": "Reset masters by name pattern",
+ "summary": "Resets Redis masters by name matching a pattern.",
"complexity": "O(N) where N is the number of monitored masters",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-sentinels.json b/src/commands/sentinel-sentinels.json
index 01319ce83..3a2c7362a 100644
--- a/src/commands/sentinel-sentinels.json
+++ b/src/commands/sentinel-sentinels.json
@@ -1,6 +1,6 @@
{
"SENTINELS": {
- "summary": "List the Sentinel instances",
+ "summary": "Returns a list of Sentinel instances.",
"complexity": "O(N) where N is the number of Sentinels",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-set.json b/src/commands/sentinel-set.json
index 10dcc5735..3e8619611 100644
--- a/src/commands/sentinel-set.json
+++ b/src/commands/sentinel-set.json
@@ -1,6 +1,6 @@
{
"SET": {
- "summary": "Change the configuration of a monitored master",
+ "summary": "Changes the configuration of a monitored Redis master.",
"complexity": "O(1)",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/sentinel-simulate-failure.json b/src/commands/sentinel-simulate-failure.json
index 4912a8b70..00aad668d 100644
--- a/src/commands/sentinel-simulate-failure.json
+++ b/src/commands/sentinel-simulate-failure.json
@@ -1,6 +1,6 @@
{
"SIMULATE-FAILURE": {
- "summary": "Simulate failover scenarios",
+ "summary": "Simulates failover scenarios.",
"group": "sentinel",
"since": "3.2.0",
"arity": -3,
diff --git a/src/commands/sentinel-slaves.json b/src/commands/sentinel-slaves.json
index bce5c7692..83ee44d16 100644
--- a/src/commands/sentinel-slaves.json
+++ b/src/commands/sentinel-slaves.json
@@ -1,7 +1,7 @@
{
"SLAVES": {
- "summary": "List the monitored slaves",
- "complexity": "O(N) where N is the number of slaves",
+ "summary": "Returns a list of the monitored replicas.",
+ "complexity": "O(N) where N is the number of replicas.",
"group": "sentinel",
"since": "2.8.0",
"arity": 3,
diff --git a/src/commands/sentinel.json b/src/commands/sentinel.json
index 81466e2dd..c14d5a30c 100644
--- a/src/commands/sentinel.json
+++ b/src/commands/sentinel.json
@@ -1,6 +1,6 @@
{
"SENTINEL": {
- "summary": "A container for Sentinel commands",
+ "summary": "A container for Redis Sentinel commands.",
"complexity": "Depends on subcommand.",
"group": "sentinel",
"since": "2.8.4",
diff --git a/src/commands/set.json b/src/commands/set.json
index 3c6c06ff4..8236bc7bb 100644
--- a/src/commands/set.json
+++ b/src/commands/set.json
@@ -1,6 +1,6 @@
{
"SET": {
- "summary": "Set the string value of a key",
+ "summary": "Sets the string value of a key, ignoring its type. The key is created if it doesn't exist.",
"complexity": "O(1)",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/setbit.json b/src/commands/setbit.json
index bf1843078..a1f6726aa 100644
--- a/src/commands/setbit.json
+++ b/src/commands/setbit.json
@@ -1,6 +1,6 @@
{
"SETBIT": {
- "summary": "Sets or clears the bit at offset in the string value stored at key",
+ "summary": "Sets or clears the bit at offset of the string value. Creates the key if it doesn't exist.",
"complexity": "O(1)",
"group": "bitmap",
"since": "2.2.0",
diff --git a/src/commands/setex.json b/src/commands/setex.json
index a45561a21..1543a41d7 100644
--- a/src/commands/setex.json
+++ b/src/commands/setex.json
@@ -1,6 +1,6 @@
{
"SETEX": {
- "summary": "Set the value and expiration of a key",
+ "summary": "Sets the string value and expiration time of a key. Creates the key if it doesn't exist.",
"complexity": "O(1)",
"group": "string",
"since": "2.0.0",
diff --git a/src/commands/setnx.json b/src/commands/setnx.json
index d026272bb..7459724e3 100644
--- a/src/commands/setnx.json
+++ b/src/commands/setnx.json
@@ -1,6 +1,6 @@
{
"SETNX": {
- "summary": "Set the value of a key, only if the key does not exist",
+ "summary": "Set the string value of a key only when the key doesn't exist.",
"complexity": "O(1)",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/setrange.json b/src/commands/setrange.json
index f9d61dfa3..32a8c521a 100644
--- a/src/commands/setrange.json
+++ b/src/commands/setrange.json
@@ -1,6 +1,6 @@
{
"SETRANGE": {
- "summary": "Overwrite part of a string at key starting at the specified offset",
+ "summary": "Overwrites a part of a string value with another by an offset. Creates the key if it doesn't exist.",
"complexity": "O(1), not counting the time taken to copy the new string in place. Usually, this string is very small so the amortized complexity is O(1). Otherwise, complexity is O(M) with M being the length of the value argument.",
"group": "string",
"since": "2.2.0",
diff --git a/src/commands/shutdown.json b/src/commands/shutdown.json
index 033a7012e..a9e45d42d 100644
--- a/src/commands/shutdown.json
+++ b/src/commands/shutdown.json
@@ -1,6 +1,6 @@
{
"SHUTDOWN": {
- "summary": "Synchronously save the dataset to disk and then shut down the server",
+ "summary": "Synchronously saves the database(s) to disk and shuts down the Redis server.",
"complexity": "O(N) when saving, where N is the total number of keys in all databases when saving data, otherwise O(1)",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/sinter.json b/src/commands/sinter.json
index f0cd95de0..ad5ac918b 100644
--- a/src/commands/sinter.json
+++ b/src/commands/sinter.json
@@ -1,6 +1,6 @@
{
"SINTER": {
- "summary": "Intersect multiple sets",
+ "summary": "Returns the intersect of multiple sets.",
"complexity": "O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/sintercard.json b/src/commands/sintercard.json
index 16769850d..9a79183fb 100644
--- a/src/commands/sintercard.json
+++ b/src/commands/sintercard.json
@@ -1,6 +1,6 @@
{
"SINTERCARD": {
- "summary": "Intersect multiple sets and return the cardinality of the result",
+ "summary": "Returns the number of members of the intersect of multiple sets.",
"complexity": "O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.",
"group": "set",
"since": "7.0.0",
diff --git a/src/commands/sinterstore.json b/src/commands/sinterstore.json
index 60a8db52a..28ccfff69 100644
--- a/src/commands/sinterstore.json
+++ b/src/commands/sinterstore.json
@@ -1,6 +1,6 @@
{
"SINTERSTORE": {
- "summary": "Intersect multiple sets and store the resulting set in a key",
+ "summary": "Stores the intersect of multiple sets in a key.",
"complexity": "O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/sismember.json b/src/commands/sismember.json
index cb81682cc..51ef920be 100644
--- a/src/commands/sismember.json
+++ b/src/commands/sismember.json
@@ -1,6 +1,6 @@
{
"SISMEMBER": {
- "summary": "Determine if a given value is a member of a set",
+ "summary": "Determines whether a member belongs to a set.",
"complexity": "O(1)",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/slaveof.json b/src/commands/slaveof.json
index f9266fabe..9790730b2 100644
--- a/src/commands/slaveof.json
+++ b/src/commands/slaveof.json
@@ -1,6 +1,6 @@
{
"SLAVEOF": {
- "summary": "Make the server a replica of another instance, or promote it as master.",
+ "summary": "Sets a Redis server as a replica of another, or promotes it to being a master.",
"complexity": "O(1)",
"group": "server",
"since": "1.0.0",
diff --git a/src/commands/slowlog-get.json b/src/commands/slowlog-get.json
index e4652e895..ffc54b545 100644
--- a/src/commands/slowlog-get.json
+++ b/src/commands/slowlog-get.json
@@ -1,6 +1,6 @@
{
"GET": {
- "summary": "Get the slow log's entries",
+ "summary": "Returns the slow log's entries.",
"complexity": "O(N) where N is the number of entries returned",
"group": "server",
"since": "2.2.12",
diff --git a/src/commands/slowlog-len.json b/src/commands/slowlog-len.json
index f8c7798cf..717a8ad41 100644
--- a/src/commands/slowlog-len.json
+++ b/src/commands/slowlog-len.json
@@ -1,6 +1,6 @@
{
"LEN": {
- "summary": "Get the slow log's length",
+ "summary": "Returns the number of entries in the slow log.",
"complexity": "O(1)",
"group": "server",
"since": "2.2.12",
diff --git a/src/commands/slowlog-reset.json b/src/commands/slowlog-reset.json
index c4006e371..cfc1e4da7 100644
--- a/src/commands/slowlog-reset.json
+++ b/src/commands/slowlog-reset.json
@@ -1,6 +1,6 @@
{
"RESET": {
- "summary": "Clear all entries from the slow log",
+ "summary": "Clears all entries from the slow log.",
"complexity": "O(N) where N is the number of entries in the slowlog",
"group": "server",
"since": "2.2.12",
diff --git a/src/commands/slowlog.json b/src/commands/slowlog.json
index fab266c1d..1b9526b19 100644
--- a/src/commands/slowlog.json
+++ b/src/commands/slowlog.json
@@ -1,6 +1,6 @@
{
"SLOWLOG": {
- "summary": "A container for slow log commands",
+ "summary": "A container for slow log commands.",
"complexity": "Depends on subcommand.",
"group": "server",
"since": "2.2.12",
diff --git a/src/commands/smembers.json b/src/commands/smembers.json
index ff5969f51..c5114089b 100644
--- a/src/commands/smembers.json
+++ b/src/commands/smembers.json
@@ -1,6 +1,6 @@
{
"SMEMBERS": {
- "summary": "Get all the members in a set",
+ "summary": "Returns all members of a set.",
"complexity": "O(N) where N is the set cardinality.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/smismember.json b/src/commands/smismember.json
index d78787900..dbc1ddc96 100644
--- a/src/commands/smismember.json
+++ b/src/commands/smismember.json
@@ -1,6 +1,6 @@
{
"SMISMEMBER": {
- "summary": "Returns the membership associated with the given elements for a set",
+ "summary": "Determines whether multiple members belong to a set.",
"complexity": "O(N) where N is the number of elements being checked for membership",
"group": "set",
"since": "6.2.0",
diff --git a/src/commands/smove.json b/src/commands/smove.json
index df282b2bb..9521bb364 100644
--- a/src/commands/smove.json
+++ b/src/commands/smove.json
@@ -1,6 +1,6 @@
{
"SMOVE": {
- "summary": "Move a member from one set to another",
+ "summary": "Moves a member from one set to another.",
"complexity": "O(1)",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/sort.json b/src/commands/sort.json
index 6e1b2626e..5e117c950 100644
--- a/src/commands/sort.json
+++ b/src/commands/sort.json
@@ -1,6 +1,6 @@
{
"SORT": {
- "summary": "Sort the elements in a list, set or sorted set",
+ "summary": "Sorts the elements in a list, a set, or a sorted set, optionally storing the result.",
"complexity": "O(N+M*log(M)) where N is the number of elements in the list or set to sort, and M the number of returned elements. When the elements are not sorted, complexity is O(N).",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/sort_ro.json b/src/commands/sort_ro.json
index 27af54c99..8b32b17fa 100644
--- a/src/commands/sort_ro.json
+++ b/src/commands/sort_ro.json
@@ -1,6 +1,6 @@
{
"SORT_RO": {
- "summary": "Sort the elements in a list, set or sorted set. Read-only variant of SORT.",
+ "summary": "Returns the sorted elements of a list, a set, or a sorted set.",
"complexity": "O(N+M*log(M)) where N is the number of elements in the list or set to sort, and M the number of returned elements. When the elements are not sorted, complexity is O(N).",
"group": "generic",
"since": "7.0.0",
diff --git a/src/commands/spop.json b/src/commands/spop.json
index a116c8473..c3954bef5 100644
--- a/src/commands/spop.json
+++ b/src/commands/spop.json
@@ -1,6 +1,6 @@
{
"SPOP": {
- "summary": "Remove and return one or multiple random members from a set",
+ "summary": "Returns one or more random members from a set after removing them. Deletes the set if the last member was popped.",
"complexity": "Without the count argument O(1), otherwise O(N) where N is the value of the passed count.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/srem.json b/src/commands/srem.json
index ec9ab41db..d7797cf0f 100644
--- a/src/commands/srem.json
+++ b/src/commands/srem.json
@@ -1,6 +1,6 @@
{
"SREM": {
- "summary": "Remove one or more members from a set",
+ "summary": "Removes one or more members from a set. Deletes the set if the last member was removed.",
"complexity": "O(N) where N is the number of members to be removed.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/sscan.json b/src/commands/sscan.json
index f0d89e224..b221c94cf 100644
--- a/src/commands/sscan.json
+++ b/src/commands/sscan.json
@@ -1,6 +1,6 @@
{
"SSCAN": {
- "summary": "Incrementally iterate Set elements",
+ "summary": "Iterates over members of a set.",
"complexity": "O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.",
"group": "set",
"since": "2.8.0",
diff --git a/src/commands/ssubscribe.json b/src/commands/ssubscribe.json
index a63d520f1..46373d541 100644
--- a/src/commands/ssubscribe.json
+++ b/src/commands/ssubscribe.json
@@ -1,6 +1,6 @@
{
"SSUBSCRIBE": {
- "summary": "Listen for messages published to the given shard channels",
+ "summary": "Listens for messages published to shard channels.",
"complexity": "O(N) where N is the number of shard channels to subscribe to.",
"group": "pubsub",
"since": "7.0.0",
diff --git a/src/commands/strlen.json b/src/commands/strlen.json
index 3cdce4807..395a02dfa 100644
--- a/src/commands/strlen.json
+++ b/src/commands/strlen.json
@@ -1,6 +1,6 @@
{
"STRLEN": {
- "summary": "Get the length of the value stored in a key",
+ "summary": "Returns the length of a string value.",
"complexity": "O(1)",
"group": "string",
"since": "2.2.0",
diff --git a/src/commands/subscribe.json b/src/commands/subscribe.json
index fa6ac076a..bdf12b726 100644
--- a/src/commands/subscribe.json
+++ b/src/commands/subscribe.json
@@ -1,6 +1,6 @@
{
"SUBSCRIBE": {
- "summary": "Listen for messages published to the given channels",
+ "summary": "Listens for messages published to channels.",
"complexity": "O(N) where N is the number of channels to subscribe to.",
"group": "pubsub",
"since": "2.0.0",
diff --git a/src/commands/substr.json b/src/commands/substr.json
index c1134ce66..124418320 100644
--- a/src/commands/substr.json
+++ b/src/commands/substr.json
@@ -1,6 +1,6 @@
{
"SUBSTR": {
- "summary": "Get a substring of the string stored at a key",
+ "summary": "Returns a substring from a string value.",
"complexity": "O(N) where N is the length of the returned string. The complexity is ultimately determined by the returned length, but because creating a substring from an existing string is very cheap, it can be considered O(1) for small strings.",
"group": "string",
"since": "1.0.0",
diff --git a/src/commands/sunion.json b/src/commands/sunion.json
index 3873a6a39..56f2b9e9b 100644
--- a/src/commands/sunion.json
+++ b/src/commands/sunion.json
@@ -1,6 +1,6 @@
{
"SUNION": {
- "summary": "Add multiple sets",
+ "summary": "Returns the union of multiple sets.",
"complexity": "O(N) where N is the total number of elements in all given sets.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/sunionstore.json b/src/commands/sunionstore.json
index b703904ac..94d4e16e9 100644
--- a/src/commands/sunionstore.json
+++ b/src/commands/sunionstore.json
@@ -1,6 +1,6 @@
{
"SUNIONSTORE": {
- "summary": "Add multiple sets and store the resulting set in a key",
+ "summary": "Stores the union of multiple sets in a key.",
"complexity": "O(N) where N is the total number of elements in all given sets.",
"group": "set",
"since": "1.0.0",
diff --git a/src/commands/sunsubscribe.json b/src/commands/sunsubscribe.json
index df9ae9cac..7965a05ea 100644
--- a/src/commands/sunsubscribe.json
+++ b/src/commands/sunsubscribe.json
@@ -1,6 +1,6 @@
{
"SUNSUBSCRIBE": {
- "summary": "Stop listening for messages posted to the given shard channels",
+ "summary": "Stops listening to messages posted to shard channels.",
"complexity": "O(N) where N is the number of clients already subscribed to a shard channel.",
"group": "pubsub",
"since": "7.0.0",
diff --git a/src/commands/swapdb.json b/src/commands/swapdb.json
index 7ed001871..e98bc768b 100644
--- a/src/commands/swapdb.json
+++ b/src/commands/swapdb.json
@@ -1,6 +1,6 @@
{
"SWAPDB": {
- "summary": "Swaps two Redis databases",
+ "summary": "Swaps two Redis databases.",
"complexity": "O(N) where N is the count of clients watching or blocking on keys from both databases.",
"group": "server",
"since": "4.0.0",
diff --git a/src/commands/sync.json b/src/commands/sync.json
index 85672d6ed..e18c337d8 100644
--- a/src/commands/sync.json
+++ b/src/commands/sync.json
@@ -1,6 +1,6 @@
{
"SYNC": {
- "summary": "Internal command used for replication",
+ "summary": "An internal command used in replication.",
"group": "server",
"since": "1.0.0",
"arity": 1,
diff --git a/src/commands/time.json b/src/commands/time.json
index 540190f55..3161d3fcd 100644
--- a/src/commands/time.json
+++ b/src/commands/time.json
@@ -1,6 +1,6 @@
{
"TIME": {
- "summary": "Return the current server time",
+ "summary": "Returns the server time.",
"complexity": "O(1)",
"group": "server",
"since": "2.6.0",
diff --git a/src/commands/touch.json b/src/commands/touch.json
index b2a2894c9..fd1dc61c3 100644
--- a/src/commands/touch.json
+++ b/src/commands/touch.json
@@ -1,6 +1,6 @@
{
"TOUCH": {
- "summary": "Alters the last access time of a key(s). Returns the number of existing keys specified.",
+ "summary": "Returns the number of existing keys out of those specified after updating the time they were last accessed.",
"complexity": "O(N) where N is the number of keys that will be touched.",
"group": "generic",
"since": "3.2.1",
diff --git a/src/commands/ttl.json b/src/commands/ttl.json
index f4d957825..9f5ab89e1 100644
--- a/src/commands/ttl.json
+++ b/src/commands/ttl.json
@@ -1,6 +1,6 @@
{
"TTL": {
- "summary": "Get the time to live for a key in seconds",
+ "summary": "Returns the expiration time in seconds of a key.",
"complexity": "O(1)",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/type.json b/src/commands/type.json
index b4a4e766f..e8353b9f4 100644
--- a/src/commands/type.json
+++ b/src/commands/type.json
@@ -1,6 +1,6 @@
{
"TYPE": {
- "summary": "Determine the type stored at key",
+ "summary": "Determines the type of value stored at a key.",
"complexity": "O(1)",
"group": "generic",
"since": "1.0.0",
diff --git a/src/commands/unlink.json b/src/commands/unlink.json
index 559f1e96b..a05704a1b 100644
--- a/src/commands/unlink.json
+++ b/src/commands/unlink.json
@@ -1,6 +1,6 @@
{
"UNLINK": {
- "summary": "Delete a key asynchronously in another thread. Otherwise it is just as DEL, but non blocking.",
+ "summary": "Asynchronously deletes one or more keys.",
"complexity": "O(1) for each key removed regardless of its size. Then the command does O(N) work in a different thread in order to reclaim memory, where N is the number of allocations the deleted objects where composed of.",
"group": "generic",
"since": "4.0.0",
diff --git a/src/commands/unsubscribe.json b/src/commands/unsubscribe.json
index d98aaa278..530facde4 100644
--- a/src/commands/unsubscribe.json
+++ b/src/commands/unsubscribe.json
@@ -1,6 +1,6 @@
{
"UNSUBSCRIBE": {
- "summary": "Stop listening for messages posted to the given channels",
+ "summary": "Stops listening to messages posted to channels.",
"complexity": "O(N) where N is the number of clients already subscribed to a channel.",
"group": "pubsub",
"since": "2.0.0",
diff --git a/src/commands/unwatch.json b/src/commands/unwatch.json
index 256411f1d..28cc5f0db 100644
--- a/src/commands/unwatch.json
+++ b/src/commands/unwatch.json
@@ -1,6 +1,6 @@
{
"UNWATCH": {
- "summary": "Forget about all watched keys",
+ "summary": "Forgets about watched keys of a transaction.",
"complexity": "O(1)",
"group": "transactions",
"since": "2.2.0",
diff --git a/src/commands/wait.json b/src/commands/wait.json
index 92ec4af3e..f936b9242 100644
--- a/src/commands/wait.json
+++ b/src/commands/wait.json
@@ -1,6 +1,6 @@
{
"WAIT": {
- "summary": "Wait for the synchronous replication of all the write commands sent in the context of the current connection",
+ "summary": "Blocks until the asynchronous replication of all preceding write commands sent by the connection is completed.",
"complexity": "O(1)",
"group": "generic",
"since": "3.0.0",
diff --git a/src/commands/waitaof.json b/src/commands/waitaof.json
index bea18cae9..735a8f261 100644
--- a/src/commands/waitaof.json
+++ b/src/commands/waitaof.json
@@ -1,6 +1,6 @@
{
"WAITAOF": {
- "summary": "Wait for all write commands sent in the context of the current connection to be synced to AOF of local host and/or replicas",
+ "summary": "Blocks until all of the preceding write commands sent by the connection are written to the append-only file of the master and/or replicas.",
"complexity": "O(1)",
"group": "generic",
"since": "7.2.0",
diff --git a/src/commands/watch.json b/src/commands/watch.json
index 3f16f7360..9faab2b91 100644
--- a/src/commands/watch.json
+++ b/src/commands/watch.json
@@ -1,6 +1,6 @@
{
"WATCH": {
- "summary": "Watch the given keys to determine execution of the MULTI/EXEC block",
+ "summary": "Monitors changes to keys to determine the execution of a transaction.",
"complexity": "O(1) for every key.",
"group": "transactions",
"since": "2.2.0",
diff --git a/src/commands/xack.json b/src/commands/xack.json
index f7791f270..4a1e92b25 100644
--- a/src/commands/xack.json
+++ b/src/commands/xack.json
@@ -1,6 +1,6 @@
{
"XACK": {
- "summary": "Marks a pending message as correctly processed, effectively removing it from the pending entries list of the consumer group. Return value of the command is the number of messages successfully acknowledged, that is, the IDs we were actually able to resolve in the PEL.",
+ "summary": "Returns the number of messages that were successfully acknowledged by the consumer group member of a stream.",
"complexity": "O(1) for each message ID processed.",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xadd.json b/src/commands/xadd.json
index 72f864d92..21880524e 100644
--- a/src/commands/xadd.json
+++ b/src/commands/xadd.json
@@ -1,6 +1,6 @@
{
"XADD": {
- "summary": "Appends a new entry to a stream",
+ "summary": "Appends a new message to a stream. Creates the key if it doesn't exist.",
"complexity": "O(1) when adding a new entry, O(N) when trimming where N being the number of entries evicted.",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xautoclaim.json b/src/commands/xautoclaim.json
index f23386e4c..2e8e9c183 100644
--- a/src/commands/xautoclaim.json
+++ b/src/commands/xautoclaim.json
@@ -1,6 +1,6 @@
{
"XAUTOCLAIM": {
- "summary": "Changes (or acquires) ownership of messages in a consumer group, as if the messages were delivered to the specified consumer.",
+ "summary": "Changes, or acquires, ownership of messages in a consumer group, as if the messages were delivered to as consumer group member.",
"complexity": "O(1) if COUNT is small.",
"group": "stream",
"since": "6.2.0",
diff --git a/src/commands/xclaim.json b/src/commands/xclaim.json
index 950c215b9..5c4474606 100644
--- a/src/commands/xclaim.json
+++ b/src/commands/xclaim.json
@@ -1,6 +1,6 @@
{
"XCLAIM": {
- "summary": "Changes (or acquires) ownership of a message in a consumer group, as if the message was delivered to the specified consumer.",
+ "summary": "Changes, or acquires, ownership of a message in a consumer group, as if the message was delivered a consumer group member.",
"complexity": "O(log N) with N being the number of messages in the PEL of the consumer group.",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xdel.json b/src/commands/xdel.json
index 5854f5084..5cf4a700a 100644
--- a/src/commands/xdel.json
+++ b/src/commands/xdel.json
@@ -1,6 +1,6 @@
{
"XDEL": {
- "summary": "Removes the specified entries from the stream. Returns the number of items actually deleted, that may be different from the number of IDs passed in case certain IDs do not exist.",
+ "summary": "Returns the number of messages after removing them from a stream.",
"complexity": "O(1) for each single item to delete in the stream, regardless of the stream size.",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xgroup-create.json b/src/commands/xgroup-create.json
index 16a8b99eb..6b11a1f00 100644
--- a/src/commands/xgroup-create.json
+++ b/src/commands/xgroup-create.json
@@ -1,6 +1,6 @@
{
"CREATE": {
- "summary": "Create a consumer group.",
+ "summary": "Creates a consumer group.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xgroup-createconsumer.json b/src/commands/xgroup-createconsumer.json
index 764b26447..2f3d6a9bb 100644
--- a/src/commands/xgroup-createconsumer.json
+++ b/src/commands/xgroup-createconsumer.json
@@ -1,6 +1,6 @@
{
"CREATECONSUMER": {
- "summary": "Create a consumer in a consumer group.",
+ "summary": "Creates a consumer in a consumer group.",
"complexity": "O(1)",
"group": "stream",
"since": "6.2.0",
diff --git a/src/commands/xgroup-delconsumer.json b/src/commands/xgroup-delconsumer.json
index c68f0b567..12244f8d5 100644
--- a/src/commands/xgroup-delconsumer.json
+++ b/src/commands/xgroup-delconsumer.json
@@ -1,6 +1,6 @@
{
"DELCONSUMER": {
- "summary": "Delete a consumer from a consumer group.",
+ "summary": "Deletes a consumer from a consumer group.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xgroup-destroy.json b/src/commands/xgroup-destroy.json
index 60a481a80..c9affbdb4 100644
--- a/src/commands/xgroup-destroy.json
+++ b/src/commands/xgroup-destroy.json
@@ -1,6 +1,6 @@
{
"DESTROY": {
- "summary": "Destroy a consumer group.",
+ "summary": "Destroys a consumer group.",
"complexity": "O(N) where N is the number of entries in the group's pending entries list (PEL).",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xgroup-help.json b/src/commands/xgroup-help.json
index d4e9d4ad3..3d2a73862 100644
--- a/src/commands/xgroup-help.json
+++ b/src/commands/xgroup-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xgroup-setid.json b/src/commands/xgroup-setid.json
index 89bbc2a6b..76a3c79ef 100644
--- a/src/commands/xgroup-setid.json
+++ b/src/commands/xgroup-setid.json
@@ -1,6 +1,6 @@
{
"SETID": {
- "summary": "Set a consumer group to an arbitrary last delivered ID value.",
+ "summary": "Sets the last-delivered ID of a consumer group.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xgroup.json b/src/commands/xgroup.json
index 2af53cfcc..4910b7c05 100644
--- a/src/commands/xgroup.json
+++ b/src/commands/xgroup.json
@@ -1,6 +1,6 @@
{
"XGROUP": {
- "summary": "A container for consumer groups commands",
+ "summary": "A container for consumer groups commands.",
"complexity": "Depends on subcommand.",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xinfo-consumers.json b/src/commands/xinfo-consumers.json
index 98274bdf6..b507e8e59 100644
--- a/src/commands/xinfo-consumers.json
+++ b/src/commands/xinfo-consumers.json
@@ -1,6 +1,6 @@
{
"CONSUMERS": {
- "summary": "List the consumers in a consumer group",
+ "summary": "Returns a list of the consumers in a consumer group.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xinfo-groups.json b/src/commands/xinfo-groups.json
index 4196773f3..a9cbe8eba 100644
--- a/src/commands/xinfo-groups.json
+++ b/src/commands/xinfo-groups.json
@@ -1,6 +1,6 @@
{
"GROUPS": {
- "summary": "List the consumer groups of a stream",
+ "summary": "Returns a list of the consumer groups of a stream.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xinfo-help.json b/src/commands/xinfo-help.json
index 3441ace14..d4cbe3d34 100644
--- a/src/commands/xinfo-help.json
+++ b/src/commands/xinfo-help.json
@@ -1,6 +1,6 @@
{
"HELP": {
- "summary": "Show helpful text about the different subcommands",
+ "summary": "Returns helpful text about the different subcommands.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xinfo-stream.json b/src/commands/xinfo-stream.json
index 7db07fb9b..018826f91 100644
--- a/src/commands/xinfo-stream.json
+++ b/src/commands/xinfo-stream.json
@@ -1,6 +1,6 @@
{
"STREAM": {
- "summary": "Get information about a stream",
+ "summary": "Returns information about a stream.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xinfo.json b/src/commands/xinfo.json
index c969e59a7..cc85bf114 100644
--- a/src/commands/xinfo.json
+++ b/src/commands/xinfo.json
@@ -1,6 +1,6 @@
{
"XINFO": {
- "summary": "A container for stream introspection commands",
+ "summary": "A container for stream introspection commands.",
"complexity": "Depends on subcommand.",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xlen.json b/src/commands/xlen.json
index b3a82f774..16ce72cb6 100644
--- a/src/commands/xlen.json
+++ b/src/commands/xlen.json
@@ -1,6 +1,6 @@
{
"XLEN": {
- "summary": "Return the number of entries in a stream",
+ "summary": "Return the number of messages in a stream.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xpending.json b/src/commands/xpending.json
index 04725e1e4..a6df80192 100644
--- a/src/commands/xpending.json
+++ b/src/commands/xpending.json
@@ -1,6 +1,6 @@
{
"XPENDING": {
- "summary": "Return information and entries from a stream consumer group pending entries list, that are messages fetched but never acknowledged.",
+ "summary": "Returns the information and entries from a stream consumer group's pending entries list.",
"complexity": "O(N) with N being the number of elements returned, so asking for a small fixed number of entries per call is O(1). O(M), where M is the total number of entries scanned when used with the IDLE filter. When the command returns just the summary and the list of consumers is small, it runs in O(1) time; otherwise, an additional O(N) time for iterating every consumer.",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xrange.json b/src/commands/xrange.json
index 325a4564a..edfe2ccfd 100644
--- a/src/commands/xrange.json
+++ b/src/commands/xrange.json
@@ -1,6 +1,6 @@
{
"XRANGE": {
- "summary": "Return a range of elements in a stream, with IDs matching the specified IDs interval",
+ "summary": "Returns the messages from a stream within a range of IDs.",
"complexity": "O(N) with N being the number of elements being returned. If N is constant (e.g. always asking for the first 10 elements with COUNT), you can consider it O(1).",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xread.json b/src/commands/xread.json
index e6978794a..3a78ffb22 100644
--- a/src/commands/xread.json
+++ b/src/commands/xread.json
@@ -1,7 +1,6 @@
{
"XREAD": {
- "summary": "Return never seen elements in multiple streams, with IDs greater than the ones reported by the caller for each stream. Can block.",
- "complexity": "For each stream mentioned: O(N) with N being the number of elements being returned, it means that XREAD-ing with a fixed COUNT is O(1). Note that when the BLOCK option is used, XADD will pay O(M) time in order to serve the M clients blocked on the stream getting new data.",
+ "summary": "Returns messages from multiple streams with IDs greater than the ones requested. Blocks until a message is available otherwise.",
"group": "stream",
"since": "5.0.0",
"arity": -4,
diff --git a/src/commands/xreadgroup.json b/src/commands/xreadgroup.json
index 96d7a89ba..c4d24748e 100644
--- a/src/commands/xreadgroup.json
+++ b/src/commands/xreadgroup.json
@@ -1,6 +1,6 @@
{
"XREADGROUP": {
- "summary": "Return new entries from a stream using a consumer group, or access the history of the pending entries for a given consumer. Can block.",
+ "summary": "Returns new or historical messages from a stream for a consumer in agroup. Blocks until a message is available otherwise.",
"complexity": "For each stream mentioned: O(M) with M being the number of elements returned. If M is constant (e.g. always asking for the first 10 elements with COUNT), you can consider it O(1). On the other side when XREADGROUP blocks, XADD will pay the O(N) time in order to serve the N clients blocked on the stream getting new data.",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xrevrange.json b/src/commands/xrevrange.json
index 41798a16c..a0c3e4f3e 100644
--- a/src/commands/xrevrange.json
+++ b/src/commands/xrevrange.json
@@ -1,6 +1,6 @@
{
"XREVRANGE": {
- "summary": "Return a range of elements in a stream, with IDs matching the specified IDs interval, in reverse order (from greater to smaller IDs) compared to XRANGE",
+ "summary": "Returns the messages from a stream within a range of IDs in reverse order.",
"complexity": "O(N) with N being the number of elements returned. If N is constant (e.g. always asking for the first 10 elements with COUNT), you can consider it O(1).",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xsetid.json b/src/commands/xsetid.json
index b69d80c88..460703717 100644
--- a/src/commands/xsetid.json
+++ b/src/commands/xsetid.json
@@ -1,6 +1,6 @@
{
"XSETID": {
- "summary": "An internal command for replicating stream values",
+ "summary": "An internal command for replicating stream values.",
"complexity": "O(1)",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/xtrim.json b/src/commands/xtrim.json
index 6abd4903b..0b79cd468 100644
--- a/src/commands/xtrim.json
+++ b/src/commands/xtrim.json
@@ -1,6 +1,6 @@
{
"XTRIM": {
- "summary": "Trims the stream to (approximately if '~' is passed) a certain size",
+ "summary": "Deletes messages from the beginning of a stream.",
"complexity": "O(N), with N being the number of evicted entries. Constant times are very small however, since entries are organized in macro nodes containing multiple entries that can be released with a single deallocation.",
"group": "stream",
"since": "5.0.0",
diff --git a/src/commands/zadd.json b/src/commands/zadd.json
index e2cbd98c8..d489ee4fa 100644
--- a/src/commands/zadd.json
+++ b/src/commands/zadd.json
@@ -1,6 +1,6 @@
{
"ZADD": {
- "summary": "Add one or more members to a sorted set, or update its score if it already exists",
+ "summary": "Adds one or more members to a sorted set, or updates their scores. Creates the key if it doesn't exist.",
"complexity": "O(log(N)) for each item added, where N is the number of elements in the sorted set.",
"group": "sorted_set",
"since": "1.2.0",
diff --git a/src/commands/zcard.json b/src/commands/zcard.json
index f80a01007..58683a487 100644
--- a/src/commands/zcard.json
+++ b/src/commands/zcard.json
@@ -1,6 +1,6 @@
{
"ZCARD": {
- "summary": "Get the number of members in a sorted set",
+ "summary": "Returns the number of members in a sorted set.",
"complexity": "O(1)",
"group": "sorted_set",
"since": "1.2.0",
diff --git a/src/commands/zcount.json b/src/commands/zcount.json
index 9ad8fdb24..0fdebd7df 100644
--- a/src/commands/zcount.json
+++ b/src/commands/zcount.json
@@ -1,6 +1,6 @@
{
"ZCOUNT": {
- "summary": "Count the members in a sorted set with scores within the given values",
+ "summary": "Returns the count of members in a sorted set that have scores within a range.",
"complexity": "O(log(N)) with N being the number of elements in the sorted set.",
"group": "sorted_set",
"since": "2.0.0",
diff --git a/src/commands/zdiff.json b/src/commands/zdiff.json
index a361e249d..912d5c6d0 100644
--- a/src/commands/zdiff.json
+++ b/src/commands/zdiff.json
@@ -1,6 +1,6 @@
{
"ZDIFF": {
- "summary": "Subtract multiple sorted sets",
+ "summary": "Returns the difference between multiple sorted sets.",
"complexity": "O(L + (N-K)log(N)) worst case where L is the total number of elements in all the sets, N is the size of the first set, and K is the size of the result set.",
"group": "sorted_set",
"since": "6.2.0",
diff --git a/src/commands/zdiffstore.json b/src/commands/zdiffstore.json
index 26f205edc..35b720347 100644
--- a/src/commands/zdiffstore.json
+++ b/src/commands/zdiffstore.json
@@ -1,6 +1,6 @@
{
"ZDIFFSTORE": {
- "summary": "Subtract multiple sorted sets and store the resulting sorted set in a new key",
+ "summary": "Stores the difference of multiple sorted sets in a key.",
"complexity": "O(L + (N-K)log(N)) worst case where L is the total number of elements in all the sets, N is the size of the first set, and K is the size of the result set.",
"group": "sorted_set",
"since": "6.2.0",
diff --git a/src/commands/zincrby.json b/src/commands/zincrby.json
index a3283a3b6..683088327 100644
--- a/src/commands/zincrby.json
+++ b/src/commands/zincrby.json
@@ -1,6 +1,6 @@
{
"ZINCRBY": {
- "summary": "Increment the score of a member in a sorted set",
+ "summary": "Increments the score of a member in a sorted set.",
"complexity": "O(log(N)) where N is the number of elements in the sorted set.",
"group": "sorted_set",
"since": "1.2.0",
diff --git a/src/commands/zinter.json b/src/commands/zinter.json
index d0dd046ed..4828e21d6 100644
--- a/src/commands/zinter.json
+++ b/src/commands/zinter.json
@@ -1,6 +1,6 @@
{
"ZINTER": {
- "summary": "Intersect multiple sorted sets",
+ "summary": "Returns the intersect of multiple sorted sets.",
"complexity": "O(N*K)+O(M*log(M)) worst case with N being the smallest input sorted set, K being the number of input sorted sets and M being the number of elements in the resulting sorted set.",
"group": "sorted_set",
"since": "6.2.0",
diff --git a/src/commands/zintercard.json b/src/commands/zintercard.json
index 732bab830..7fdab3ed6 100644
--- a/src/commands/zintercard.json
+++ b/src/commands/zintercard.json
@@ -1,6 +1,6 @@
{
"ZINTERCARD": {
- "summary": "Intersect multiple sorted sets and return the cardinality of the result",
+ "summary": "Returns the number of members of the intersect of multiple sorted sets.",
"complexity": "O(N*K) worst case with N being the smallest input sorted set, K being the number of input sorted sets.",
"group": "sorted_set",
"since": "7.0.0",
diff --git a/src/commands/zinterstore.json b/src/commands/zinterstore.json
index 32661c564..5bd940c65 100644
--- a/src/commands/zinterstore.json
+++ b/src/commands/zinterstore.json
@@ -1,6 +1,6 @@
{
"ZINTERSTORE": {
- "summary": "Intersect multiple sorted sets and store the resulting sorted set in a new key",
+ "summary": "Stores the intersect of multiple sorted sets in a key.",
"complexity": "O(N*K)+O(M*log(M)) worst case with N being the smallest input sorted set, K being the number of input sorted sets and M being the number of elements in the resulting sorted set.",
"group": "sorted_set",
"since": "2.0.0",
diff --git a/src/commands/zlexcount.json b/src/commands/zlexcount.json
index 5366441a6..8bf2884c9 100644
--- a/src/commands/zlexcount.json
+++ b/src/commands/zlexcount.json
@@ -1,6 +1,6 @@
{
"ZLEXCOUNT": {
- "summary": "Count the number of members in a sorted set between a given lexicographical range",
+ "summary": "Returns the number of members in a sorted set within a lexicographical range.",
"complexity": "O(log(N)) with N being the number of elements in the sorted set.",
"group": "sorted_set",
"since": "2.8.9",
diff --git a/src/commands/zmpop.json b/src/commands/zmpop.json
index 58e710170..86dc3bab2 100644
--- a/src/commands/zmpop.json
+++ b/src/commands/zmpop.json
@@ -1,6 +1,6 @@
{
"ZMPOP": {
- "summary": "Remove and return members with scores in a sorted set",
+ "summary": "Returns the highest- or lowest-scoring members from one or more sorted sets after removing them. Deletes the sorted set if the last member was popped.",
"complexity": "O(K) + O(M*log(N)) where K is the number of provided keys, N being the number of elements in the sorted set, and M being the number of elements popped.",
"group": "sorted_set",
"since": "7.0.0",
diff --git a/src/commands/zmscore.json b/src/commands/zmscore.json
index fa2fba141..6a036fe0b 100644
--- a/src/commands/zmscore.json
+++ b/src/commands/zmscore.json
@@ -1,6 +1,6 @@
{
"ZMSCORE": {
- "summary": "Get the score associated with the given members in a sorted set",
+ "summary": "Returns the score of one or more members in a sorted set.",
"complexity": "O(N) where N is the number of members being requested.",
"group": "sorted_set",
"since": "6.2.0",
diff --git a/src/commands/zpopmax.json b/src/commands/zpopmax.json
index 33bb85c51..56d86bf85 100644
--- a/src/commands/zpopmax.json
+++ b/src/commands/zpopmax.json
@@ -1,6 +1,6 @@
{
"ZPOPMAX": {
- "summary": "Remove and return members with the highest scores in a sorted set",
+ "summary": "Returns the highest-scoring members from a sorted set after removing them. Deletes the sorted set if the last member was popped.",
"complexity": "O(log(N)*M) with N being the number of elements in the sorted set, and M being the number of elements popped.",
"group": "sorted_set",
"since": "5.0.0",
diff --git a/src/commands/zpopmin.json b/src/commands/zpopmin.json
index e583eeea0..3fe36f343 100644
--- a/src/commands/zpopmin.json
+++ b/src/commands/zpopmin.json
@@ -1,6 +1,6 @@
{
"ZPOPMIN": {
- "summary": "Remove and return members with the lowest scores in a sorted set",
+ "summary": "Returns the lowest-scoring members from a sorted set after removing them. Deletes the sorted set if the last member was popped.",
"complexity": "O(log(N)*M) with N being the number of elements in the sorted set, and M being the number of elements popped.",
"group": "sorted_set",
"since": "5.0.0",
diff --git a/src/commands/zrandmember.json b/src/commands/zrandmember.json
index 1da1ce68b..13abc9aa3 100644
--- a/src/commands/zrandmember.json
+++ b/src/commands/zrandmember.json
@@ -1,7 +1,7 @@
{
"ZRANDMEMBER": {
- "summary": "Get one or multiple random elements from a sorted set",
- "complexity": "O(N) where N is the number of elements returned",
+ "summary": "Returns one or more random members from a sorted set.",
+ "complexity": "O(N) where N is the number of members returned",
"group": "sorted_set",
"since": "6.2.0",
"arity": -2,
diff --git a/src/commands/zrange.json b/src/commands/zrange.json
index 24a387160..dc7af8dc1 100644
--- a/src/commands/zrange.json
+++ b/src/commands/zrange.json
@@ -1,6 +1,6 @@
{
"ZRANGE": {
- "summary": "Return a range of members in a sorted set",
+ "summary": "Returns members in a sorted set within a range of indexes.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.",
"group": "sorted_set",
"since": "1.2.0",
diff --git a/src/commands/zrangebylex.json b/src/commands/zrangebylex.json
index d9d8a3a19..5949b8716 100644
--- a/src/commands/zrangebylex.json
+++ b/src/commands/zrangebylex.json
@@ -1,6 +1,6 @@
{
"ZRANGEBYLEX": {
- "summary": "Return a range of members in a sorted set, by lexicographical range",
+ "summary": "Returns members in a sorted set within a lexicographical range.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).",
"group": "sorted_set",
"since": "2.8.9",
diff --git a/src/commands/zrangebyscore.json b/src/commands/zrangebyscore.json
index b603db4da..557ef1dc6 100644
--- a/src/commands/zrangebyscore.json
+++ b/src/commands/zrangebyscore.json
@@ -1,6 +1,6 @@
{
"ZRANGEBYSCORE": {
- "summary": "Return a range of members in a sorted set, by score",
+ "summary": "Returns members in a sorted set within a range of scores.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).",
"group": "sorted_set",
"since": "1.0.5",
diff --git a/src/commands/zrangestore.json b/src/commands/zrangestore.json
index f072553b7..8eeaf74db 100644
--- a/src/commands/zrangestore.json
+++ b/src/commands/zrangestore.json
@@ -1,6 +1,6 @@
{
"ZRANGESTORE": {
- "summary": "Store a range of members from sorted set into another key",
+ "summary": "Stores a range of members from sorted set in a key.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements stored into the destination key.",
"group": "sorted_set",
"since": "6.2.0",
diff --git a/src/commands/zrank.json b/src/commands/zrank.json
index d08897e27..f8ebda94a 100644
--- a/src/commands/zrank.json
+++ b/src/commands/zrank.json
@@ -1,6 +1,6 @@
{
"ZRANK": {
- "summary": "Determine the index of a member in a sorted set",
+ "summary": "Returns the index of a member in a sorted set ordered by ascending scores.",
"complexity": "O(log(N))",
"group": "sorted_set",
"since": "2.0.0",
diff --git a/src/commands/zrem.json b/src/commands/zrem.json
index f8fceeadb..8766124ea 100644
--- a/src/commands/zrem.json
+++ b/src/commands/zrem.json
@@ -1,6 +1,6 @@
{
"ZREM": {
- "summary": "Remove one or more members from a sorted set",
+ "summary": "Removes one or more members from a sorted set. Deletes the sorted set if all members were removed.",
"complexity": "O(M*log(N)) with N being the number of elements in the sorted set and M the number of elements to be removed.",
"group": "sorted_set",
"since": "1.2.0",
diff --git a/src/commands/zremrangebylex.json b/src/commands/zremrangebylex.json
index 34eb99980..169472c0b 100644
--- a/src/commands/zremrangebylex.json
+++ b/src/commands/zremrangebylex.json
@@ -1,6 +1,6 @@
{
"ZREMRANGEBYLEX": {
- "summary": "Remove all members in a sorted set between the given lexicographical range",
+ "summary": "Removes members in a sorted set within a lexicographical range. Deletes the sorted set if all members were removed.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements removed by the operation.",
"group": "sorted_set",
"since": "2.8.9",
diff --git a/src/commands/zremrangebyrank.json b/src/commands/zremrangebyrank.json
index 4e7744dff..7e668e8f6 100644
--- a/src/commands/zremrangebyrank.json
+++ b/src/commands/zremrangebyrank.json
@@ -1,6 +1,6 @@
{
"ZREMRANGEBYRANK": {
- "summary": "Remove all members in a sorted set within the given indexes",
+ "summary": "Removes members in a sorted set within a range of indexes. Deletes the sorted set if all members were removed.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements removed by the operation.",
"group": "sorted_set",
"since": "2.0.0",
diff --git a/src/commands/zremrangebyscore.json b/src/commands/zremrangebyscore.json
index d5ca40c42..aed5d1bba 100644
--- a/src/commands/zremrangebyscore.json
+++ b/src/commands/zremrangebyscore.json
@@ -1,6 +1,6 @@
{
"ZREMRANGEBYSCORE": {
- "summary": "Remove all members in a sorted set within the given scores",
+ "summary": "Removes members in a sorted set within a range of scores. Deletes the sorted set if all members were removed.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements removed by the operation.",
"group": "sorted_set",
"since": "1.2.0",
diff --git a/src/commands/zrevrange.json b/src/commands/zrevrange.json
index 725abf8d7..116fe82b2 100644
--- a/src/commands/zrevrange.json
+++ b/src/commands/zrevrange.json
@@ -1,6 +1,6 @@
{
"ZREVRANGE": {
- "summary": "Return a range of members in a sorted set, by index, with scores ordered from high to low",
+ "summary": "Returns members in a sorted set within a range of indexes in reverse order.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.",
"group": "sorted_set",
"since": "1.2.0",
diff --git a/src/commands/zrevrangebylex.json b/src/commands/zrevrangebylex.json
index 252c96f8c..d1d8100d1 100644
--- a/src/commands/zrevrangebylex.json
+++ b/src/commands/zrevrangebylex.json
@@ -1,6 +1,6 @@
{
"ZREVRANGEBYLEX": {
- "summary": "Return a range of members in a sorted set, by lexicographical range, ordered from higher to lower strings.",
+ "summary": "Returns members in a sorted set within a lexicographical range in reverse order.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).",
"group": "sorted_set",
"since": "2.8.9",
diff --git a/src/commands/zrevrangebyscore.json b/src/commands/zrevrangebyscore.json
index 163faec57..ab040527e 100644
--- a/src/commands/zrevrangebyscore.json
+++ b/src/commands/zrevrangebyscore.json
@@ -1,6 +1,6 @@
{
"ZREVRANGEBYSCORE": {
- "summary": "Return a range of members in a sorted set, by score, with scores ordered from high to low",
+ "summary": "Returns members in a sorted set within a range of scores in reverse order.",
"complexity": "O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements being returned. If M is constant (e.g. always asking for the first 10 elements with LIMIT), you can consider it O(log(N)).",
"group": "sorted_set",
"since": "2.2.0",
diff --git a/src/commands/zrevrank.json b/src/commands/zrevrank.json
index 0a025fe0d..43ac13bd8 100644
--- a/src/commands/zrevrank.json
+++ b/src/commands/zrevrank.json
@@ -1,6 +1,6 @@
{
"ZREVRANK": {
- "summary": "Determine the index of a member in a sorted set, with scores ordered from high to low",
+ "summary": "Returns the index of a member in a sorted set ordered by descending scores.",
"complexity": "O(log(N))",
"group": "sorted_set",
"since": "2.0.0",
diff --git a/src/commands/zscan.json b/src/commands/zscan.json
index ca4a7dd2a..7c69ccf65 100644
--- a/src/commands/zscan.json
+++ b/src/commands/zscan.json
@@ -1,6 +1,6 @@
{
"ZSCAN": {
- "summary": "Incrementally iterate sorted sets elements and associated scores",
+ "summary": "Iterates over members and scores of a sorted set.",
"complexity": "O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.",
"group": "sorted_set",
"since": "2.8.0",
diff --git a/src/commands/zscore.json b/src/commands/zscore.json
index 7e07c8248..502247051 100644
--- a/src/commands/zscore.json
+++ b/src/commands/zscore.json
@@ -1,6 +1,6 @@
{
"ZSCORE": {
- "summary": "Get the score associated with the given member in a sorted set",
+ "summary": "Returns the score of a member in a sorted set.",
"complexity": "O(1)",
"group": "sorted_set",
"since": "1.2.0",
diff --git a/src/commands/zunion.json b/src/commands/zunion.json
index 395a12741..1ce3dc5ee 100644
--- a/src/commands/zunion.json
+++ b/src/commands/zunion.json
@@ -1,6 +1,6 @@
{
"ZUNION": {
- "summary": "Add multiple sorted sets",
+ "summary": "Returns the union of multiple sorted sets.",
"complexity": "O(N)+O(M*log(M)) with N being the sum of the sizes of the input sorted sets, and M being the number of elements in the resulting sorted set.",
"group": "sorted_set",
"since": "6.2.0",
diff --git a/src/commands/zunionstore.json b/src/commands/zunionstore.json
index 25273af8c..65e7b5469 100644
--- a/src/commands/zunionstore.json
+++ b/src/commands/zunionstore.json
@@ -1,6 +1,6 @@
{
"ZUNIONSTORE": {
- "summary": "Add multiple sorted sets and store the resulting sorted set in a new key",
+ "summary": "Stores the union of multiple sorted sets in a key.",
"complexity": "O(N)+O(M log(M)) with N being the sum of the sizes of the input sorted sets, and M being the number of elements in the resulting sorted set.",
"group": "sorted_set",
"since": "2.0.0",