diff --git a/src/taoensso/carmine/commands.clj b/src/taoensso/carmine/commands.clj
index ba369835..9c10d439 100644
--- a/src/taoensso/carmine/commands.clj
+++ b/src/taoensso/carmine/commands.clj
@@ -99,7 +99,7 @@
   (defn- get-command-spec
     "Given a `clojure/slurp`-able Redis commands.json location (e.g. URL),
     reads the json and returns a cleaned-up Redis command spec map."
-    ([] (get-command-spec (java.net.URL. "https://raw.githubusercontent.com/antirez/redis-doc/master/commands.json")))
+    ([] (get-command-spec (java.net.URL. "https://raw.githubusercontent.com/redis/redis-doc/master/commands.json")))
     ([json]
      (try
        (let [m (clojure.data.json/read-str (slurp json) :key-fn keyword)]
diff --git a/src/taoensso/carmine/commands.edn b/src/taoensso/carmine/commands.edn
index ba96f846..22c5d4c4 100644
--- a/src/taoensso/carmine/commands.edn
+++ b/src/taoensso/carmine/commands.edn
@@ -1,259 +1,366 @@
 {"RPUSHX" {:fn-name "rpushx", :fn-docstring "Append an element to a list, only if the list exists.\n\nRPUSHX key element [element ...]\n\nAvailable since: 2.2.0.\n\nTime complexity: O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.", :fn-params-fixed [key element], :fn-params-more [key element & args], :req-args-fixed ["RPUSHX" key element], :cluster-key-idx 1}
 "HINCRBY" {:fn-name "hincrby", :fn-docstring "Increment the integer value of a hash field by the given number.\n\nHINCRBY key field increment\n\nAvailable since: 2.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key field increment], :fn-params-more nil, :req-args-fixed ["HINCRBY" key field increment], :cluster-key-idx 1}
-"ZRANGEBYLEX" {:fn-name "zrangebylex", :fn-docstring "Return a range of members in a sorted set, by lexicographical range.\n\nZRANGEBYLEX key min max [LIMIT offset count]\n\nAvailable since: 2.8.9.\n\nTime 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)).", :fn-params-fixed [key min max], :fn-params-more [key min max & args], :req-args-fixed ["ZRANGEBYLEX" key min max], :cluster-key-idx 1}
+"ZRANGEBYLEX" {:fn-name "zrangebylex", :fn-docstring "Return a range of members in a sorted set, by lexicographical range.\n\nZRANGEBYLEX key min max [offset_count]\n\nAvailable since: 2.8.9.\n\nTime 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)).", :fn-params-fixed [key min max], :fn-params-more [key min max & args], :req-args-fixed ["ZRANGEBYLEX" key min max], :cluster-key-idx 1}
 "HVALS" {:fn-name "hvals", :fn-docstring "Get all the values in a hash.\n\nHVALS key\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the size of the hash.", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["HVALS" key], :cluster-key-idx 1}
-"XLEN" {:fn-name "xlen", :fn-docstring "Return the number of entires in a stream.\n\nXLEN key\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["XLEN" key], :cluster-key-idx 1}
-"BLPOP" {:fn-name "blpop", :fn-docstring "Remove and get the first element in a list, or block until one is available.\n\nBLPOP key [key ...] timeout\n\nAvailable since: 2.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["BLPOP" key], :cluster-key-idx 1}
-"CLUSTER SETSLOT" {:fn-name "cluster-setslot", :fn-docstring "Bind a hash slot to a specific node.\n\nCLUSTER SETSLOT slot IMPORTING|MIGRATING|STABLE|NODE [node-id]\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [slot subcommand], :fn-params-more [slot subcommand & args], :req-args-fixed ["CLUSTER" "SETSLOT" slot subcommand], :cluster-key-idx 2}
+"XLEN" {:fn-name "xlen", :fn-docstring "Return the number of entries in a stream.\n\nXLEN key\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["XLEN" key], :cluster-key-idx 1}
+"CLUSTER ADDSLOTSRANGE" {:fn-name "cluster-addslotsrange", :fn-docstring "Assign new hash slots to receiving node.\n\nCLUSTER ADDSLOTSRANGE start-slot_end-slot [start-slot_end-slot ...]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the total number of the slots between the start slot and end slot arguments.", :fn-params-fixed [start-slot_end-slot], :fn-params-more [start-slot_end-slot & args], :req-args-fixed ["CLUSTER" "ADDSLOTSRANGE" start-slot_end-slot], :cluster-key-idx 2}
+"BLPOP" {:fn-name "blpop", :fn-docstring "Remove and get the first element in a list, or block until one is available.\n\nBLPOP key [key ...] timeout\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the number of provided keys.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["BLPOP" key], :cluster-key-idx 1}
+"LATENCY" {:fn-name "latency", :fn-docstring "A container for latency diagnostics commands.\n\nLATENCY \n\nAvailable since: 2.8.13.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["LATENCY"], :cluster-key-idx 1}
+"CLUSTER SETSLOT" {:fn-name "cluster-setslot", :fn-docstring "Bind a hash slot to a specific node.\n\nCLUSTER SETSLOT slot subcommand\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [slot subcommand], :fn-params-more nil, :req-args-fixed ["CLUSTER" "SETSLOT" slot subcommand], :cluster-key-idx 2}
 "WATCH" {:fn-name "watch", :fn-docstring "Watch the given keys to determine execution of the MULTI/EXEC block.\n\nWATCH key [key ...]\n\nAvailable since: 2.2.0.\n\nTime complexity: O(1) for every key.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["WATCH" key], :cluster-key-idx 1}
+"ACL DRYRUN" {:fn-name "acl-dryrun", :fn-docstring "Returns whether the user can execute the given command without executing the command..\n\nACL DRYRUN username command [arg [arg ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(1).", :fn-params-fixed [username command], :fn-params-more [username command & args], :req-args-fixed ["ACL" "DRYRUN" username command], :cluster-key-idx 2}
 "LINDEX" {:fn-name "lindex", :fn-docstring "Get an element from a list by its index.\n\nLINDEX key index\n\nAvailable since: 1.0.0.\n\nTime 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).", :fn-params-fixed [key index], :fn-params-more nil, :req-args-fixed ["LINDEX" key index], :cluster-key-idx 1}
+"COMMAND DOCS" {:fn-name "command-docs", :fn-docstring "Get array of specific Redis command documentation.\n\nCOMMAND DOCS [command-name [command-name ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of commands to look up", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["COMMAND" "DOCS"], :cluster-key-idx 2}
 "COMMAND GETKEYS" {:fn-name "command-getkeys", :fn-docstring "Extract keys given a full Redis command.\n\nCOMMAND GETKEYS \n\nAvailable since: 2.8.13.\n\nTime complexity: O(N) where N is the number of arguments to the command", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["COMMAND" "GETKEYS"], :cluster-key-idx 2}
+"ASKING" {:fn-name "asking", :fn-docstring "Sent by cluster clients after an -ASK redirect.\n\nASKING \n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ASKING"], :cluster-key-idx 1}
+"CONFIG HELP" {:fn-name "config-help", :fn-docstring "Show helpful text about the different subcommands.\n\nCONFIG HELP \n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CONFIG" "HELP"], :cluster-key-idx 2}
 "CLUSTER KEYSLOT" {:fn-name "cluster-keyslot", :fn-docstring "Returns the hash slot of the specified key.\n\nCLUSTER KEYSLOT key\n\nAvailable since: 3.0.0.\n\nTime complexity: O(N) where N is the number of bytes in the key", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["CLUSTER" "KEYSLOT" key], :cluster-key-idx 2}
-"BITPOS" {:fn-name "bitpos", :fn-docstring "Find first bit set or clear in a string.\n\nBITPOS key bit [start] [end]\n\nAvailable since: 2.8.7.\n\nTime complexity: O(N)", :fn-params-fixed [key bit], :fn-params-more [key bit & args], :req-args-fixed ["BITPOS" key bit], :cluster-key-idx 1}
-"XTRIM" {:fn-name "xtrim", :fn-docstring "Trims the stream to (approximately if '~' is passed) a certain size.\n\nXTRIM key MAXLEN [~] count\n\nAvailable since: 5.0.0.\n\nTime 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.", :fn-params-fixed [key strategy], :fn-params-more [key strategy & args], :req-args-fixed ["XTRIM" key strategy], :cluster-key-idx 1}
-"XADD" {:fn-name "xadd", :fn-docstring "Appends a new entry to a stream.\n\nXADD key ID field value [field value ...]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key ID field value], :fn-params-more [key ID field value & args], :req-args-fixed ["XADD" key ID field value], :cluster-key-idx 1}
+"EVAL_RO" {:fn-name "eval_ro", :fn-docstring "Execute a read-only Lua script server side.\n\nEVAL_RO script numkeys [key [key ...]] [arg [arg ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: Depends on the script that is executed.", :fn-params-fixed [script numkeys], :fn-params-more [script numkeys & args], :req-args-fixed ["EVAL_RO" script numkeys], :cluster-key-idx 1}
+"CLUSTER DELSLOTSRANGE" {:fn-name "cluster-delslotsrange", :fn-docstring "Set hash slots as unbound in receiving node.\n\nCLUSTER DELSLOTSRANGE start-slot_end-slot [start-slot_end-slot ...]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the total number of the slots between the start slot and end slot arguments.", :fn-params-fixed [start-slot_end-slot], :fn-params-more [start-slot_end-slot & args], :req-args-fixed ["CLUSTER" "DELSLOTSRANGE" start-slot_end-slot], :cluster-key-idx 2}
+"GEORADIUSBYMEMBER_RO" {:fn-name "georadiusbymember_ro", :fn-docstring "A read-only variant for GEORADIUSBYMEMBER.\n\nGEORADIUSBYMEMBER_RO key member radius unit [withcoord] [withdist] [withhash] [count] [order]\n\nAvailable since: 3.2.10.\n\nTime 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.", :fn-params-fixed [key member radius unit], :fn-params-more [key member radius unit & args], :req-args-fixed ["GEORADIUSBYMEMBER_RO" key member radius unit], :cluster-key-idx 1}
+"BITPOS" {:fn-name "bitpos", :fn-docstring "Find first bit set or clear in a string.\n\nBITPOS key bit [index]\n\nAvailable since: 2.8.7.\n\nTime complexity: O(N)", :fn-params-fixed [key bit], :fn-params-more [key bit & args], :req-args-fixed ["BITPOS" key bit], :cluster-key-idx 1}
+"XTRIM" {:fn-name "xtrim", :fn-docstring "Trims the stream to (approximately if '~' is passed) a certain size.\n\nXTRIM key trim\n\nAvailable since: 5.0.0.\n\nTime 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.", :fn-params-fixed [key trim], :fn-params-more nil, :req-args-fixed ["XTRIM" key trim], :cluster-key-idx 1}
+"XADD" {:fn-name "xadd", :fn-docstring "Appends a new entry to a stream.\n\nXADD key [nomkstream] [trim] id_or_auto field_value [field_value ...]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1) when adding a new entry, O(N) when trimming where N being the number of entries evicted.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["XADD" key], :cluster-key-idx 1}
 "SCRIPT LOAD" {:fn-name "script-load", :fn-docstring "Load the specified Lua script into the script cache..\n\nSCRIPT LOAD script\n\nAvailable since: 2.6.0.\n\nTime complexity: O(N) with N being the length in bytes of the script body.", :fn-params-fixed [script], :fn-params-more nil, :req-args-fixed ["SCRIPT" "LOAD" script], :cluster-key-idx 2}
-"SLAVEOF" {:fn-name "slaveof", :fn-docstring "Make the server a replica of another instance, or promote it as master. Deprecated starting with Redis 5. Use REPLICAOF instead..\n\nSLAVEOF host port\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [host port], :fn-params-more nil, :req-args-fixed ["SLAVEOF" host port], :cluster-key-idx 1}
-"CLUSTER FAILOVER" {:fn-name "cluster-failover", :fn-docstring "Forces a replica to perform a manual failover of its master..\n\nCLUSTER FAILOVER [FORCE|TAKEOVER]\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["CLUSTER" "FAILOVER"], :cluster-key-idx 2}
+"SLAVEOF" {:fn-name "slaveof", :fn-docstring "Make the server a replica of another instance, or promote it as master..\n\nSLAVEOF host port\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [host port], :fn-params-more nil, :req-args-fixed ["SLAVEOF" host port], :cluster-key-idx 1}
+"ZRANGESTORE" {:fn-name "zrangestore", :fn-docstring "Store a range of members from sorted set into another key.\n\nZRANGESTORE dst src min max [sortby] [rev] [offset_count]\n\nAvailable since: 6.2.0.\n\nTime 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.", :fn-params-fixed [dst src min max], :fn-params-more [dst src min max & args], :req-args-fixed ["ZRANGESTORE" dst src min max], :cluster-key-idx 1}
+"CLUSTER FAILOVER" {:fn-name "cluster-failover", :fn-docstring "Forces a replica to perform a manual failover of its master..\n\nCLUSTER FAILOVER [options]\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["CLUSTER" "FAILOVER"], :cluster-key-idx 2}
 "CLUSTER SET-CONFIG-EPOCH" {:fn-name "cluster-set-config-epoch", :fn-docstring "Set the configuration epoch in a new node.\n\nCLUSTER SET-CONFIG-EPOCH config-epoch\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [config-epoch], :fn-params-more nil, :req-args-fixed ["CLUSTER" "SET-CONFIG-EPOCH" config-epoch], :cluster-key-idx 2}
-"EXPIREAT" {:fn-name "expireat", :fn-docstring "Set the expiration for a key as a UNIX timestamp.\n\nEXPIREAT key timestamp\n\nAvailable since: 1.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key timestamp], :fn-params-more nil, :req-args-fixed ["EXPIREAT" key timestamp], :cluster-key-idx 1}
-"OBJECT" {:fn-name "object", :fn-docstring "Inspect the internals of Redis objects.\n\nOBJECT subcommand [arguments [arguments ...]]\n\nAvailable since: 2.2.3.\n\nTime complexity: O(1) for all the currently implemented subcommands.", :fn-params-fixed [subcommand], :fn-params-more [subcommand & args], :req-args-fixed ["OBJECT" subcommand], :cluster-key-idx 1}
+"EXPIREAT" {:fn-name "expireat", :fn-docstring "Set the expiration for a key as a UNIX timestamp.\n\nEXPIREAT key unix-time-seconds [condition]\n\nAvailable since: 1.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key unix-time-seconds], :fn-params-more [key unix-time-seconds & args], :req-args-fixed ["EXPIREAT" key unix-time-seconds], :cluster-key-idx 1}
+"SCRIPT HELP" {:fn-name "script-help", :fn-docstring "Show helpful text about the different subcommands.\n\nSCRIPT HELP \n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SCRIPT" "HELP"], :cluster-key-idx 2}
+"OBJECT" {:fn-name "object", :fn-docstring "A container for object introspection commands.\n\nOBJECT \n\nAvailable since: 2.2.3.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["OBJECT"], :cluster-key-idx 1}
+"PUBSUB NUMPAT" {:fn-name "pubsub-numpat", :fn-docstring "Get the count of unique patterns pattern subscriptions.\n\nPUBSUB NUMPAT \n\nAvailable since: 2.8.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["PUBSUB" "NUMPAT"], :cluster-key-idx 2}
 "KEYS" {:fn-name "keys", :fn-docstring "Find all keys matching the given pattern.\n\nKEYS pattern\n\nAvailable since: 1.0.0.\n\nTime 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.", :fn-params-fixed [pattern], :fn-params-more nil, :req-args-fixed ["KEYS" pattern], :cluster-key-idx 1}
-"XINFO" {:fn-name "xinfo", :fn-docstring "Get information on streams and consumer groups.\n\nXINFO [CONSUMERS key groupname] [GROUPS key] [STREAM key] [HELP]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(N) with N being the number of returned items for the subcommands CONSUMERS and GROUPS. The STREAM subcommand is O(log N) with N being the number of items in the stream.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["XINFO"], :cluster-key-idx 1}
+"XINFO" {:fn-name "xinfo", :fn-docstring "A container for stream introspection commands.\n\nXINFO \n\nAvailable since: 5.0.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["XINFO"], :cluster-key-idx 1}
 "SETNX" {:fn-name "setnx", :fn-docstring "Set the value of a key, only if the key does not exist.\n\nSETNX key value\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key value], :fn-params-more nil, :req-args-fixed ["SETNX" key value], :cluster-key-idx 1}
-"MEMORY MALLOC-STATS" {:fn-name "memory-malloc-stats", :fn-docstring "Show allocator internal stats.\n\nMEMORY MALLOC-STATS \n\nAvailable since: 4.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "MALLOC-STATS"], :cluster-key-idx 2}
+"MEMORY MALLOC-STATS" {:fn-name "memory-malloc-stats", :fn-docstring "Show allocator internal stats.\n\nMEMORY MALLOC-STATS \n\nAvailable since: 4.0.0.\n\nTime complexity: Depends on how much memory is allocated, could be slow", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "MALLOC-STATS"], :cluster-key-idx 2}
 "HSTRLEN" {:fn-name "hstrlen", :fn-docstring "Get the length of the value of a hash field.\n\nHSTRLEN key field\n\nAvailable since: 3.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key field], :fn-params-more nil, :req-args-fixed ["HSTRLEN" key field], :cluster-key-idx 1}
+"XINFO STREAM" {:fn-name "xinfo-stream", :fn-docstring "Get information about a stream.\n\nXINFO STREAM key [full]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["XINFO" "STREAM" key], :cluster-key-idx 2}
 "ACL USERS" {:fn-name "acl-users", :fn-docstring "List the username of all the configured ACL rules.\n\nACL USERS \n\nAvailable since: 6.0.0.\n\nTime complexity: O(N). Where N is the number of configured users.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ACL" "USERS"], :cluster-key-idx 2}
 "SYNC" {:fn-name "sync", :fn-docstring "Internal command used for replication.\n\nSYNC \n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SYNC"], :cluster-key-idx 1}
 "SUNIONSTORE" {:fn-name "sunionstore", :fn-docstring "Add multiple sets and store the resulting set in a key.\n\nSUNIONSTORE destination key [key ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the total number of elements in all given sets.", :fn-params-fixed [destination key], :fn-params-more [destination key & args], :req-args-fixed ["SUNIONSTORE" destination key], :cluster-key-idx 1}
-"STRALGO" {:fn-name "stralgo", :fn-docstring "Run algorithms (currently LCS) against strings.\n\nSTRALGO LCS algo-specific-argument [algo-specific-argument ...]\n\nAvailable since: 6.0.0.\n\nTime complexity: For LCS O(strlen(s1)*strlen(s2))", :fn-params-fixed [algorithm algo-specific-argument], :fn-params-more [algorithm algo-specific-argument & args], :req-args-fixed ["STRALGO" algorithm algo-specific-argument], :cluster-key-idx 1}
-"EVAL" {:fn-name "eval", :fn-docstring "Execute a Lua script server side.\n\nEVAL script numkeys key [key ...] arg [arg ...]\n\nAvailable since: 2.6.0.\n\nTime complexity: Depends on the script that is executed.", :fn-params-fixed [script numkeys], :fn-params-more [script numkeys & args], :req-args-fixed ["EVAL" script numkeys], :cluster-key-idx 1}
+"XGROUP CREATECONSUMER" {:fn-name "xgroup-createconsumer", :fn-docstring "Create a consumer in a consumer group..\n\nXGROUP CREATECONSUMER key groupname consumername\n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key groupname consumername], :fn-params-more nil, :req-args-fixed ["XGROUP" "CREATECONSUMER" key groupname consumername], :cluster-key-idx 2}
+"ZMPOP" {:fn-name "zmpop", :fn-docstring "Remove and return members with scores in a sorted set.\n\nZMPOP numkeys key [key ...] where [count]\n\nAvailable since: 7.0.0.\n\nTime 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.", :fn-params-fixed [numkeys key], :fn-params-more [numkeys key & args], :req-args-fixed ["ZMPOP" numkeys key], :cluster-key-idx 1}
+"CLIENT TRACKINGINFO" {:fn-name "client-trackinginfo", :fn-docstring "Return information about server assisted client side caching for the current connection.\n\nCLIENT TRACKINGINFO \n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLIENT" "TRACKINGINFO"], :cluster-key-idx 2}
+"EVAL" {:fn-name "eval", :fn-docstring "Execute a Lua script server side.\n\nEVAL script numkeys [key [key ...]] [arg [arg ...]]\n\nAvailable since: 2.6.0.\n\nTime complexity: Depends on the script that is executed.", :fn-params-fixed [script numkeys], :fn-params-more [script numkeys & args], :req-args-fixed ["EVAL" script numkeys], :cluster-key-idx 1}
+"REPLCONF" {:fn-name "replconf", :fn-docstring "An internal command for configuring the replication stream.\n\nREPLCONF \n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["REPLCONF"], :cluster-key-idx 1}
+"GEOSEARCH" {:fn-name "geosearch", :fn-docstring "Query a sorted set representing a geospatial index to fetch members inside an area of a box or a circle..\n\nGEOSEARCH key from by [order] [count] [withcoord] [withdist] [withhash]\n\nAvailable since: 6.2.0.\n\nTime 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", :fn-params-fixed [key from by], :fn-params-more [key from by & args], :req-args-fixed ["GEOSEARCH" key from by], :cluster-key-idx 1}
 "CLUSTER ADDSLOTS" {:fn-name "cluster-addslots", :fn-docstring "Assign new hash slots to receiving node.\n\nCLUSTER ADDSLOTS slot [slot ...]\n\nAvailable since: 3.0.0.\n\nTime complexity: O(N) where N is the total number of hash slot arguments", :fn-params-fixed [slot], :fn-params-more [slot & args], :req-args-fixed ["CLUSTER" "ADDSLOTS" slot], :cluster-key-idx 2}
-"BRPOP" {:fn-name "brpop", :fn-docstring "Remove and get the last element in a list, or block until one is available.\n\nBRPOP key [key ...] timeout\n\nAvailable since: 2.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["BRPOP" key], :cluster-key-idx 1}
+"BRPOP" {:fn-name "brpop", :fn-docstring "Remove and get the last element in a list, or block until one is available.\n\nBRPOP key [key ...] timeout\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the number of provided keys.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["BRPOP" key], :cluster-key-idx 1}
 "DECRBY" {:fn-name "decrby", :fn-docstring "Decrement the integer value of a key by the given number.\n\nDECRBY key decrement\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key decrement], :fn-params-more nil, :req-args-fixed ["DECRBY" key decrement], :cluster-key-idx 1}
 "CLIENT GETNAME" {:fn-name "client-getname", :fn-docstring "Get the current connection name.\n\nCLIENT GETNAME \n\nAvailable since: 2.6.9.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLIENT" "GETNAME"], :cluster-key-idx 2}
 "CLUSTER MYID" {:fn-name "cluster-myid", :fn-docstring "Return the node id.\n\nCLUSTER MYID \n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "MYID"], :cluster-key-idx 2}
-"SET" {:fn-name "set", :fn-docstring "Set the string value of a key.\n\nSET key value [EX seconds|PX milliseconds|KEEPTTL] [NX|XX]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key value], :fn-params-more [key value & args], :req-args-fixed ["SET" key value], :cluster-key-idx 1}
-"MSET" {:fn-name "mset", :fn-docstring "Set multiple keys to multiple values.\n\nMSET key value [key value ...]\n\nAvailable since: 1.0.1.\n\nTime complexity: O(N) where N is the number of keys to set.", :fn-params-fixed [key value], :fn-params-more [key value & args], :req-args-fixed ["MSET" key value], :cluster-key-idx 1}
-"ZRANGE" {:fn-name "zrange", :fn-docstring "Return a range of members in a sorted set, by index.\n\nZRANGE key start stop [WITHSCORES]\n\nAvailable since: 1.2.0.\n\nTime complexity: O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.", :fn-params-fixed [key start stop], :fn-params-more [key start stop & args], :req-args-fixed ["ZRANGE" key start stop], :cluster-key-idx 1}
+"SET" {:fn-name "set", :fn-docstring "Set the string value of a key.\n\nSET key value [condition] [get] [expiration]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key value], :fn-params-more [key value & args], :req-args-fixed ["SET" key value], :cluster-key-idx 1}
+"MSET" {:fn-name "mset", :fn-docstring "Set multiple keys to multiple values.\n\nMSET key_value [key_value ...]\n\nAvailable since: 1.0.1.\n\nTime complexity: O(N) where N is the number of keys to set.", :fn-params-fixed [key_value], :fn-params-more [key_value & args], :req-args-fixed ["MSET" key_value], :cluster-key-idx 1}
+"ZRANGE" {:fn-name "zrange", :fn-docstring "Return a range of members in a sorted set.\n\nZRANGE key start stop [sortby] [rev] [offset_count] [withscores]\n\nAvailable since: 1.2.0.\n\nTime complexity: O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.", :fn-params-fixed [key start stop], :fn-params-more [key start stop & args], :req-args-fixed ["ZRANGE" key start stop], :cluster-key-idx 1}
 "STRLEN" {:fn-name "strlen", :fn-docstring "Get the length of the value stored in a key.\n\nSTRLEN key\n\nAvailable since: 2.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["STRLEN" key], :cluster-key-idx 1}
 "LRANGE" {:fn-name "lrange", :fn-docstring "Get a range of elements from a list.\n\nLRANGE key start stop\n\nAvailable since: 1.0.0.\n\nTime 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.", :fn-params-fixed [key start stop], :fn-params-more nil, :req-args-fixed ["LRANGE" key start stop], :cluster-key-idx 1}
+"GETDEL" {:fn-name "getdel", :fn-docstring "Get the value of a key and delete the key.\n\nGETDEL key\n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["GETDEL" key], :cluster-key-idx 1}
+"CONFIG" {:fn-name "config", :fn-docstring "A container for server configuration commands.\n\nCONFIG \n\nAvailable since: 2.0.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CONFIG"], :cluster-key-idx 1}
 "LPUSH" {:fn-name "lpush", :fn-docstring "Prepend one or multiple elements to a list.\n\nLPUSH key element [element ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.", :fn-params-fixed [key element], :fn-params-more [key element & args], :req-args-fixed ["LPUSH" key element], :cluster-key-idx 1}
-"DBSIZE" {:fn-name "dbsize", :fn-docstring "Return the number of keys in the selected database.\n\nDBSIZE \n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["DBSIZE"], :cluster-key-idx 1}
-"EXPIRE" {:fn-name "expire", :fn-docstring "Set a key's time to live in seconds.\n\nEXPIRE key seconds\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key seconds], :fn-params-more nil, :req-args-fixed ["EXPIRE" key seconds], :cluster-key-idx 1}
+"DBSIZE" {:fn-name "dbsize", :fn-docstring "Return the number of keys in the selected database.\n\nDBSIZE \n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["DBSIZE"], :cluster-key-idx 1}
+"ZINTER" {:fn-name "zinter", :fn-docstring "Intersect multiple sorted sets.\n\nZINTER numkeys key [key ...] [weight [weight ...]] [aggregate] [withscores]\n\nAvailable since: 6.2.0.\n\nTime 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.", :fn-params-fixed [numkeys key], :fn-params-more [numkeys key & args], :req-args-fixed ["ZINTER" numkeys key], :cluster-key-idx 1}
+"EXPIRE" {:fn-name "expire", :fn-docstring "Set a key's time to live in seconds.\n\nEXPIRE key seconds [condition]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key seconds], :fn-params-more [key seconds & args], :req-args-fixed ["EXPIRE" key seconds], :cluster-key-idx 1}
+"MEMORY" {:fn-name "memory", :fn-docstring "A container for memory diagnostics commands.\n\nMEMORY \n\nAvailable since: 4.0.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY"], :cluster-key-idx 1}
 "SUBSCRIBE" {:fn-name "subscribe", :fn-docstring "Listen for messages published to the given channels.\n\nSUBSCRIBE channel [channel ...]\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the number of channels to subscribe to.", :fn-params-fixed [channel], :fn-params-more [channel & args], :req-args-fixed ["SUBSCRIBE" channel], :cluster-key-idx 1}
-"ACL LOG" {:fn-name "acl-log", :fn-docstring "List latest events denied because of ACLs in place.\n\nACL LOG [count or RESET]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(N) with N being the number of entries shown.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["ACL" "LOG"], :cluster-key-idx 2}
+"ACL LOG" {:fn-name "acl-log", :fn-docstring "List latest events denied because of ACLs in place.\n\nACL LOG [operation]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(N) with N being the number of entries shown.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["ACL" "LOG"], :cluster-key-idx 2}
 "SETRANGE" {:fn-name "setrange", :fn-docstring "Overwrite part of a string at key starting at the specified offset.\n\nSETRANGE key offset value\n\nAvailable since: 2.2.0.\n\nTime 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.", :fn-params-fixed [key offset value], :fn-params-more nil, :req-args-fixed ["SETRANGE" key offset value], :cluster-key-idx 1}
 "ACL GETUSER" {:fn-name "acl-getuser", :fn-docstring "Get the rules for a specific ACL user.\n\nACL GETUSER username\n\nAvailable since: 6.0.0.\n\nTime complexity: O(N). Where N is the number of password, command and pattern rules that the user has.", :fn-params-fixed [username], :fn-params-more nil, :req-args-fixed ["ACL" "GETUSER" username], :cluster-key-idx 2}
 "UNSUBSCRIBE" {:fn-name "unsubscribe", :fn-docstring "Stop listening for messages posted to the given channels.\n\nUNSUBSCRIBE [channel [channel ...]]\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the number of clients already subscribed to a channel.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["UNSUBSCRIBE"], :cluster-key-idx 1}
-"XREADGROUP" {:fn-name "xreadgroup", :fn-docstring "Return new entries from a stream using a consumer group, or access the history of the pending entries for a given consumer. Can block..\n\nXREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]\n\nAvailable since: 5.0.0.\n\nTime 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.", :fn-params-fixed [group consumer], :fn-params-more [group consumer & args], :req-args-fixed ["XREADGROUP" group consumer], :cluster-key-idx 1}
+"ZUNION" {:fn-name "zunion", :fn-docstring "Add multiple sorted sets.\n\nZUNION numkeys key [key ...] [weight [weight ...]] [aggregate] [withscores]\n\nAvailable since: 6.2.0.\n\nTime 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.", :fn-params-fixed [numkeys key], :fn-params-more [numkeys key & args], :req-args-fixed ["ZUNION" numkeys key], :cluster-key-idx 1}
+"XREADGROUP" {:fn-name "xreadgroup", :fn-docstring "Return new entries from a stream using a consumer group, or access the history of the pending entries for a given consumer. Can block..\n\nXREADGROUP group_consumer [count] [milliseconds] [noack] streams\n\nAvailable since: 5.0.0.\n\nTime 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.", :fn-params-fixed [group_consumer], :fn-params-more [group_consumer & args], :req-args-fixed ["XREADGROUP" group_consumer], :cluster-key-idx 1}
 "ZCARD" {:fn-name "zcard", :fn-docstring "Get the number of members in a sorted set.\n\nZCARD key\n\nAvailable since: 1.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["ZCARD" key], :cluster-key-idx 1}
-"HMSET" {:fn-name "hmset", :fn-docstring "Set multiple hash fields to multiple values.\n\nHMSET key field value [field value ...]\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the number of fields being set.", :fn-params-fixed [key field value], :fn-params-more [key field value & args], :req-args-fixed ["HMSET" key field value], :cluster-key-idx 1}
+"HMSET" {:fn-name "hmset", :fn-docstring "Set multiple hash fields to multiple values.\n\nHMSET key field_value [field_value ...]\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the number of fields being set.", :fn-params-fixed [key field_value], :fn-params-more [key field_value & args], :req-args-fixed ["HMSET" key field_value], :cluster-key-idx 1}
 "ZINCRBY" {:fn-name "zincrby", :fn-docstring "Increment the score of a member in a sorted set.\n\nZINCRBY key increment member\n\nAvailable since: 1.2.0.\n\nTime complexity: O(log(N)) where N is the number of elements in the sorted set.", :fn-params-fixed [key increment member], :fn-params-more nil, :req-args-fixed ["ZINCRBY" key increment member], :cluster-key-idx 1}
-"RPOP" {:fn-name "rpop", :fn-docstring "Remove and get the last element in a list.\n\nRPOP key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["RPOP" key], :cluster-key-idx 1}
+"RPOP" {:fn-name "rpop", :fn-docstring "Remove and get the last elements in a list.\n\nRPOP key [count]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the number of elements returned", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["RPOP" key], :cluster-key-idx 1}
+"CLIENT NO-EVICT" {:fn-name "client-no-evict", :fn-docstring "Set client eviction mode for the current connection.\n\nCLIENT NO-EVICT enabled\n\nAvailable since: 7.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [enabled], :fn-params-more nil, :req-args-fixed ["CLIENT" "NO-EVICT" enabled], :cluster-key-idx 2}
+"CLIENT HELP" {:fn-name "client-help", :fn-docstring "Show helpful text about the different subcommands.\n\nCLIENT HELP \n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLIENT" "HELP"], :cluster-key-idx 2}
 "PUBLISH" {:fn-name "publish", :fn-docstring "Post a message to a channel.\n\nPUBLISH channel message\n\nAvailable since: 2.0.0.\n\nTime 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).", :fn-params-fixed [channel message], :fn-params-more nil, :req-args-fixed ["PUBLISH" channel message], :cluster-key-idx 1}
 "LLEN" {:fn-name "llen", :fn-docstring "Get the length of a list.\n\nLLEN key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["LLEN" key], :cluster-key-idx 1}
-"GEORADIUS" {:fn-name "georadius", :fn-docstring "Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point.\n\nGEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]\n\nAvailable since: 3.2.0.\n\nTime 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.", :fn-params-fixed [key longitude latitude radius unit], :fn-params-more [key longitude latitude radius unit & args], :req-args-fixed ["GEORADIUS" key longitude latitude radius unit], :cluster-key-idx 1}
-"MIGRATE" {:fn-name "migrate", :fn-docstring "Atomically transfer a key from a Redis instance to another one..\n\nMIGRATE host port key|\"\" destination-db timeout [COPY] [REPLACE] [AUTH password] [KEYS key]\n\nAvailable since: 2.6.0.\n\nTime 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.", :fn-params-fixed [host port key destination-db timeout], :fn-params-more [host port key destination-db timeout & args], :req-args-fixed ["MIGRATE" host port key destination-db timeout], :cluster-key-idx 1}
+"GEORADIUS" {:fn-name "georadius", :fn-docstring "Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point.\n\nGEORADIUS key longitude latitude radius unit [withcoord] [withdist] [withhash] [count] [order] [key] [key]\n\nAvailable since: 3.2.0.\n\nTime 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.", :fn-params-fixed [key longitude latitude radius unit], :fn-params-more [key longitude latitude radius unit & args], :req-args-fixed ["GEORADIUS" key longitude latitude radius unit], :cluster-key-idx 1}
+"MIGRATE" {:fn-name "migrate", :fn-docstring "Atomically transfer a key from a Redis instance to another one..\n\nMIGRATE host port key_or_empty_string destination-db timeout [copy] [replace] [authentication] [key [key ...]]\n\nAvailable since: 2.6.0.\n\nTime 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.", :fn-params-fixed [host port key_or_empty_string destination-db timeout], :fn-params-more [host port key_or_empty_string destination-db timeout & args], :req-args-fixed ["MIGRATE" host port key_or_empty_string destination-db timeout], :cluster-key-idx 1}
+"FUNCTION FLUSH" {:fn-name "function-flush", :fn-docstring "Deleting all functions.\n\nFUNCTION FLUSH [async]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of functions deleted", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["FUNCTION" "FLUSH"], :cluster-key-idx 2}
+"FUNCTION STATS" {:fn-name "function-stats", :fn-docstring "Return information about the function currently running (name, description, duration).\n\nFUNCTION STATS \n\nAvailable since: 7.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["FUNCTION" "STATS"], :cluster-key-idx 2}
+"CLUSTER HELP" {:fn-name "cluster-help", :fn-docstring "Show helpful text about the different subcommands.\n\nCLUSTER HELP \n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "HELP"], :cluster-key-idx 2}
 "CLUSTER FLUSHSLOTS" {:fn-name "cluster-flushslots", :fn-docstring "Delete a node's own slots information.\n\nCLUSTER FLUSHSLOTS \n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "FLUSHSLOTS"], :cluster-key-idx 2}
 "SINTER" {:fn-name "sinter", :fn-docstring "Intersect multiple sets.\n\nSINTER key [key ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["SINTER" key], :cluster-key-idx 1}
 "TYPE" {:fn-name "type", :fn-docstring "Determine the type stored at key.\n\nTYPE key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["TYPE" key], :cluster-key-idx 1}
-"ZRANGEBYSCORE" {:fn-name "zrangebyscore", :fn-docstring "Return a range of members in a sorted set, by score.\n\nZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]\n\nAvailable since: 1.0.5.\n\nTime 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)).", :fn-params-fixed [key min max], :fn-params-more [key min max & args], :req-args-fixed ["ZRANGEBYSCORE" key min max], :cluster-key-idx 1}
+"ZRANGEBYSCORE" {:fn-name "zrangebyscore", :fn-docstring "Return a range of members in a sorted set, by score.\n\nZRANGEBYSCORE key min max [withscores] [offset_count]\n\nAvailable since: 1.0.5.\n\nTime 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)).", :fn-params-fixed [key min max], :fn-params-more [key min max & args], :req-args-fixed ["ZRANGEBYSCORE" key min max], :cluster-key-idx 1}
+"CLIENT INFO" {:fn-name "client-info", :fn-docstring "Returns information about the current client connection..\n\nCLIENT INFO \n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLIENT" "INFO"], :cluster-key-idx 2}
 "RENAME" {:fn-name "rename", :fn-docstring "Rename a key.\n\nRENAME key newkey\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key newkey], :fn-params-more nil, :req-args-fixed ["RENAME" key newkey], :cluster-key-idx 1}
-"CLIENT TRACKING" {:fn-name "client-tracking", :fn-docstring "Enable or disable server assisted client side caching support.\n\nCLIENT TRACKING ON|OFF [REDIRECT client-id] [PREFIX prefix [PREFIX prefix ...]] [BCAST] [OPTIN] [OPTOUT] [NOLOOP]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [status], :fn-params-more [status & args], :req-args-fixed ["CLIENT" "TRACKING" status], :cluster-key-idx 2}
+"CLIENT TRACKING" {:fn-name "client-tracking", :fn-docstring "Enable or disable server assisted client side caching support.\n\nCLIENT TRACKING status [client-id] [prefix [prefix ...]] [bcast] [optin] [optout] [noloop]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1). Some options may introduce additional complexity.", :fn-params-fixed [status], :fn-params-more [status & args], :req-args-fixed ["CLIENT" "TRACKING" status], :cluster-key-idx 2}
+"SMISMEMBER" {:fn-name "smismember", :fn-docstring "Returns the membership associated with the given elements for a set.\n\nSMISMEMBER key member [member ...]\n\nAvailable since: 6.2.0.\n\nTime complexity: O(N) where N is the number of elements being checked for membership", :fn-params-fixed [key member], :fn-params-more [key member & args], :req-args-fixed ["SMISMEMBER" key member], :cluster-key-idx 1}
 "ACL DELUSER" {:fn-name "acl-deluser", :fn-docstring "Remove the specified ACL users and the associated rules.\n\nACL DELUSER username [username ...]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1) amortized time considering the typical user.", :fn-params-fixed [username], :fn-params-more [username & args], :req-args-fixed ["ACL" "DELUSER" username], :cluster-key-idx 2}
 "CLIENT GETREDIR" {:fn-name "client-getredir", :fn-docstring "Get tracking notifications redirection client ID if any.\n\nCLIENT GETREDIR \n\nAvailable since: 6.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLIENT" "GETREDIR"], :cluster-key-idx 2}
 "SCRIPT KILL" {:fn-name "script-kill", :fn-docstring "Kill the script currently in execution..\n\nSCRIPT KILL \n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SCRIPT" "KILL"], :cluster-key-idx 2}
-"PING" {:fn-name "ping", :fn-docstring "Ping the server.\n\nPING [message]\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["PING"], :cluster-key-idx 1}
-"SCRIPT FLUSH" {:fn-name "script-flush", :fn-docstring "Remove all the scripts from the script cache..\n\nSCRIPT FLUSH \n\nAvailable since: 2.6.0.\n\nTime complexity: O(N) with N being the number of scripts in cache", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SCRIPT" "FLUSH"], :cluster-key-idx 2}
+"PING" {:fn-name "ping", :fn-docstring "Ping the server.\n\nPING [message]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["PING"], :cluster-key-idx 1}
+"SCRIPT FLUSH" {:fn-name "script-flush", :fn-docstring "Remove all the scripts from the script cache..\n\nSCRIPT FLUSH [async]\n\nAvailable since: 2.6.0.\n\nTime complexity: O(N) with N being the number of scripts in cache", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["SCRIPT" "FLUSH"], :cluster-key-idx 2}
 "BZPOPMAX" {:fn-name "bzpopmax", :fn-docstring "Remove and return the member with the highest score from one or more sorted sets, or block until one is available.\n\nBZPOPMAX key [key ...] timeout\n\nAvailable since: 5.0.0.\n\nTime complexity: O(log(N)) with N being the number of elements in the sorted set.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["BZPOPMAX" key], :cluster-key-idx 1}
-"MEMORY HELP" {:fn-name "memory-help", :fn-docstring "Show helpful text about the different subcommands.\n\nMEMORY HELP \n\nAvailable since: 4.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "HELP"], :cluster-key-idx 2}
-"LOLWUT" {:fn-name "lolwut", :fn-docstring "Display some computer art and the Redis version.\n\nLOLWUT [VERSION version]\n\nAvailable since: 5.0.0.\n\n", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["LOLWUT"], :cluster-key-idx 1}
-"ZUNIONSTORE" {:fn-name "zunionstore", :fn-docstring "Add multiple sorted sets and store the resulting sorted set in a new key.\n\nZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]\n\nAvailable since: 2.0.0.\n\nTime 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.", :fn-params-fixed [destination numkeys key], :fn-params-more [destination numkeys key & args], :req-args-fixed ["ZUNIONSTORE" destination numkeys key], :cluster-key-idx 1}
+"SORT_RO" {:fn-name "sort_ro", :fn-docstring "Sort the elements in a list, set or sorted set. Read-only variant of SORT..\n\nSORT_RO key [pattern] [offset_count] [pattern [pattern ...]] [order] [sorting]\n\nAvailable since: 7.0.0.\n\nTime 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).", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["SORT_RO" key], :cluster-key-idx 1}
+"MEMORY HELP" {:fn-name "memory-help", :fn-docstring "Show helpful text about the different subcommands.\n\nMEMORY HELP \n\nAvailable since: 4.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "HELP"], :cluster-key-idx 2}
+"LOLWUT" {:fn-name "lolwut", :fn-docstring "Display some computer art and the Redis version.\n\nLOLWUT [version]\n\nAvailable since: 5.0.0.\n\n", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["LOLWUT"], :cluster-key-idx 1}
+"CLUSTER" {:fn-name "cluster", :fn-docstring "A container for cluster commands.\n\nCLUSTER \n\nAvailable since: 3.0.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER"], :cluster-key-idx 1}
+"ZUNIONSTORE" {:fn-name "zunionstore", :fn-docstring "Add multiple sorted sets and store the resulting sorted set in a new key.\n\nZUNIONSTORE destination numkeys key [key ...] [weight [weight ...]] [aggregate]\n\nAvailable since: 2.0.0.\n\nTime 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.", :fn-params-fixed [destination numkeys key], :fn-params-more [destination numkeys key & args], :req-args-fixed ["ZUNIONSTORE" destination numkeys key], :cluster-key-idx 1}
+"OBJECT HELP" {:fn-name "object-help", :fn-docstring "Show helpful text about the different subcommands.\n\nOBJECT HELP \n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["OBJECT" "HELP"], :cluster-key-idx 2}
 "CLUSTER NODES" {:fn-name "cluster-nodes", :fn-docstring "Get Cluster config for the node.\n\nCLUSTER NODES \n\nAvailable since: 3.0.0.\n\nTime complexity: O(N) where N is the total number of Cluster nodes", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "NODES"], :cluster-key-idx 2}
-"MSETNX" {:fn-name "msetnx", :fn-docstring "Set multiple keys to multiple values, only if none of the keys exist.\n\nMSETNX key value [key value ...]\n\nAvailable since: 1.0.1.\n\nTime complexity: O(N) where N is the number of keys to set.", :fn-params-fixed [key value], :fn-params-more [key value & args], :req-args-fixed ["MSETNX" key value], :cluster-key-idx 1}
-"ZINTERSTORE" {:fn-name "zinterstore", :fn-docstring "Intersect multiple sorted sets and store the resulting sorted set in a new key.\n\nZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]\n\nAvailable since: 2.0.0.\n\nTime 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.", :fn-params-fixed [destination numkeys key], :fn-params-more [destination numkeys key & args], :req-args-fixed ["ZINTERSTORE" destination numkeys key], :cluster-key-idx 1}
-"CLUSTER MEET" {:fn-name "cluster-meet", :fn-docstring "Force a node cluster to handshake with another node.\n\nCLUSTER MEET ip port\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [ip port], :fn-params-more nil, :req-args-fixed ["CLUSTER" "MEET" ip port], :cluster-key-idx 2}
-"PFADD" {:fn-name "pfadd", :fn-docstring "Adds the specified elements to the specified HyperLogLog..\n\nPFADD key element [element ...]\n\nAvailable since: 2.8.9.\n\nTime complexity: O(1) to add every element.", :fn-params-fixed [key element], :fn-params-more [key element & args], :req-args-fixed ["PFADD" key element], :cluster-key-idx 1}
+"MSETNX" {:fn-name "msetnx", :fn-docstring "Set multiple keys to multiple values, only if none of the keys exist.\n\nMSETNX key_value [key_value ...]\n\nAvailable since: 1.0.1.\n\nTime complexity: O(N) where N is the number of keys to set.", :fn-params-fixed [key_value], :fn-params-more [key_value & args], :req-args-fixed ["MSETNX" key_value], :cluster-key-idx 1}
+"XGROUP HELP" {:fn-name "xgroup-help", :fn-docstring "Show helpful text about the different subcommands.\n\nXGROUP HELP \n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["XGROUP" "HELP"], :cluster-key-idx 2}
+"SINTERCARD" {:fn-name "sintercard", :fn-docstring "Intersect multiple sets and return the cardinality of the result.\n\nSINTERCARD numkeys key [key ...] [limit]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.", :fn-params-fixed [numkeys key], :fn-params-more [numkeys key & args], :req-args-fixed ["SINTERCARD" numkeys key], :cluster-key-idx 1}
+"ZINTERSTORE" {:fn-name "zinterstore", :fn-docstring "Intersect multiple sorted sets and store the resulting sorted set in a new key.\n\nZINTERSTORE destination numkeys key [key ...] [weight [weight ...]] [aggregate]\n\nAvailable since: 2.0.0.\n\nTime 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.", :fn-params-fixed [destination numkeys key], :fn-params-more [destination numkeys key & args], :req-args-fixed ["ZINTERSTORE" destination numkeys key], :cluster-key-idx 1}
+"FUNCTION DUMP" {:fn-name "function-dump", :fn-docstring "Dump all functions into a serialized binary payload.\n\nFUNCTION DUMP \n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of functions", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["FUNCTION" "DUMP"], :cluster-key-idx 2}
+"CLUSTER MEET" {:fn-name "cluster-meet", :fn-docstring "Force a node cluster to handshake with another node.\n\nCLUSTER MEET ip port [cluster_bus_port]\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [ip port], :fn-params-more [ip port & args], :req-args-fixed ["CLUSTER" "MEET" ip port], :cluster-key-idx 2}
+"PFADD" {:fn-name "pfadd", :fn-docstring "Adds the specified elements to the specified HyperLogLog..\n\nPFADD key [element [element ...]]\n\nAvailable since: 2.8.9.\n\nTime complexity: O(1) to add every element.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["PFADD" key], :cluster-key-idx 1}
 "PFCOUNT" {:fn-name "pfcount", :fn-docstring "Return the approximated cardinality of the set(s) observed by the HyperLogLog at key(s)..\n\nPFCOUNT key [key ...]\n\nAvailable since: 2.8.9.\n\nTime 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.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["PFCOUNT" key], :cluster-key-idx 1}
+"EVALSHA_RO" {:fn-name "evalsha_ro", :fn-docstring "Execute a read-only Lua script server side.\n\nEVALSHA_RO sha1 numkeys [key [key ...]] [arg [arg ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: Depends on the script that is executed.", :fn-params-fixed [sha1 numkeys], :fn-params-more [sha1 numkeys & args], :req-args-fixed ["EVALSHA_RO" sha1 numkeys], :cluster-key-idx 1}
 "CLUSTER INFO" {:fn-name "cluster-info", :fn-docstring "Provides info about Redis Cluster node state.\n\nCLUSTER INFO \n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "INFO"], :cluster-key-idx 2}
 "CLUSTER SLAVES" {:fn-name "cluster-slaves", :fn-docstring "List replica nodes of the specified master node.\n\nCLUSTER SLAVES node-id\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [node-id], :fn-params-more nil, :req-args-fixed ["CLUSTER" "SLAVES" node-id], :cluster-key-idx 2}
-"SWAPDB" {:fn-name "swapdb", :fn-docstring "Swaps two Redis databases.\n\nSWAPDB index1 index2\n\nAvailable since: 4.0.0.\n\n", :fn-params-fixed [index1 index2], :fn-params-more nil, :req-args-fixed ["SWAPDB" index1 index2], :cluster-key-idx 1}
-"HSCAN" {:fn-name "hscan", :fn-docstring "Incrementally iterate hash fields and associated values.\n\nHSCAN key cursor [MATCH pattern] [COUNT count]\n\nAvailable since: 2.8.0.\n\nTime 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..", :fn-params-fixed [key cursor], :fn-params-more [key cursor & args], :req-args-fixed ["HSCAN" key cursor], :cluster-key-idx 1}
+"SWAPDB" {:fn-name "swapdb", :fn-docstring "Swaps two Redis databases.\n\nSWAPDB index1 index2\n\nAvailable since: 4.0.0.\n\nTime complexity: O(N) where N is the count of clients watching or blocking on keys from both databases.", :fn-params-fixed [index1 index2], :fn-params-more nil, :req-args-fixed ["SWAPDB" index1 index2], :cluster-key-idx 1}
+"HSCAN" {:fn-name "hscan", :fn-docstring "Incrementally iterate hash fields and associated values.\n\nHSCAN key cursor [pattern] [count]\n\nAvailable since: 2.8.0.\n\nTime 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..", :fn-params-fixed [key cursor], :fn-params-more [key cursor & args], :req-args-fixed ["HSCAN" key cursor], :cluster-key-idx 1}
 "CLUSTER BUMPEPOCH" {:fn-name "cluster-bumpepoch", :fn-docstring "Advance the cluster config epoch.\n\nCLUSTER BUMPEPOCH \n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "BUMPEPOCH"], :cluster-key-idx 2}
+"XSETID" {:fn-name "xsetid", :fn-docstring "An internal command for replicating stream values.\n\nXSETID key last-id [entries_added] [max_deleted_entry_id]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key last-id], :fn-params-more [key last-id & args], :req-args-fixed ["XSETID" key last-id], :cluster-key-idx 1}
 "ACL CAT" {:fn-name "acl-cat", :fn-docstring "List the ACL categories or the commands inside a category.\n\nACL CAT [categoryname]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1) since the categories and commands are a fixed set.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["ACL" "CAT"], :cluster-key-idx 2}
-"FLUSHDB" {:fn-name "flushdb", :fn-docstring "Remove all keys from the current database.\n\nFLUSHDB [ASYNC]\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["FLUSHDB"], :cluster-key-idx 1}
-"PUBSUB" {:fn-name "pubsub", :fn-docstring "Inspect the state of the Pub/Sub subsystem.\n\nPUBSUB subcommand [argument [argument ...]]\n\nAvailable since: 2.8.0.\n\nTime complexity: O(N) for the CHANNELS subcommand, where N is the number of active channels, and assuming constant time pattern matching (relatively short channels and patterns). O(N) for the NUMSUB subcommand, where N is the number of requested channels. O(1) for the NUMPAT subcommand.", :fn-params-fixed [subcommand], :fn-params-more [subcommand & args], :req-args-fixed ["PUBSUB" subcommand], :cluster-key-idx 1}
-"ZSCAN" {:fn-name "zscan", :fn-docstring "Incrementally iterate sorted sets elements and associated scores.\n\nZSCAN key cursor [MATCH pattern] [COUNT count]\n\nAvailable since: 2.8.0.\n\nTime 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..", :fn-params-fixed [key cursor], :fn-params-more [key cursor & args], :req-args-fixed ["ZSCAN" key cursor], :cluster-key-idx 1}
+"FLUSHDB" {:fn-name "flushdb", :fn-docstring "Remove all keys from the current database.\n\nFLUSHDB [async]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the number of keys in the selected database", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["FLUSHDB"], :cluster-key-idx 1}
+"FUNCTION HELP" {:fn-name "function-help", :fn-docstring "Show helpful text about the different subcommands.\n\nFUNCTION HELP \n\nAvailable since: 7.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["FUNCTION" "HELP"], :cluster-key-idx 2}
+"HRANDFIELD" {:fn-name "hrandfield", :fn-docstring "Get one or multiple random fields from a hash.\n\nHRANDFIELD key [options]\n\nAvailable since: 6.2.0.\n\nTime complexity: O(N) where N is the number of fields returned", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["HRANDFIELD" key], :cluster-key-idx 1}
+"PUBSUB" {:fn-name "pubsub", :fn-docstring "A container for Pub/Sub commands.\n\nPUBSUB \n\nAvailable since: 2.8.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["PUBSUB"], :cluster-key-idx 1}
+"ZSCAN" {:fn-name "zscan", :fn-docstring "Incrementally iterate sorted sets elements and associated scores.\n\nZSCAN key cursor [pattern] [count]\n\nAvailable since: 2.8.0.\n\nTime 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..", :fn-params-fixed [key cursor], :fn-params-more [key cursor & args], :req-args-fixed ["ZSCAN" key cursor], :cluster-key-idx 1}
+"SLOWLOG LEN" {:fn-name "slowlog-len", :fn-docstring "Get the slow log's length.\n\nSLOWLOG LEN \n\nAvailable since: 2.2.12.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SLOWLOG" "LEN"], :cluster-key-idx 2}
 "PERSIST" {:fn-name "persist", :fn-docstring "Remove the expiration from a key.\n\nPERSIST key\n\nAvailable since: 2.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["PERSIST" key], :cluster-key-idx 1}
+"PEXPIRETIME" {:fn-name "pexpiretime", :fn-docstring "Get the expiration Unix timestamp for a key in milliseconds.\n\nPEXPIRETIME key\n\nAvailable since: 7.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["PEXPIRETIME" key], :cluster-key-idx 1}
 "ZSCORE" {:fn-name "zscore", :fn-docstring "Get the score associated with the given member in a sorted set.\n\nZSCORE key member\n\nAvailable since: 1.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key member], :fn-params-more nil, :req-args-fixed ["ZSCORE" key member], :cluster-key-idx 1}
 "CLUSTER REPLICAS" {:fn-name "cluster-replicas", :fn-docstring "List replica nodes of the specified master node.\n\nCLUSTER REPLICAS node-id\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [node-id], :fn-params-more nil, :req-args-fixed ["CLUSTER" "REPLICAS" node-id], :cluster-key-idx 2}
-"XDEL" {:fn-name "xdel", :fn-docstring "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..\n\nXDEL key ID [ID ...]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1) for each single item to delete in the stream, regardless of the stream size.", :fn-params-fixed [key ID], :fn-params-more [key ID & args], :req-args-fixed ["XDEL" key ID], :cluster-key-idx 1}
-"DEBUG OBJECT" {:fn-name "debug-object", :fn-docstring "Get debugging information about a key.\n\nDEBUG OBJECT key\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["DEBUG" "OBJECT" key], :cluster-key-idx 2}
-"SPOP" {:fn-name "spop", :fn-docstring "Remove and return one or multiple random members from a set.\n\nSPOP key [count]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["SPOP" key], :cluster-key-idx 1}
+"XDEL" {:fn-name "xdel", :fn-docstring "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..\n\nXDEL key id [id ...]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1) for each single item to delete in the stream, regardless of the stream size.", :fn-params-fixed [key id], :fn-params-more [key id & args], :req-args-fixed ["XDEL" key id], :cluster-key-idx 1}
+"ZRANDMEMBER" {:fn-name "zrandmember", :fn-docstring "Get one or multiple random elements from a sorted set.\n\nZRANDMEMBER key [options]\n\nAvailable since: 6.2.0.\n\nTime complexity: O(N) where N is the number of elements returned", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["ZRANDMEMBER" key], :cluster-key-idx 1}
+"SPOP" {:fn-name "spop", :fn-docstring "Remove and return one or multiple random members from a set.\n\nSPOP key [count]\n\nAvailable since: 1.0.0.\n\nTime complexity: Without the count argument O(1), otherwise O(N) where N is the value of the passed count.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["SPOP" key], :cluster-key-idx 1}
 "ACL LOAD" {:fn-name "acl-load", :fn-docstring "Reload the ACLs from the configured ACL file.\n\nACL LOAD \n\nAvailable since: 6.0.0.\n\nTime complexity: O(N). Where N is the number of configured users.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ACL" "LOAD"], :cluster-key-idx 2}
 "ZPOPMIN" {:fn-name "zpopmin", :fn-docstring "Remove and return members with the lowest scores in a sorted set.\n\nZPOPMIN key [count]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(log(N)*M) with N being the number of elements in the sorted set, and M being the number of elements popped.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["ZPOPMIN" key], :cluster-key-idx 1}
-"XGROUP" {:fn-name "xgroup", :fn-docstring "Create, destroy, and manage consumer groups..\n\nXGROUP [CREATE key groupname id-or-$] [SETID key groupname id-or-$] [DESTROY key groupname] [DELCONSUMER key groupname consumername]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1) for all the subcommands, with the exception of the DESTROY subcommand which takes an additional O(M) time in order to delete the M entries inside the consumer group pending entries list (PEL).", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["XGROUP"], :cluster-key-idx 1}
-"MEMORY USAGE" {:fn-name "memory-usage", :fn-docstring "Estimate the memory usage of a key.\n\nMEMORY USAGE key [SAMPLES count]\n\nAvailable since: 4.0.0.\n\nTime complexity: O(N) where N is the number of samples.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["MEMORY" "USAGE" key], :cluster-key-idx 2}
+"XGROUP" {:fn-name "xgroup", :fn-docstring "A container for consumer groups commands.\n\nXGROUP \n\nAvailable since: 5.0.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["XGROUP"], :cluster-key-idx 1}
+"CLUSTER LINKS" {:fn-name "cluster-links", :fn-docstring "Returns a list of all TCP links to and from peer nodes in cluster.\n\nCLUSTER LINKS \n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the total number of Cluster nodes", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "LINKS"], :cluster-key-idx 2}
+"MEMORY USAGE" {:fn-name "memory-usage", :fn-docstring "Estimate the memory usage of a key.\n\nMEMORY USAGE key [count]\n\nAvailable since: 4.0.0.\n\nTime complexity: O(N) where N is the number of samples.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["MEMORY" "USAGE" key], :cluster-key-idx 2}
 "BRPOPLPUSH" {:fn-name "brpoplpush", :fn-docstring "Pop an element from a list, push it to another list and return it; or block until one is available.\n\nBRPOPLPUSH source destination timeout\n\nAvailable since: 2.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [source destination timeout], :fn-params-more nil, :req-args-fixed ["BRPOPLPUSH" source destination timeout], :cluster-key-idx 1}
-"AUTH" {:fn-name "auth", :fn-docstring "Authenticate to the server.\n\nAUTH password\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [password], :fn-params-more nil, :req-args-fixed ["AUTH" password], :cluster-key-idx 1}
-"EXISTS" {:fn-name "exists", :fn-docstring "Determine if a key exists.\n\nEXISTS key [key ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["EXISTS" key], :cluster-key-idx 1}
+"AUTH" {:fn-name "auth", :fn-docstring "Authenticate to the server.\n\nAUTH [username] password\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the number of passwords defined for the user", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["AUTH"], :cluster-key-idx 1}
+"EXISTS" {:fn-name "exists", :fn-docstring "Determine if a key exists.\n\nEXISTS key [key ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the number of keys to check.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["EXISTS" key], :cluster-key-idx 1}
 "CLUSTER FORGET" {:fn-name "cluster-forget", :fn-docstring "Remove a node from the nodes table.\n\nCLUSTER FORGET node-id\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [node-id], :fn-params-more nil, :req-args-fixed ["CLUSTER" "FORGET" node-id], :cluster-key-idx 2}
+"MODULE HELP" {:fn-name "module-help", :fn-docstring "Show helpful text about the different subcommands.\n\nMODULE HELP \n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MODULE" "HELP"], :cluster-key-idx 2}
+"FUNCTION KILL" {:fn-name "function-kill", :fn-docstring "Kill the function currently in execution..\n\nFUNCTION KILL \n\nAvailable since: 7.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["FUNCTION" "KILL"], :cluster-key-idx 2}
+"FUNCTION LIST" {:fn-name "function-list", :fn-docstring "List information about all the functions.\n\nFUNCTION LIST [library-name-pattern] [withcode]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of functions", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["FUNCTION" "LIST"], :cluster-key-idx 2}
+"GETEX" {:fn-name "getex", :fn-docstring "Get the value of a key and optionally set its expiration.\n\nGETEX key [expiration]\n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["GETEX" key], :cluster-key-idx 1}
+"FCALL" {:fn-name "fcall", :fn-docstring "Invoke a function.\n\nFCALL function numkeys [key [key ...]] [arg [arg ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: Depends on the function that is executed.", :fn-params-fixed [function numkeys], :fn-params-more [function numkeys & args], :req-args-fixed ["FCALL" function numkeys], :cluster-key-idx 1}
+"PUBSUB HELP" {:fn-name "pubsub-help", :fn-docstring "Show helpful text about the different subcommands.\n\nPUBSUB HELP \n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["PUBSUB" "HELP"], :cluster-key-idx 2}
+"CLIENT" {:fn-name "client", :fn-docstring "A container for client connection commands.\n\nCLIENT \n\nAvailable since: 2.4.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLIENT"], :cluster-key-idx 1}
 "CLUSTER SLOTS" {:fn-name "cluster-slots", :fn-docstring "Get array of Cluster slot to node mappings.\n\nCLUSTER SLOTS \n\nAvailable since: 3.0.0.\n\nTime complexity: O(N) where N is the total number of Cluster nodes", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "SLOTS"], :cluster-key-idx 2}
-"GEOPOS" {:fn-name "geopos", :fn-docstring "Returns longitude and latitude of members of a geospatial index.\n\nGEOPOS key member [member ...]\n\nAvailable since: 3.2.0.\n\nTime complexity: O(log(N)) for each member requested, where N is the number of elements in the sorted set.", :fn-params-fixed [key member], :fn-params-more [key member & args], :req-args-fixed ["GEOPOS" key member], :cluster-key-idx 1}
+"GEOPOS" {:fn-name "geopos", :fn-docstring "Returns longitude and latitude of members of a geospatial index.\n\nGEOPOS key member [member ...]\n\nAvailable since: 3.2.0.\n\nTime complexity: O(N) where N is the number of members requested.", :fn-params-fixed [key member], :fn-params-more [key member & args], :req-args-fixed ["GEOPOS" key member], :cluster-key-idx 1}
+"PUBSUB CHANNELS" {:fn-name "pubsub-channels", :fn-docstring "List active channels.\n\nPUBSUB CHANNELS [pattern]\n\nAvailable since: 2.8.0.\n\nTime complexity: O(N) where N is the number of active channels, and assuming constant time pattern matching (relatively short channels and patterns)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["PUBSUB" "CHANNELS"], :cluster-key-idx 2}
+"ACL" {:fn-name "acl", :fn-docstring "A container for Access List Control commands .\n\nACL \n\nAvailable since: 6.0.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ACL"], :cluster-key-idx 1}
 "CLIENT ID" {:fn-name "client-id", :fn-docstring "Returns the client ID for the current connection.\n\nCLIENT ID \n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLIENT" "ID"], :cluster-key-idx 2}
-"PEXPIREAT" {:fn-name "pexpireat", :fn-docstring "Set the expiration for a key as a UNIX timestamp specified in milliseconds.\n\nPEXPIREAT key milliseconds-timestamp\n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [key milliseconds-timestamp], :fn-params-more nil, :req-args-fixed ["PEXPIREAT" key milliseconds-timestamp], :cluster-key-idx 1}
-"SSCAN" {:fn-name "sscan", :fn-docstring "Incrementally iterate Set elements.\n\nSSCAN key cursor [MATCH pattern] [COUNT count]\n\nAvailable since: 2.8.0.\n\nTime 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..", :fn-params-fixed [key cursor], :fn-params-more [key cursor & args], :req-args-fixed ["SSCAN" key cursor], :cluster-key-idx 1}
+"PEXPIREAT" {:fn-name "pexpireat", :fn-docstring "Set the expiration for a key as a UNIX timestamp specified in milliseconds.\n\nPEXPIREAT key unix-time-milliseconds [condition]\n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [key unix-time-milliseconds], :fn-params-more [key unix-time-milliseconds & args], :req-args-fixed ["PEXPIREAT" key unix-time-milliseconds], :cluster-key-idx 1}
+"XGROUP CREATE" {:fn-name "xgroup-create", :fn-docstring "Create a consumer group..\n\nXGROUP CREATE key groupname id [mkstream] [entries_read]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key groupname id], :fn-params-more [key groupname id & args], :req-args-fixed ["XGROUP" "CREATE" key groupname id], :cluster-key-idx 2}
+"SSCAN" {:fn-name "sscan", :fn-docstring "Incrementally iterate Set elements.\n\nSSCAN key cursor [pattern] [count]\n\nAvailable since: 2.8.0.\n\nTime 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..", :fn-params-fixed [key cursor], :fn-params-more [key cursor & args], :req-args-fixed ["SSCAN" key cursor], :cluster-key-idx 1}
 "HEXISTS" {:fn-name "hexists", :fn-docstring "Determine if a hash field exists.\n\nHEXISTS key field\n\nAvailable since: 2.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key field], :fn-params-more nil, :req-args-fixed ["HEXISTS" key field], :cluster-key-idx 1}
-"XREAD" {:fn-name "xread", :fn-docstring "Return never seen elements in multiple streams, with IDs greater than the ones reported by the caller for each stream. Can block..\n\nXREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]\n\nAvailable since: 5.0.0.\n\nTime 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.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["XREAD"], :cluster-key-idx 1}
-"HELLO" {:fn-name "hello", :fn-docstring "switch Redis protocol.\n\nHELLO protover [AUTH username password] [SETNAME clientname]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [protover], :fn-params-more [protover & args], :req-args-fixed ["HELLO" protover], :cluster-key-idx 1}
-"TTL" {:fn-name "ttl", :fn-docstring "Get the time to live for a key.\n\nTTL key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["TTL" key], :cluster-key-idx 1}
-"BGREWRITEAOF" {:fn-name "bgrewriteaof", :fn-docstring "Asynchronously rewrite the append-only file.\n\nBGREWRITEAOF \n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["BGREWRITEAOF"], :cluster-key-idx 1}
+"XREAD" {:fn-name "xread", :fn-docstring "Return never seen elements in multiple streams, with IDs greater than the ones reported by the caller for each stream. Can block..\n\nXREAD [count] [milliseconds] streams\n\nAvailable since: 5.0.0.\n\nTime 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.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["XREAD"], :cluster-key-idx 1}
+"HELLO" {:fn-name "hello", :fn-docstring "Handshake with Redis.\n\nHELLO [arguments]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["HELLO"], :cluster-key-idx 1}
+"TTL" {:fn-name "ttl", :fn-docstring "Get the time to live for a key in seconds.\n\nTTL key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["TTL" key], :cluster-key-idx 1}
+"BGREWRITEAOF" {:fn-name "bgrewriteaof", :fn-docstring "Asynchronously rewrite the append-only file.\n\nBGREWRITEAOF \n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["BGREWRITEAOF"], :cluster-key-idx 1}
 "CLUSTER SAVECONFIG" {:fn-name "cluster-saveconfig", :fn-docstring "Forces the node to save cluster state on disk.\n\nCLUSTER SAVECONFIG \n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "SAVECONFIG"], :cluster-key-idx 2}
+"XINFO HELP" {:fn-name "xinfo-help", :fn-docstring "Show helpful text about the different subcommands.\n\nXINFO HELP \n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["XINFO" "HELP"], :cluster-key-idx 2}
 "COMMAND COUNT" {:fn-name "command-count", :fn-docstring "Get total number of Redis commands.\n\nCOMMAND COUNT \n\nAvailable since: 2.8.13.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["COMMAND" "COUNT"], :cluster-key-idx 2}
+"ZMSCORE" {:fn-name "zmscore", :fn-docstring "Get the score associated with the given members in a sorted set.\n\nZMSCORE key member [member ...]\n\nAvailable since: 6.2.0.\n\nTime complexity: O(N) where N is the number of members being requested.", :fn-params-fixed [key member], :fn-params-more [key member & args], :req-args-fixed ["ZMSCORE" key member], :cluster-key-idx 1}
 "MODULE LIST" {:fn-name "module-list", :fn-docstring "List all modules loaded by the server.\n\nMODULE LIST \n\nAvailable since: 4.0.0.\n\nTime complexity: O(N) where N is the number of loaded modules.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MODULE" "LIST"], :cluster-key-idx 2}
-"CLIENT UNBLOCK" {:fn-name "client-unblock", :fn-docstring "Unblock a client blocked in a blocking command from a different connection.\n\nCLIENT UNBLOCK client-id [TIMEOUT|ERROR]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(log N) where N is the number of client connections", :fn-params-fixed [client-id], :fn-params-more [client-id & args], :req-args-fixed ["CLIENT" "UNBLOCK" client-id], :cluster-key-idx 2}
+"CLIENT UNBLOCK" {:fn-name "client-unblock", :fn-docstring "Unblock a client blocked in a blocking command from a different connection.\n\nCLIENT UNBLOCK client-id [timeout_error]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(log N) where N is the number of client connections", :fn-params-fixed [client-id], :fn-params-more [client-id & args], :req-args-fixed ["CLIENT" "UNBLOCK" client-id], :cluster-key-idx 2}
+"RESTORE-ASKING" {:fn-name "restore-asking", :fn-docstring "An internal command for migrating keys in a cluster.\n\nRESTORE-ASKING key ttl serialized-value [replace] [absttl] [seconds] [frequency]\n\nAvailable since: 3.0.0.\n\nTime 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)).", :fn-params-fixed [key ttl serialized-value], :fn-params-more [key ttl serialized-value & args], :req-args-fixed ["RESTORE-ASKING" key ttl serialized-value], :cluster-key-idx 1}
 "RPOPLPUSH" {:fn-name "rpoplpush", :fn-docstring "Remove the last element in a list, prepend it to another list and return it.\n\nRPOPLPUSH source destination\n\nAvailable since: 1.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [source destination], :fn-params-more nil, :req-args-fixed ["RPOPLPUSH" source destination], :cluster-key-idx 1}
 "PFMERGE" {:fn-name "pfmerge", :fn-docstring "Merge N different HyperLogLogs into a single one..\n\nPFMERGE destkey sourcekey [sourcekey ...]\n\nAvailable since: 2.8.9.\n\nTime complexity: O(N) to merge N HyperLogLogs, but with high constant times.", :fn-params-fixed [destkey sourcekey], :fn-params-more [destkey sourcekey & args], :req-args-fixed ["PFMERGE" destkey sourcekey], :cluster-key-idx 1}
-"ECHO" {:fn-name "echo", :fn-docstring "Echo the given string.\n\nECHO message\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [message], :fn-params-more nil, :req-args-fixed ["ECHO" message], :cluster-key-idx 1}
-"SAVE" {:fn-name "save", :fn-docstring "Synchronously save the dataset to disk.\n\nSAVE \n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SAVE"], :cluster-key-idx 1}
+"CLUSTER SHARDS" {:fn-name "cluster-shards", :fn-docstring "Get array of cluster slots to node mappings.\n\nCLUSTER SHARDS \n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the total number of cluster nodes", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLUSTER" "SHARDS"], :cluster-key-idx 2}
+"ECHO" {:fn-name "echo", :fn-docstring "Echo the given string.\n\nECHO message\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [message], :fn-params-more nil, :req-args-fixed ["ECHO" message], :cluster-key-idx 1}
+"SAVE" {:fn-name "save", :fn-docstring "Synchronously save the dataset to disk.\n\nSAVE \n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the total number of keys in all databases", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SAVE"], :cluster-key-idx 1}
 "ZLEXCOUNT" {:fn-name "zlexcount", :fn-docstring "Count the number of members in a sorted set between a given lexicographical range.\n\nZLEXCOUNT key min max\n\nAvailable since: 2.8.9.\n\nTime complexity: O(log(N)) with N being the number of elements in the sorted set.", :fn-params-fixed [key min max], :fn-params-more nil, :req-args-fixed ["ZLEXCOUNT" key min max], :cluster-key-idx 1}
-"COMMAND INFO" {:fn-name "command-info", :fn-docstring "Get array of specific Redis command details.\n\nCOMMAND INFO command-name [command-name ...]\n\nAvailable since: 2.8.13.\n\nTime complexity: O(N) when N is number of commands to look up", :fn-params-fixed [command-name], :fn-params-more [command-name & args], :req-args-fixed ["COMMAND" "INFO" command-name], :cluster-key-idx 2}
-"PEXPIRE" {:fn-name "pexpire", :fn-docstring "Set a key's time to live in milliseconds.\n\nPEXPIRE key milliseconds\n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [key milliseconds], :fn-params-more nil, :req-args-fixed ["PEXPIRE" key milliseconds], :cluster-key-idx 1}
+"COMMAND LIST" {:fn-name "command-list", :fn-docstring "Get an array of Redis command names.\n\nCOMMAND LIST [filterby]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the total number of Redis commands", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["COMMAND" "LIST"], :cluster-key-idx 2}
+"COMMAND INFO" {:fn-name "command-info", :fn-docstring "Get array of specific Redis command details, or all when no argument is given..\n\nCOMMAND INFO [command-name [command-name ...]]\n\nAvailable since: 2.8.13.\n\nTime complexity: O(N) where N is the number of commands to look up", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["COMMAND" "INFO"], :cluster-key-idx 2}
+"PEXPIRE" {:fn-name "pexpire", :fn-docstring "Set a key's time to live in milliseconds.\n\nPEXPIRE key milliseconds [condition]\n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [key milliseconds], :fn-params-more [key milliseconds & args], :req-args-fixed ["PEXPIRE" key milliseconds], :cluster-key-idx 1}
 "GEOHASH" {:fn-name "geohash", :fn-docstring "Returns members of a geospatial index as standard geohash strings.\n\nGEOHASH key member [member ...]\n\nAvailable since: 3.2.0.\n\nTime complexity: O(log(N)) for each member requested, where N is the number of elements in the sorted set.", :fn-params-fixed [key member], :fn-params-more [key member & args], :req-args-fixed ["GEOHASH" key member], :cluster-key-idx 1}
 "HSETNX" {:fn-name "hsetnx", :fn-docstring "Set the value of a hash field, only if the field does not exist.\n\nHSETNX key field value\n\nAvailable since: 2.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key field value], :fn-params-more nil, :req-args-fixed ["HSETNX" key field value], :cluster-key-idx 1}
+"PFDEBUG" {:fn-name "pfdebug", :fn-docstring "Internal commands for debugging HyperLogLog values.\n\nPFDEBUG subcommand key\n\nAvailable since: 2.8.9.\n\nTime complexity: N/A", :fn-params-fixed [subcommand key], :fn-params-more nil, :req-args-fixed ["PFDEBUG" subcommand key], :cluster-key-idx 1}
 "READONLY" {:fn-name "readonly", :fn-docstring "Enables read queries for a connection to a cluster replica node.\n\nREADONLY \n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["READONLY"], :cluster-key-idx 1}
-"CONFIG SET" {:fn-name "config-set", :fn-docstring "Set a configuration parameter to the given value.\n\nCONFIG SET parameter value\n\nAvailable since: 2.0.0.\n\n", :fn-params-fixed [parameter value], :fn-params-more nil, :req-args-fixed ["CONFIG" "SET" parameter value], :cluster-key-idx 2}
+"CONFIG SET" {:fn-name "config-set", :fn-docstring "Set configuration parameters to the given values.\n\nCONFIG SET parameter_value [parameter_value ...]\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) when N is the number of configuration parameters provided", :fn-params-fixed [parameter_value], :fn-params-more [parameter_value & args], :req-args-fixed ["CONFIG" "SET" parameter_value], :cluster-key-idx 2}
 "GETRANGE" {:fn-name "getrange", :fn-docstring "Get a substring of the string stored at a key.\n\nGETRANGE key start end\n\nAvailable since: 2.4.0.\n\nTime 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.", :fn-params-fixed [key start end], :fn-params-more nil, :req-args-fixed ["GETRANGE" key start end], :cluster-key-idx 1}
 "DEL" {:fn-name "del", :fn-docstring "Delete a key.\n\nDEL key [key ...]\n\nAvailable since: 1.0.0.\n\nTime 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).", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["DEL" key], :cluster-key-idx 1}
 "TIME" {:fn-name "time", :fn-docstring "Return the current server time.\n\nTIME \n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["TIME"], :cluster-key-idx 1}
+"SSUBSCRIBE" {:fn-name "ssubscribe", :fn-docstring "Listen for messages published to the given shard channels.\n\nSSUBSCRIBE shardchannel [shardchannel ...]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of shard channels to subscribe to.", :fn-params-fixed [shardchannel], :fn-params-more [shardchannel & args], :req-args-fixed ["SSUBSCRIBE" shardchannel], :cluster-key-idx 1}
 "COMMAND" {:fn-name "command", :fn-docstring "Get array of Redis command details.\n\nCOMMAND \n\nAvailable since: 2.8.13.\n\nTime complexity: O(N) where N is the total number of Redis commands", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["COMMAND"], :cluster-key-idx 1}
+"SUBSTR" {:fn-name "substr", :fn-docstring "Get a substring of the string stored at a key.\n\nSUBSTR key start end\n\nAvailable since: 1.0.0.\n\nTime 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.", :fn-params-fixed [key start end], :fn-params-more nil, :req-args-fixed ["SUBSTR" key start end], :cluster-key-idx 1}
+"SUNSUBSCRIBE" {:fn-name "sunsubscribe", :fn-docstring "Stop listening for messages posted to the given shard channels.\n\nSUNSUBSCRIBE [shardchannel [shardchannel ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of clients already subscribed to a shard channel.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["SUNSUBSCRIBE"], :cluster-key-idx 1}
 "ZREMRANGEBYSCORE" {:fn-name "zremrangebyscore", :fn-docstring "Remove all members in a sorted set within the given scores.\n\nZREMRANGEBYSCORE key min max\n\nAvailable since: 1.2.0.\n\nTime 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.", :fn-params-fixed [key min max], :fn-params-more nil, :req-args-fixed ["ZREMRANGEBYSCORE" key min max], :cluster-key-idx 1}
+"PFSELFTEST" {:fn-name "pfselftest", :fn-docstring "An internal command for testing HyperLogLog values.\n\nPFSELFTEST \n\nAvailable since: 2.8.9.\n\nTime complexity: N/A", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["PFSELFTEST"], :cluster-key-idx 1}
 "SREM" {:fn-name "srem", :fn-docstring "Remove one or more members from a set.\n\nSREM key member [member ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the number of members to be removed.", :fn-params-fixed [key member], :fn-params-more [key member & args], :req-args-fixed ["SREM" key member], :cluster-key-idx 1}
+"SLOWLOG RESET" {:fn-name "slowlog-reset", :fn-docstring "Clear all entries from the slow log.\n\nSLOWLOG RESET \n\nAvailable since: 2.2.12.\n\nTime complexity: O(N) where N is the number of entries in the slowlog", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SLOWLOG" "RESET"], :cluster-key-idx 2}
+"FUNCTION" {:fn-name "function", :fn-docstring "A container for function commands.\n\nFUNCTION \n\nAvailable since: 7.0.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["FUNCTION"], :cluster-key-idx 1}
 "ZREMRANGEBYLEX" {:fn-name "zremrangebylex", :fn-docstring "Remove all members in a sorted set between the given lexicographical range.\n\nZREMRANGEBYLEX key min max\n\nAvailable since: 2.8.9.\n\nTime 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.", :fn-params-fixed [key min max], :fn-params-more nil, :req-args-fixed ["ZREMRANGEBYLEX" key min max], :cluster-key-idx 1}
-"ZADD" {:fn-name "zadd", :fn-docstring "Add one or more members to a sorted set, or update its score if it already exists.\n\nZADD key [NX|XX] [CH] [INCR] score member [score member ...]\n\nAvailable since: 1.2.0.\n\nTime complexity: O(log(N)) for each item added, where N is the number of elements in the sorted set.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["ZADD" key], :cluster-key-idx 1}
+"ZADD" {:fn-name "zadd", :fn-docstring "Add one or more members to a sorted set, or update its score if it already exists.\n\nZADD key [condition] [comparison] [change] [increment] score_member [score_member ...]\n\nAvailable since: 1.2.0.\n\nTime complexity: O(log(N)) for each item added, where N is the number of elements in the sorted set.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["ZADD" key], :cluster-key-idx 1}
 "RPUSH" {:fn-name "rpush", :fn-docstring "Append one or multiple elements to a list.\n\nRPUSH key element [element ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.", :fn-params-fixed [key element], :fn-params-more [key element & args], :req-args-fixed ["RPUSH" key element], :cluster-key-idx 1}
 "INCRBY" {:fn-name "incrby", :fn-docstring "Increment the integer value of a key by the given amount.\n\nINCRBY key increment\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key increment], :fn-params-more nil, :req-args-fixed ["INCRBY" key increment], :cluster-key-idx 1}
-"LATENCY GRAPH" {:fn-name "latency-graph", :fn-docstring "Return a latency graph for the event..\n\nLATENCY GRAPH event\n\nAvailable since: 2.8.13.\n\n", :fn-params-fixed [event], :fn-params-more nil, :req-args-fixed ["LATENCY" "GRAPH" event], :cluster-key-idx 2}
-"LATENCY DOCTOR" {:fn-name "latency-doctor", :fn-docstring "Return a human readable latency analysis report..\n\nLATENCY DOCTOR \n\nAvailable since: 2.8.13.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["LATENCY" "DOCTOR"], :cluster-key-idx 2}
-"ROLE" {:fn-name "role", :fn-docstring "Return the role of the instance in the context of replication.\n\nROLE \n\nAvailable since: 2.8.12.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ROLE"], :cluster-key-idx 1}
+"LATENCY GRAPH" {:fn-name "latency-graph", :fn-docstring "Return a latency graph for the event..\n\nLATENCY GRAPH event\n\nAvailable since: 2.8.13.\n\nTime complexity: O(1)", :fn-params-fixed [event], :fn-params-more nil, :req-args-fixed ["LATENCY" "GRAPH" event], :cluster-key-idx 2}
+"LATENCY DOCTOR" {:fn-name "latency-doctor", :fn-docstring "Return a human readable latency analysis report..\n\nLATENCY DOCTOR \n\nAvailable since: 2.8.13.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["LATENCY" "DOCTOR"], :cluster-key-idx 2}
+"PUBSUB SHARDCHANNELS" {:fn-name "pubsub-shardchannels", :fn-docstring "List active shard channels.\n\nPUBSUB SHARDCHANNELS [pattern]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of active shard channels, and assuming constant time pattern matching (relatively short shard channels).", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["PUBSUB" "SHARDCHANNELS"], :cluster-key-idx 2}
+"ROLE" {:fn-name "role", :fn-docstring "Return the role of the instance in the context of replication.\n\nROLE \n\nAvailable since: 2.8.12.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ROLE"], :cluster-key-idx 1}
 "RENAMENX" {:fn-name "renamenx", :fn-docstring "Rename a key, only if the new key does not exist.\n\nRENAMENX key newkey\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key newkey], :fn-params-more nil, :req-args-fixed ["RENAMENX" key newkey], :cluster-key-idx 1}
+"XINFO GROUPS" {:fn-name "xinfo-groups", :fn-docstring "List the consumer groups of a stream.\n\nXINFO GROUPS key\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["XINFO" "GROUPS" key], :cluster-key-idx 2}
 "SETBIT" {:fn-name "setbit", :fn-docstring "Sets or clears the bit at offset in the string value stored at key.\n\nSETBIT key offset value\n\nAvailable since: 2.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key offset value], :fn-params-more nil, :req-args-fixed ["SETBIT" key offset value], :cluster-key-idx 1}
-"LINSERT" {:fn-name "linsert", :fn-docstring "Insert an element before or after another element in a list.\n\nLINSERT key BEFORE|AFTER pivot element\n\nAvailable since: 2.2.0.\n\nTime 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).", :fn-params-fixed [key where pivot element], :fn-params-more nil, :req-args-fixed ["LINSERT" key where pivot element], :cluster-key-idx 1}
-"FLUSHALL" {:fn-name "flushall", :fn-docstring "Remove all keys from all databases.\n\nFLUSHALL [ASYNC]\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["FLUSHALL"], :cluster-key-idx 1}
+"LINSERT" {:fn-name "linsert", :fn-docstring "Insert an element before or after another element in a list.\n\nLINSERT key where pivot element\n\nAvailable since: 2.2.0.\n\nTime 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).", :fn-params-fixed [key where pivot element], :fn-params-more nil, :req-args-fixed ["LINSERT" key where pivot element], :cluster-key-idx 1}
+"FLUSHALL" {:fn-name "flushall", :fn-docstring "Remove all keys from all databases.\n\nFLUSHALL [async]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the total number of keys in all databases", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["FLUSHALL"], :cluster-key-idx 1}
 "CLUSTER REPLICATE" {:fn-name "cluster-replicate", :fn-docstring "Reconfigure a node as a replica of the specified master node.\n\nCLUSTER REPLICATE node-id\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [node-id], :fn-params-more nil, :req-args-fixed ["CLUSTER" "REPLICATE" node-id], :cluster-key-idx 2}
-"LATENCY HISTORY" {:fn-name "latency-history", :fn-docstring "Return timestamp-latency samples for the event..\n\nLATENCY HISTORY event\n\nAvailable since: 2.8.13.\n\n", :fn-params-fixed [event], :fn-params-more nil, :req-args-fixed ["LATENCY" "HISTORY" event], :cluster-key-idx 2}
-"SELECT" {:fn-name "select", :fn-docstring "Change the selected database for the current connection.\n\nSELECT index\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [index], :fn-params-more nil, :req-args-fixed ["SELECT" index], :cluster-key-idx 1}
+"LATENCY HISTORY" {:fn-name "latency-history", :fn-docstring "Return timestamp-latency samples for the event..\n\nLATENCY HISTORY event\n\nAvailable since: 2.8.13.\n\nTime complexity: O(1)", :fn-params-fixed [event], :fn-params-more nil, :req-args-fixed ["LATENCY" "HISTORY" event], :cluster-key-idx 2}
+"GEORADIUS_RO" {:fn-name "georadius_ro", :fn-docstring "A read-only variant for GEORADIUS.\n\nGEORADIUS_RO key longitude latitude radius unit [withcoord] [withdist] [withhash] [count] [order]\n\nAvailable since: 3.2.10.\n\nTime 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.", :fn-params-fixed [key longitude latitude radius unit], :fn-params-more [key longitude latitude radius unit & args], :req-args-fixed ["GEORADIUS_RO" key longitude latitude radius unit], :cluster-key-idx 1}
+"SELECT" {:fn-name "select", :fn-docstring "Change the selected database for the current connection.\n\nSELECT index\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [index], :fn-params-more nil, :req-args-fixed ["SELECT" index], :cluster-key-idx 1}
 "MGET" {:fn-name "mget", :fn-docstring "Get the values of all the given keys.\n\nMGET key [key ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the number of keys to retrieve.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["MGET" key], :cluster-key-idx 1}
+"SLOWLOG HELP" {:fn-name "slowlog-help", :fn-docstring "Show helpful text about the different subcommands.\n\nSLOWLOG HELP \n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SLOWLOG" "HELP"], :cluster-key-idx 2}
 "MONITOR" {:fn-name "monitor", :fn-docstring "Listen for all requests received by the server in real time.\n\nMONITOR \n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MONITOR"], :cluster-key-idx 1}
+"FUNCTION RESTORE" {:fn-name "function-restore", :fn-docstring "Restore all the functions on the given payload.\n\nFUNCTION RESTORE serialized-value [policy]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of functions on the payload", :fn-params-fixed [serialized-value], :fn-params-more [serialized-value & args], :req-args-fixed ["FUNCTION" "RESTORE" serialized-value], :cluster-key-idx 2}
 "ACL HELP" {:fn-name "acl-help", :fn-docstring "Show helpful text about the different subcommands.\n\nACL HELP \n\nAvailable since: 6.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ACL" "HELP"], :cluster-key-idx 2}
-"XCLAIM" {:fn-name "xclaim", :fn-docstring "Changes (or acquires) ownership of a message in a consumer group, as if the message was delivered to the specified consumer..\n\nXCLAIM key group consumer min-idle-time ID [ID ...] [IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count] [FORCE] [JUSTID]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(log N) with N being the number of messages in the PEL of the consumer group.", :fn-params-fixed [key group consumer min-idle-time ID], :fn-params-more [key group consumer min-idle-time ID & args], :req-args-fixed ["XCLAIM" key group consumer min-idle-time ID], :cluster-key-idx 1}
+"XCLAIM" {:fn-name "xclaim", :fn-docstring "Changes (or acquires) ownership of a message in a consumer group, as if the message was delivered to the specified consumer..\n\nXCLAIM key group consumer min-idle-time id [id ...] [ms] [unix-time-milliseconds] [count] [force] [justid] [id]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(log N) with N being the number of messages in the PEL of the consumer group.", :fn-params-fixed [key group consumer min-idle-time id], :fn-params-more [key group consumer min-idle-time id & args], :req-args-fixed ["XCLAIM" key group consumer min-idle-time id], :cluster-key-idx 1}
 "CLUSTER COUNT-FAILURE-REPORTS" {:fn-name "cluster-count-failure-reports", :fn-docstring "Return the number of failure reports active for a given node.\n\nCLUSTER COUNT-FAILURE-REPORTS node-id\n\nAvailable since: 3.0.0.\n\nTime complexity: O(N) where N is the number of failure reports", :fn-params-fixed [node-id], :fn-params-more nil, :req-args-fixed ["CLUSTER" "COUNT-FAILURE-REPORTS" node-id], :cluster-key-idx 2}
-"HSET" {:fn-name "hset", :fn-docstring "Set the string value of a hash field.\n\nHSET key field value [field value ...]\n\nAvailable since: 2.0.0.\n\nTime 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.", :fn-params-fixed [key field value], :fn-params-more [key field value & args], :req-args-fixed ["HSET" key field value], :cluster-key-idx 1}
-"LATENCY RESET" {:fn-name "latency-reset", :fn-docstring "Reset latency data for one or more events..\n\nLATENCY RESET [event [event ...]]\n\nAvailable since: 2.8.13.\n\n", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["LATENCY" "RESET"], :cluster-key-idx 2}
-"QUIT" {:fn-name "quit", :fn-docstring "Close the connection.\n\nQUIT \n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["QUIT"], :cluster-key-idx 1}
+"LATENCY HISTOGRAM" {:fn-name "latency-histogram", :fn-docstring "Return the cumulative distribution of latencies of a subset of commands or all..\n\nLATENCY HISTOGRAM [command [command ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of commands with latency information being retrieved.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["LATENCY" "HISTOGRAM"], :cluster-key-idx 2}
+"HSET" {:fn-name "hset", :fn-docstring "Set the string value of a hash field.\n\nHSET key field_value [field_value ...]\n\nAvailable since: 2.0.0.\n\nTime 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.", :fn-params-fixed [key field_value], :fn-params-more [key field_value & args], :req-args-fixed ["HSET" key field_value], :cluster-key-idx 1}
+"LATENCY RESET" {:fn-name "latency-reset", :fn-docstring "Reset latency data for one or more events..\n\nLATENCY RESET [event [event ...]]\n\nAvailable since: 2.8.13.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["LATENCY" "RESET"], :cluster-key-idx 2}
+"COMMAND HELP" {:fn-name "command-help", :fn-docstring "Show helpful text about the different subcommands.\n\nCOMMAND HELP \n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["COMMAND" "HELP"], :cluster-key-idx 2}
+"QUIT" {:fn-name "quit", :fn-docstring "Close the connection.\n\nQUIT \n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["QUIT"], :cluster-key-idx 1}
+"SPUBLISH" {:fn-name "spublish", :fn-docstring "Post a message to a shard channel.\n\nSPUBLISH shardchannel message\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of clients subscribed to the receiving shard channel.", :fn-params-fixed [shardchannel message], :fn-params-more nil, :req-args-fixed ["SPUBLISH" shardchannel message], :cluster-key-idx 1}
+"DEBUG" {:fn-name "debug", :fn-docstring "A container for debugging commands.\n\nDEBUG \n\nAvailable since: 1.0.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["DEBUG"], :cluster-key-idx 1}
 "LTRIM" {:fn-name "ltrim", :fn-docstring "Trim a list to the specified range.\n\nLTRIM key start stop\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the number of elements to be removed by the operation.", :fn-params-fixed [key start stop], :fn-params-more nil, :req-args-fixed ["LTRIM" key start stop], :cluster-key-idx 1}
+"COPY" {:fn-name "copy", :fn-docstring "Copy a key.\n\nCOPY source destination [destination-db] [replace]\n\nAvailable since: 6.2.0.\n\nTime complexity: O(N) worst case for collections, where N is the number of nested items. O(1) for string values.", :fn-params-fixed [source destination], :fn-params-more [source destination & args], :req-args-fixed ["COPY" source destination], :cluster-key-idx 1}
 "ACL GENPASS" {:fn-name "acl-genpass", :fn-docstring "Generate a pseudorandom secure password to use for ACL users.\n\nACL GENPASS [bits]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["ACL" "GENPASS"], :cluster-key-idx 2}
-"SCAN" {:fn-name "scan", :fn-docstring "Incrementally iterate the keys space.\n\nSCAN cursor [MATCH pattern] [COUNT count] [TYPE type]\n\nAvailable since: 2.8.0.\n\nTime 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.", :fn-params-fixed [cursor], :fn-params-more [cursor & args], :req-args-fixed ["SCAN" cursor], :cluster-key-idx 1}
+"SCAN" {:fn-name "scan", :fn-docstring "Incrementally iterate the keys space.\n\nSCAN cursor [pattern] [count] [type]\n\nAvailable since: 2.8.0.\n\nTime 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.", :fn-params-fixed [cursor], :fn-params-more [cursor & args], :req-args-fixed ["SCAN" cursor], :cluster-key-idx 1}
 "INCRBYFLOAT" {:fn-name "incrbyfloat", :fn-docstring "Increment the float value of a key by the given amount.\n\nINCRBYFLOAT key increment\n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [key increment], :fn-params-more nil, :req-args-fixed ["INCRBYFLOAT" key increment], :cluster-key-idx 1}
-"CLIENT PAUSE" {:fn-name "client-pause", :fn-docstring "Stop processing commands from clients for some time.\n\nCLIENT PAUSE timeout\n\nAvailable since: 2.9.50.\n\nTime complexity: O(1)", :fn-params-fixed [timeout], :fn-params-more nil, :req-args-fixed ["CLIENT" "PAUSE" timeout], :cluster-key-idx 2}
+"CLIENT PAUSE" {:fn-name "client-pause", :fn-docstring "Stop processing commands from clients for some time.\n\nCLIENT PAUSE timeout [mode]\n\nAvailable since: 2.9.50.\n\nTime complexity: O(1)", :fn-params-fixed [timeout], :fn-params-more [timeout & args], :req-args-fixed ["CLIENT" "PAUSE" timeout], :cluster-key-idx 2}
 "TOUCH" {:fn-name "touch", :fn-docstring "Alters the last access time of a key(s). Returns the number of existing keys specified..\n\nTOUCH key [key ...]\n\nAvailable since: 3.2.1.\n\nTime complexity: O(N) where N is the number of keys that will be touched.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["TOUCH" key], :cluster-key-idx 1}
 "RANDOMKEY" {:fn-name "randomkey", :fn-docstring "Return a random key from the keyspace.\n\nRANDOMKEY \n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["RANDOMKEY"], :cluster-key-idx 1}
-"LASTSAVE" {:fn-name "lastsave", :fn-docstring "Get the UNIX time stamp of the last successful save to disk.\n\nLASTSAVE \n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["LASTSAVE"], :cluster-key-idx 1}
-"XACK" {:fn-name "xack", :fn-docstring "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..\n\nXACK key group ID [ID ...]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1) for each message ID processed.", :fn-params-fixed [key group ID], :fn-params-more [key group ID & args], :req-args-fixed ["XACK" key group ID], :cluster-key-idx 1}
-"SLOWLOG" {:fn-name "slowlog", :fn-docstring "Manages the Redis slow queries log.\n\nSLOWLOG subcommand [argument]\n\nAvailable since: 2.2.12.\n\n", :fn-params-fixed [subcommand], :fn-params-more [subcommand & args], :req-args-fixed ["SLOWLOG" subcommand], :cluster-key-idx 1}
-"ZREVRANGE" {:fn-name "zrevrange", :fn-docstring "Return a range of members in a sorted set, by index, with scores ordered from high to low.\n\nZREVRANGE key start stop [WITHSCORES]\n\nAvailable since: 1.2.0.\n\nTime complexity: O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.", :fn-params-fixed [key start stop], :fn-params-more [key start stop & args], :req-args-fixed ["ZREVRANGE" key start stop], :cluster-key-idx 1}
+"LASTSAVE" {:fn-name "lastsave", :fn-docstring "Get the UNIX time stamp of the last successful save to disk.\n\nLASTSAVE \n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["LASTSAVE"], :cluster-key-idx 1}
+"XACK" {:fn-name "xack", :fn-docstring "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..\n\nXACK key group id [id ...]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1) for each message ID processed.", :fn-params-fixed [key group id], :fn-params-more [key group id & args], :req-args-fixed ["XACK" key group id], :cluster-key-idx 1}
+"XGROUP SETID" {:fn-name "xgroup-setid", :fn-docstring "Set a consumer group to an arbitrary last delivered ID value..\n\nXGROUP SETID key groupname id [entries_read]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key groupname id], :fn-params-more [key groupname id & args], :req-args-fixed ["XGROUP" "SETID" key groupname id], :cluster-key-idx 2}
+"SLOWLOG GET" {:fn-name "slowlog-get", :fn-docstring "Get the slow log's entries.\n\nSLOWLOG GET [count]\n\nAvailable since: 2.2.12.\n\nTime complexity: O(N) where N is the number of entries returned", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["SLOWLOG" "GET"], :cluster-key-idx 2}
+"SLOWLOG" {:fn-name "slowlog", :fn-docstring "A container for slow log commands.\n\nSLOWLOG \n\nAvailable since: 2.2.12.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SLOWLOG"], :cluster-key-idx 1}
+"ZREVRANGE" {:fn-name "zrevrange", :fn-docstring "Return a range of members in a sorted set, by index, with scores ordered from high to low.\n\nZREVRANGE key start stop [withscores]\n\nAvailable since: 1.2.0.\n\nTime complexity: O(log(N)+M) with N being the number of elements in the sorted set and M the number of elements returned.", :fn-params-fixed [key start stop], :fn-params-more [key start stop & args], :req-args-fixed ["ZREVRANGE" key start stop], :cluster-key-idx 1}
 "ACL WHOAMI" {:fn-name "acl-whoami", :fn-docstring "Return the name of the user associated to the current connection.\n\nACL WHOAMI \n\nAvailable since: 6.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ACL" "WHOAMI"], :cluster-key-idx 2}
 "SETEX" {:fn-name "setex", :fn-docstring "Set the value and expiration of a key.\n\nSETEX key seconds value\n\nAvailable since: 2.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key seconds value], :fn-params-more nil, :req-args-fixed ["SETEX" key seconds value], :cluster-key-idx 1}
 "MODULE UNLOAD" {:fn-name "module-unload", :fn-docstring "Unload a module.\n\nMODULE UNLOAD name\n\nAvailable since: 4.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [name], :fn-params-more nil, :req-args-fixed ["MODULE" "UNLOAD" name], :cluster-key-idx 2}
-"LPOP" {:fn-name "lpop", :fn-docstring "Remove and get the first element in a list.\n\nLPOP key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["LPOP" key], :cluster-key-idx 1}
-"MEMORY STATS" {:fn-name "memory-stats", :fn-docstring "Show memory usage details.\n\nMEMORY STATS \n\nAvailable since: 4.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "STATS"], :cluster-key-idx 2}
-"LATENCY HELP" {:fn-name "latency-help", :fn-docstring "Show helpful text about the different subcommands..\n\nLATENCY HELP \n\nAvailable since: 2.8.13.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["LATENCY" "HELP"], :cluster-key-idx 2}
-"ZREVRANGEBYSCORE" {:fn-name "zrevrangebyscore", :fn-docstring "Return a range of members in a sorted set, by score, with scores ordered from high to low.\n\nZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]\n\nAvailable since: 2.2.0.\n\nTime 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)).", :fn-params-fixed [key max min], :fn-params-more [key max min & args], :req-args-fixed ["ZREVRANGEBYSCORE" key max min], :cluster-key-idx 1}
-"ZREVRANGEBYLEX" {:fn-name "zrevrangebylex", :fn-docstring "Return a range of members in a sorted set, by lexicographical range, ordered from higher to lower strings..\n\nZREVRANGEBYLEX key max min [LIMIT offset count]\n\nAvailable since: 2.8.9.\n\nTime 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)).", :fn-params-fixed [key max min], :fn-params-more [key max min & args], :req-args-fixed ["ZREVRANGEBYLEX" key max min], :cluster-key-idx 1}
+"LPOP" {:fn-name "lpop", :fn-docstring "Remove and get the first elements in a list.\n\nLPOP key [count]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the number of elements returned", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["LPOP" key], :cluster-key-idx 1}
+"MEMORY STATS" {:fn-name "memory-stats", :fn-docstring "Show memory usage details.\n\nMEMORY STATS \n\nAvailable since: 4.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "STATS"], :cluster-key-idx 2}
+"LATENCY HELP" {:fn-name "latency-help", :fn-docstring "Show helpful text about the different subcommands..\n\nLATENCY HELP \n\nAvailable since: 2.8.13.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["LATENCY" "HELP"], :cluster-key-idx 2}
+"ZREVRANGEBYSCORE" {:fn-name "zrevrangebyscore", :fn-docstring "Return a range of members in a sorted set, by score, with scores ordered from high to low.\n\nZREVRANGEBYSCORE key max min [withscores] [offset_count]\n\nAvailable since: 2.2.0.\n\nTime 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)).", :fn-params-fixed [key max min], :fn-params-more [key max min & args], :req-args-fixed ["ZREVRANGEBYSCORE" key max min], :cluster-key-idx 1}
+"LMPOP" {:fn-name "lmpop", :fn-docstring "Pop elements from a list.\n\nLMPOP numkeys key [key ...] where [count]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N+M) where N is the number of provided keys and M is the number of elements returned.", :fn-params-fixed [numkeys key], :fn-params-more [numkeys key & args], :req-args-fixed ["LMPOP" numkeys key], :cluster-key-idx 1}
+"ZREVRANGEBYLEX" {:fn-name "zrevrangebylex", :fn-docstring "Return a range of members in a sorted set, by lexicographical range, ordered from higher to lower strings..\n\nZREVRANGEBYLEX key max min [offset_count]\n\nAvailable since: 2.8.9.\n\nTime 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)).", :fn-params-fixed [key max min], :fn-params-more [key max min & args], :req-args-fixed ["ZREVRANGEBYLEX" key max min], :cluster-key-idx 1}
 "SMOVE" {:fn-name "smove", :fn-docstring "Move a member from one set to another.\n\nSMOVE source destination member\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [source destination member], :fn-params-more nil, :req-args-fixed ["SMOVE" source destination member], :cluster-key-idx 1}
+"EXPIRETIME" {:fn-name "expiretime", :fn-docstring "Get the expiration Unix timestamp for a key.\n\nEXPIRETIME key\n\nAvailable since: 7.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["EXPIRETIME" key], :cluster-key-idx 1}
 "SMEMBERS" {:fn-name "smembers", :fn-docstring "Get all the members in a set.\n\nSMEMBERS key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the set cardinality.", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["SMEMBERS" key], :cluster-key-idx 1}
 "UNLINK" {:fn-name "unlink", :fn-docstring "Delete a key asynchronously in another thread. Otherwise it is just as DEL, but non blocking..\n\nUNLINK key [key ...]\n\nAvailable since: 4.0.0.\n\nTime 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.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["UNLINK" key], :cluster-key-idx 1}
+"PUBSUB NUMSUB" {:fn-name "pubsub-numsub", :fn-docstring "Get the count of subscribers for channels.\n\nPUBSUB NUMSUB [channel [channel ...]]\n\nAvailable since: 2.8.0.\n\nTime complexity: O(N) for the NUMSUB subcommand, where N is the number of requested channels", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["PUBSUB" "NUMSUB"], :cluster-key-idx 2}
 "PSUBSCRIBE" {:fn-name "psubscribe", :fn-docstring "Listen for messages published to channels matching the given patterns.\n\nPSUBSCRIBE pattern [pattern ...]\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the number of patterns the client is already subscribed to.", :fn-params-fixed [pattern], :fn-params-more [pattern & args], :req-args-fixed ["PSUBSCRIBE" pattern], :cluster-key-idx 1}
 "PTTL" {:fn-name "pttl", :fn-docstring "Get the time to live for a key in milliseconds.\n\nPTTL key\n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["PTTL" key], :cluster-key-idx 1}
 "SRANDMEMBER" {:fn-name "srandmember", :fn-docstring "Get one or multiple random members from a set.\n\nSRANDMEMBER key [count]\n\nAvailable since: 1.0.0.\n\nTime complexity: Without the count argument O(1), otherwise O(N) where N is the absolute value of the passed count.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["SRANDMEMBER" key], :cluster-key-idx 1}
-"EXEC" {:fn-name "exec", :fn-docstring "Execute all commands issued after MULTI.\n\nEXEC \n\nAvailable since: 1.2.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["EXEC"], :cluster-key-idx 1}
+"EXEC" {:fn-name "exec", :fn-docstring "Execute all commands issued after MULTI.\n\nEXEC \n\nAvailable since: 1.2.0.\n\nTime complexity: Depends on commands in the transaction", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["EXEC"], :cluster-key-idx 1}
 "SDIFFSTORE" {:fn-name "sdiffstore", :fn-docstring "Subtract multiple sets and store the resulting set in a key.\n\nSDIFFSTORE destination key [key ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the total number of elements in all given sets.", :fn-params-fixed [destination key], :fn-params-more [destination key & args], :req-args-fixed ["SDIFFSTORE" destination key], :cluster-key-idx 1}
 "ACL SETUSER" {:fn-name "acl-setuser", :fn-docstring "Modify or create the rules for a specific ACL user.\n\nACL SETUSER username [rule [rule ...]]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(N). Where N is the number of rules provided.", :fn-params-fixed [username], :fn-params-more [username & args], :req-args-fixed ["ACL" "SETUSER" username], :cluster-key-idx 2}
-"CONFIG GET" {:fn-name "config-get", :fn-docstring "Get the value of a configuration parameter.\n\nCONFIG GET parameter\n\nAvailable since: 2.0.0.\n\n", :fn-params-fixed [parameter], :fn-params-more nil, :req-args-fixed ["CONFIG" "GET" parameter], :cluster-key-idx 2}
-"GEORADIUSBYMEMBER" {:fn-name "georadiusbymember", :fn-docstring "Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member.\n\nGEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]\n\nAvailable since: 3.2.0.\n\nTime 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.", :fn-params-fixed [key member radius unit], :fn-params-more [key member radius unit & args], :req-args-fixed ["GEORADIUSBYMEMBER" key member radius unit], :cluster-key-idx 1}
-"SHUTDOWN" {:fn-name "shutdown", :fn-docstring "Synchronously save the dataset to disk and then shut down the server.\n\nSHUTDOWN [NOSAVE|SAVE]\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["SHUTDOWN"], :cluster-key-idx 1}
+"FUNCTION DELETE" {:fn-name "function-delete", :fn-docstring "Delete a function by name.\n\nFUNCTION DELETE library-name\n\nAvailable since: 7.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [library-name], :fn-params-more nil, :req-args-fixed ["FUNCTION" "DELETE" library-name], :cluster-key-idx 2}
+"CONFIG GET" {:fn-name "config-get", :fn-docstring "Get the values of configuration parameters.\n\nCONFIG GET parameter [parameter ...]\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) when N is the number of configuration parameters provided", :fn-params-fixed [parameter], :fn-params-more [parameter & args], :req-args-fixed ["CONFIG" "GET" parameter], :cluster-key-idx 2}
+"GEORADIUSBYMEMBER" {:fn-name "georadiusbymember", :fn-docstring "Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member.\n\nGEORADIUSBYMEMBER key member radius unit [withcoord] [withdist] [withhash] [count] [order] [key] [key]\n\nAvailable since: 3.2.0.\n\nTime 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.", :fn-params-fixed [key member radius unit], :fn-params-more [key member radius unit & args], :req-args-fixed ["GEORADIUSBYMEMBER" key member radius unit], :cluster-key-idx 1}
+"SHUTDOWN" {:fn-name "shutdown", :fn-docstring "Synchronously save the dataset to disk and then shut down the server.\n\nSHUTDOWN [nosave_save] [now] [force] [abort]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) when saving, where N is the total number of keys in all databases when saving data, otherwise O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["SHUTDOWN"], :cluster-key-idx 1}
 "DUMP" {:fn-name "dump", :fn-docstring "Return a serialized version of the value stored at the specified key..\n\nDUMP key\n\nAvailable since: 2.6.0.\n\nTime 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).", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["DUMP" key], :cluster-key-idx 1}
-"BGSAVE" {:fn-name "bgsave", :fn-docstring "Asynchronously save the dataset to disk.\n\nBGSAVE [SCHEDULE]\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["BGSAVE"], :cluster-key-idx 1}
-"GEODIST" {:fn-name "geodist", :fn-docstring "Returns the distance between two members of a geospatial index.\n\nGEODIST key member1 member2 [m|km|ft|mi]\n\nAvailable since: 3.2.0.\n\nTime complexity: O(log(N))", :fn-params-fixed [key member1 member2], :fn-params-more [key member1 member2 & args], :req-args-fixed ["GEODIST" key member1 member2], :cluster-key-idx 1}
+"FUNCTION LOAD" {:fn-name "function-load", :fn-docstring "Create a function with the given arguments (name, code, description).\n\nFUNCTION LOAD [replace] function-code\n\nAvailable since: 7.0.0.\n\nTime complexity: O(1) (considering compilation time is redundant)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["FUNCTION" "LOAD"], :cluster-key-idx 2}
+"BGSAVE" {:fn-name "bgsave", :fn-docstring "Asynchronously save the dataset to disk.\n\nBGSAVE [schedule]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["BGSAVE"], :cluster-key-idx 1}
+"GEODIST" {:fn-name "geodist", :fn-docstring "Returns the distance between two members of a geospatial index.\n\nGEODIST key member1 member2 [unit]\n\nAvailable since: 3.2.0.\n\nTime complexity: O(log(N))", :fn-params-fixed [key member1 member2], :fn-params-more [key member1 member2 & args], :req-args-fixed ["GEODIST" key member1 member2], :cluster-key-idx 1}
 "SCARD" {:fn-name "scard", :fn-docstring "Get the number of members in a set.\n\nSCARD key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["SCARD" key], :cluster-key-idx 1}
 "SISMEMBER" {:fn-name "sismember", :fn-docstring "Determine if a given value is a member of a set.\n\nSISMEMBER key member\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key member], :fn-params-more nil, :req-args-fixed ["SISMEMBER" key member], :cluster-key-idx 1}
-"CLUSTER RESET" {:fn-name "cluster-reset", :fn-docstring "Reset a Redis Cluster node.\n\nCLUSTER RESET [HARD|SOFT]\n\nAvailable since: 3.0.0.\n\nTime complexity: O(N) where N is the number of known nodes. The command may execute a FLUSHALL as a side effect.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["CLUSTER" "RESET"], :cluster-key-idx 2}
+"LCS" {:fn-name "lcs", :fn-docstring "Find longest common substring.\n\nLCS key1 key2 [len] [idx] [len] [withmatchlen]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N*M) where N and M are the lengths of s1 and s2, respectively", :fn-params-fixed [key1 key2], :fn-params-more [key1 key2 & args], :req-args-fixed ["LCS" key1 key2], :cluster-key-idx 1}
+"ZDIFFSTORE" {:fn-name "zdiffstore", :fn-docstring "Subtract multiple sorted sets and store the resulting sorted set in a new key.\n\nZDIFFSTORE destination numkeys key [key ...]\n\nAvailable since: 6.2.0.\n\nTime 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.", :fn-params-fixed [destination numkeys key], :fn-params-more [destination numkeys key & args], :req-args-fixed ["ZDIFFSTORE" destination numkeys key], :cluster-key-idx 1}
+"XINFO CONSUMERS" {:fn-name "xinfo-consumers", :fn-docstring "List the consumers in a consumer group.\n\nXINFO CONSUMERS key groupname\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key groupname], :fn-params-more nil, :req-args-fixed ["XINFO" "CONSUMERS" key groupname], :cluster-key-idx 2}
+"CLUSTER RESET" {:fn-name "cluster-reset", :fn-docstring "Reset a Redis Cluster node.\n\nCLUSTER RESET [hard_soft]\n\nAvailable since: 3.0.0.\n\nTime complexity: O(N) where N is the number of known nodes. The command may execute a FLUSHALL as a side effect.", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["CLUSTER" "RESET"], :cluster-key-idx 2}
+"CLIENT UNPAUSE" {:fn-name "client-unpause", :fn-docstring "Resume processing of clients that were paused.\n\nCLIENT UNPAUSE \n\nAvailable since: 6.2.0.\n\nTime complexity: O(N) Where N is the number of paused clients", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CLIENT" "UNPAUSE"], :cluster-key-idx 2}
 "CLUSTER DELSLOTS" {:fn-name "cluster-delslots", :fn-docstring "Set hash slots as unbound in receiving node.\n\nCLUSTER DELSLOTS slot [slot ...]\n\nAvailable since: 3.0.0.\n\nTime complexity: O(N) where N is the total number of hash slot arguments", :fn-params-fixed [slot], :fn-params-more [slot & args], :req-args-fixed ["CLUSTER" "DELSLOTS" slot], :cluster-key-idx 2}
-"CLIENT LIST" {:fn-name "client-list", :fn-docstring "Get the list of client connections.\n\nCLIENT LIST [TYPE normal|master|replica|pubsub]\n\nAvailable since: 2.4.0.\n\nTime complexity: O(N) where N is the number of client connections", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["CLIENT" "LIST"], :cluster-key-idx 2}
-"CLIENT REPLY" {:fn-name "client-reply", :fn-docstring "Instruct the server whether to reply to commands.\n\nCLIENT REPLY ON|OFF|SKIP\n\nAvailable since: 3.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [reply-mode], :fn-params-more nil, :req-args-fixed ["CLIENT" "REPLY" reply-mode], :cluster-key-idx 2}
+"CLIENT LIST" {:fn-name "client-list", :fn-docstring "Get the list of client connections.\n\nCLIENT LIST [normal_master_replica_pubsub] [id]\n\nAvailable since: 2.4.0.\n\nTime complexity: O(N) where N is the number of client connections", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["CLIENT" "LIST"], :cluster-key-idx 2}
+"BZMPOP" {:fn-name "bzmpop", :fn-docstring "Remove and return members with scores in a sorted set or block until one is available.\n\nBZMPOP timeout numkeys key [key ...] where [count]\n\nAvailable since: 7.0.0.\n\nTime 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.", :fn-params-fixed [timeout numkeys key], :fn-params-more [timeout numkeys key & args], :req-args-fixed ["BZMPOP" timeout numkeys key], :cluster-key-idx 1}
+"BLMOVE" {:fn-name "blmove", :fn-docstring "Pop an element from a list, push it to another list and return it; or block until one is available.\n\nBLMOVE source destination wherefrom whereto timeout\n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [source destination wherefrom whereto timeout], :fn-params-more nil, :req-args-fixed ["BLMOVE" source destination wherefrom whereto timeout], :cluster-key-idx 1}
+"ZINTERCARD" {:fn-name "zintercard", :fn-docstring "Intersect multiple sorted sets and return the cardinality of the result.\n\nZINTERCARD numkeys key [key ...] [limit]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N*K) worst case with N being the smallest input sorted set, K being the number of input sorted sets.", :fn-params-fixed [numkeys key], :fn-params-more [numkeys key & args], :req-args-fixed ["ZINTERCARD" numkeys key], :cluster-key-idx 1}
+"CLIENT REPLY" {:fn-name "client-reply", :fn-docstring "Instruct the server whether to reply to commands.\n\nCLIENT REPLY on_off_skip\n\nAvailable since: 3.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [on_off_skip], :fn-params-more nil, :req-args-fixed ["CLIENT" "REPLY" on_off_skip], :cluster-key-idx 2}
 "DECR" {:fn-name "decr", :fn-docstring "Decrement the integer value of a key by one.\n\nDECR key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["DECR" key], :cluster-key-idx 1}
-"MULTI" {:fn-name "multi", :fn-docstring "Mark the start of a transaction block.\n\nMULTI \n\nAvailable since: 1.2.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MULTI"], :cluster-key-idx 1}
-"LATENCY LATEST" {:fn-name "latency-latest", :fn-docstring "Return the latest latency samples for all events..\n\nLATENCY LATEST \n\nAvailable since: 2.8.13.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["LATENCY" "LATEST"], :cluster-key-idx 2}
-"DEBUG SEGFAULT" {:fn-name "debug-segfault", :fn-docstring "Make the server crash.\n\nDEBUG SEGFAULT \n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["DEBUG" "SEGFAULT"], :cluster-key-idx 2}
+"MULTI" {:fn-name "multi", :fn-docstring "Mark the start of a transaction block.\n\nMULTI \n\nAvailable since: 1.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MULTI"], :cluster-key-idx 1}
+"FAILOVER" {:fn-name "failover", :fn-docstring "Start a coordinated failover between this server and one of its replicas..\n\nFAILOVER [target] [abort] [milliseconds]\n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["FAILOVER"], :cluster-key-idx 1}
+"LATENCY LATEST" {:fn-name "latency-latest", :fn-docstring "Return the latest latency samples for all events..\n\nLATENCY LATEST \n\nAvailable since: 2.8.13.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["LATENCY" "LATEST"], :cluster-key-idx 2}
+"RESET" {:fn-name "reset", :fn-docstring "Reset the connection.\n\nRESET \n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["RESET"], :cluster-key-idx 1}
 "HDEL" {:fn-name "hdel", :fn-docstring "Delete one or more hash fields.\n\nHDEL key field [field ...]\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the number of fields to be removed.", :fn-params-fixed [key field], :fn-params-more [key field & args], :req-args-fixed ["HDEL" key field], :cluster-key-idx 1}
 "SADD" {:fn-name "sadd", :fn-docstring "Add one or more members to a set.\n\nSADD key member [member ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.", :fn-params-fixed [key member], :fn-params-more [key member & args], :req-args-fixed ["SADD" key member], :cluster-key-idx 1}
-"MODULE LOAD" {:fn-name "module-load", :fn-docstring "Load a module.\n\nMODULE LOAD path [arg]\n\nAvailable since: 4.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [path], :fn-params-more [path & args], :req-args-fixed ["MODULE" "LOAD" path], :cluster-key-idx 2}
+"MODULE LOAD" {:fn-name "module-load", :fn-docstring "Load a module.\n\nMODULE LOAD path [arg [arg ...]]\n\nAvailable since: 4.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [path], :fn-params-more [path & args], :req-args-fixed ["MODULE" "LOAD" path], :cluster-key-idx 2}
 "LREM" {:fn-name "lrem", :fn-docstring "Remove elements from a list.\n\nLREM key count element\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N+M) where N is the length of the list and M is the number of elements removed.", :fn-params-fixed [key count element], :fn-params-more nil, :req-args-fixed ["LREM" key count element], :cluster-key-idx 1}
 "ACL SAVE" {:fn-name "acl-save", :fn-docstring "Save the current ACL rules in the configured ACL file.\n\nACL SAVE \n\nAvailable since: 6.0.0.\n\nTime complexity: O(N). Where N is the number of configured users.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ACL" "SAVE"], :cluster-key-idx 2}
 "UNWATCH" {:fn-name "unwatch", :fn-docstring "Forget about all watched keys.\n\nUNWATCH \n\nAvailable since: 2.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["UNWATCH"], :cluster-key-idx 1}
 "WAIT" {:fn-name "wait", :fn-docstring "Wait for the synchronous replication of all the write commands sent in the context of the current connection.\n\nWAIT numreplicas timeout\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [numreplicas timeout], :fn-params-more nil, :req-args-fixed ["WAIT" numreplicas timeout], :cluster-key-idx 1}
 "SINTERSTORE" {:fn-name "sinterstore", :fn-docstring "Intersect multiple sets and store the resulting set in a key.\n\nSINTERSTORE destination key [key ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N*M) worst case where N is the cardinality of the smallest set and M is the number of sets.", :fn-params-fixed [destination key], :fn-params-more [destination key & args], :req-args-fixed ["SINTERSTORE" destination key], :cluster-key-idx 1}
 "SDIFF" {:fn-name "sdiff", :fn-docstring "Subtract multiple sets.\n\nSDIFF key [key ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the total number of elements in all given sets.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["SDIFF" key], :cluster-key-idx 1}
-"INFO" {:fn-name "info", :fn-docstring "Get information and statistics about the server.\n\nINFO [section]\n\nAvailable since: 1.0.0.\n\n", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["INFO"], :cluster-key-idx 1}
+"INFO" {:fn-name "info", :fn-docstring "Get information and statistics about the server.\n\nINFO [section [section ...]]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["INFO"], :cluster-key-idx 1}
 "PSYNC" {:fn-name "psync", :fn-docstring "Internal command used for replication.\n\nPSYNC replicationid offset\n\nAvailable since: 2.8.0.\n\n", :fn-params-fixed [replicationid offset], :fn-params-more nil, :req-args-fixed ["PSYNC" replicationid offset], :cluster-key-idx 1}
-"GEOADD" {:fn-name "geoadd", :fn-docstring "Add one or more geospatial items in the geospatial index represented using a sorted set.\n\nGEOADD key longitude latitude member [longitude latitude member ...]\n\nAvailable since: 3.2.0.\n\nTime complexity: O(log(N)) for each item added, where N is the number of elements in the sorted set.", :fn-params-fixed [key longitude latitude member], :fn-params-more [key longitude latitude member & args], :req-args-fixed ["GEOADD" key longitude latitude member], :cluster-key-idx 1}
+"BITFIELD_RO" {:fn-name "bitfield_ro", :fn-docstring "Perform arbitrary bitfield integer operations on strings. Read-only variant of BITFIELD.\n\nBITFIELD_RO key encoding_offset [encoding_offset ...]\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1) for each subcommand specified", :fn-params-fixed [key encoding_offset], :fn-params-more [key encoding_offset & args], :req-args-fixed ["BITFIELD_RO" key encoding_offset], :cluster-key-idx 1}
+"GEOADD" {:fn-name "geoadd", :fn-docstring "Add one or more geospatial items in the geospatial index represented using a sorted set.\n\nGEOADD key [condition] [change] longitude_latitude_member [longitude_latitude_member ...]\n\nAvailable since: 3.2.0.\n\nTime complexity: O(log(N)) for each item added, where N is the number of elements in the sorted set.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["GEOADD" key], :cluster-key-idx 1}
+"MODULE" {:fn-name "module", :fn-docstring "A container for module commands.\n\nMODULE \n\nAvailable since: 4.0.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MODULE"], :cluster-key-idx 1}
+"XAUTOCLAIM" {:fn-name "xautoclaim", :fn-docstring "Changes (or acquires) ownership of messages in a consumer group, as if the messages were delivered to the specified consumer..\n\nXAUTOCLAIM key group consumer min-idle-time start [count] [justid]\n\nAvailable since: 6.2.0.\n\nTime complexity: O(1) if COUNT is small.", :fn-params-fixed [key group consumer min-idle-time start], :fn-params-more [key group consumer min-idle-time start & args], :req-args-fixed ["XAUTOCLAIM" key group consumer min-idle-time start], :cluster-key-idx 1}
 "LPUSHX" {:fn-name "lpushx", :fn-docstring "Prepend an element to a list, only if the list exists.\n\nLPUSHX key element [element ...]\n\nAvailable since: 2.2.0.\n\nTime complexity: O(1) for each element added, so O(N) to add N elements when the command is called with multiple arguments.", :fn-params-fixed [key element], :fn-params-more [key element & args], :req-args-fixed ["LPUSHX" key element], :cluster-key-idx 1}
 "APPEND" {:fn-name "append", :fn-docstring "Append a value to a key.\n\nAPPEND key value\n\nAvailable since: 2.0.0.\n\nTime 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.", :fn-params-fixed [key value], :fn-params-more nil, :req-args-fixed ["APPEND" key value], :cluster-key-idx 1}
-"XRANGE" {:fn-name "xrange", :fn-docstring "Return a range of elements in a stream, with IDs matching the specified IDs interval.\n\nXRANGE key start end [COUNT count]\n\nAvailable since: 5.0.0.\n\nTime 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).", :fn-params-fixed [key start end], :fn-params-more [key start end & args], :req-args-fixed ["XRANGE" key start end], :cluster-key-idx 1}
+"XRANGE" {:fn-name "xrange", :fn-docstring "Return a range of elements in a stream, with IDs matching the specified IDs interval.\n\nXRANGE key start end [count]\n\nAvailable since: 5.0.0.\n\nTime 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).", :fn-params-fixed [key start end], :fn-params-more [key start end & args], :req-args-fixed ["XRANGE" key start end], :cluster-key-idx 1}
+"COMMAND GETKEYSANDFLAGS" {:fn-name "command-getkeysandflags", :fn-docstring "Extract keys and access flags given a full Redis command.\n\nCOMMAND GETKEYSANDFLAGS \n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) where N is the number of arguments to the command", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["COMMAND" "GETKEYSANDFLAGS"], :cluster-key-idx 2}
+"BLMPOP" {:fn-name "blmpop", :fn-docstring "Pop elements from a list, or block until one is available.\n\nBLMPOP timeout numkeys key [key ...] where [count]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N+M) where N is the number of provided keys and M is the number of elements returned.", :fn-params-fixed [timeout numkeys key], :fn-params-more [timeout numkeys key & args], :req-args-fixed ["BLMPOP" timeout numkeys key], :cluster-key-idx 1}
 "HINCRBYFLOAT" {:fn-name "hincrbyfloat", :fn-docstring "Increment the float value of a hash field by the given amount.\n\nHINCRBYFLOAT key field increment\n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [key field increment], :fn-params-more nil, :req-args-fixed ["HINCRBYFLOAT" key field increment], :cluster-key-idx 1}
 "LSET" {:fn-name "lset", :fn-docstring "Set the value of an element in a list by its index.\n\nLSET key index element\n\nAvailable since: 1.0.0.\n\nTime 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).", :fn-params-fixed [key index element], :fn-params-more nil, :req-args-fixed ["LSET" key index element], :cluster-key-idx 1}
 "CLUSTER GETKEYSINSLOT" {:fn-name "cluster-getkeysinslot", :fn-docstring "Return local key names in the specified hash slot.\n\nCLUSTER GETKEYSINSLOT slot count\n\nAvailable since: 3.0.0.\n\nTime complexity: O(log(N)) where N is the number of requested keys", :fn-params-fixed [slot count], :fn-params-more nil, :req-args-fixed ["CLUSTER" "GETKEYSINSLOT" slot count], :cluster-key-idx 2}
-"XPENDING" {:fn-name "xpending", :fn-docstring "Return information and entries from a stream consumer group pending entries list, that are messages fetched but never acknowledged..\n\nXPENDING key group [start end count] [consumer]\n\nAvailable since: 5.0.0.\n\nTime 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). When the command returns just the summary it runs in O(1) time assuming the list of consumers is small, otherwise there is additional O(N) time needed to iterate every consumer.", :fn-params-fixed [key group], :fn-params-more [key group & args], :req-args-fixed ["XPENDING" key group], :cluster-key-idx 1}
+"XPENDING" {:fn-name "xpending", :fn-docstring "Return information and entries from a stream consumer group pending entries list, that are messages fetched but never acknowledged..\n\nXPENDING key group [filters]\n\nAvailable since: 5.0.0.\n\nTime 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.", :fn-params-fixed [key group], :fn-params-more [key group & args], :req-args-fixed ["XPENDING" key group], :cluster-key-idx 1}
 "ZREVRANK" {:fn-name "zrevrank", :fn-docstring "Determine the index of a member in a sorted set, with scores ordered from high to low.\n\nZREVRANK key member\n\nAvailable since: 2.0.0.\n\nTime complexity: O(log(N))", :fn-params-fixed [key member], :fn-params-more nil, :req-args-fixed ["ZREVRANK" key member], :cluster-key-idx 1}
 "ZRANK" {:fn-name "zrank", :fn-docstring "Determine the index of a member in a sorted set.\n\nZRANK key member\n\nAvailable since: 2.0.0.\n\nTime complexity: O(log(N))", :fn-params-fixed [key member], :fn-params-more nil, :req-args-fixed ["ZRANK" key member], :cluster-key-idx 1}
-"BITCOUNT" {:fn-name "bitcount", :fn-docstring "Count set bits in a string.\n\nBITCOUNT key [start end]\n\nAvailable since: 2.6.0.\n\nTime complexity: O(N)", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["BITCOUNT" key], :cluster-key-idx 1}
-"MEMORY DOCTOR" {:fn-name "memory-doctor", :fn-docstring "Outputs memory problems report.\n\nMEMORY DOCTOR \n\nAvailable since: 4.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "DOCTOR"], :cluster-key-idx 2}
+"BITCOUNT" {:fn-name "bitcount", :fn-docstring "Count set bits in a string.\n\nBITCOUNT key [index]\n\nAvailable since: 2.6.0.\n\nTime complexity: O(N)", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["BITCOUNT" key], :cluster-key-idx 1}
+"MEMORY DOCTOR" {:fn-name "memory-doctor", :fn-docstring "Outputs memory problems report.\n\nMEMORY DOCTOR \n\nAvailable since: 4.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "DOCTOR"], :cluster-key-idx 2}
+"LMOVE" {:fn-name "lmove", :fn-docstring "Pop an element from a list, push it to another list and return it.\n\nLMOVE source destination wherefrom whereto\n\nAvailable since: 6.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [source destination wherefrom whereto], :fn-params-more nil, :req-args-fixed ["LMOVE" source destination wherefrom whereto], :cluster-key-idx 1}
 "READWRITE" {:fn-name "readwrite", :fn-docstring "Disables read queries for a connection to a cluster replica node.\n\nREADWRITE \n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["READWRITE"], :cluster-key-idx 1}
 "GETSET" {:fn-name "getset", :fn-docstring "Set the string value of a key and return its old value.\n\nGETSET key value\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key value], :fn-params-more nil, :req-args-fixed ["GETSET" key value], :cluster-key-idx 1}
+"XGROUP DESTROY" {:fn-name "xgroup-destroy", :fn-docstring "Destroy a consumer group..\n\nXGROUP DESTROY key groupname\n\nAvailable since: 5.0.0.\n\nTime complexity: O(N) where N is the number of entries in the group's pending entries list (PEL).", :fn-params-fixed [key groupname], :fn-params-more nil, :req-args-fixed ["XGROUP" "DESTROY" key groupname], :cluster-key-idx 2}
 "SCRIPT EXISTS" {:fn-name "script-exists", :fn-docstring "Check existence of scripts in the script cache..\n\nSCRIPT EXISTS sha1 [sha1 ...]\n\nAvailable since: 2.6.0.\n\nTime complexity: O(N) with N being the number of scripts to check (so checking a single script is an O(1) operation).", :fn-params-fixed [sha1], :fn-params-more [sha1 & args], :req-args-fixed ["SCRIPT" "EXISTS" sha1], :cluster-key-idx 2}
 "CONFIG RESETSTAT" {:fn-name "config-resetstat", :fn-docstring "Reset the stats returned by INFO.\n\nCONFIG RESETSTAT \n\nAvailable since: 2.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CONFIG" "RESETSTAT"], :cluster-key-idx 2}
 "ZREMRANGEBYRANK" {:fn-name "zremrangebyrank", :fn-docstring "Remove all members in a sorted set within the given indexes.\n\nZREMRANGEBYRANK key start stop\n\nAvailable since: 2.0.0.\n\nTime 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.", :fn-params-fixed [key start stop], :fn-params-more nil, :req-args-fixed ["ZREMRANGEBYRANK" key start stop], :cluster-key-idx 1}
-"SCRIPT DEBUG" {:fn-name "script-debug", :fn-docstring "Set the debug mode for executed scripts..\n\nSCRIPT DEBUG YES|SYNC|NO\n\nAvailable since: 3.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [mode], :fn-params-more nil, :req-args-fixed ["SCRIPT" "DEBUG" mode], :cluster-key-idx 2}
+"OBJECT ENCODING" {:fn-name "object-encoding", :fn-docstring "Inspect the internal encoding of a Redis object.\n\nOBJECT ENCODING key\n\nAvailable since: 2.2.3.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["OBJECT" "ENCODING" key], :cluster-key-idx 2}
+"SCRIPT DEBUG" {:fn-name "script-debug", :fn-docstring "Set the debug mode for executed scripts..\n\nSCRIPT DEBUG mode\n\nAvailable since: 3.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [mode], :fn-params-more nil, :req-args-fixed ["SCRIPT" "DEBUG" mode], :cluster-key-idx 2}
 "ZPOPMAX" {:fn-name "zpopmax", :fn-docstring "Remove and return members with the highest scores in a sorted set.\n\nZPOPMAX key [count]\n\nAvailable since: 5.0.0.\n\nTime complexity: O(log(N)*M) with N being the number of elements in the sorted set, and M being the number of elements popped.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["ZPOPMAX" key], :cluster-key-idx 1}
 "PSETEX" {:fn-name "psetex", :fn-docstring "Set the value and expiration in milliseconds of a key.\n\nPSETEX key milliseconds value\n\nAvailable since: 2.6.0.\n\nTime complexity: O(1)", :fn-params-fixed [key milliseconds value], :fn-params-more nil, :req-args-fixed ["PSETEX" key milliseconds value], :cluster-key-idx 1}
-"EVALSHA" {:fn-name "evalsha", :fn-docstring "Execute a Lua script server side.\n\nEVALSHA sha1 numkeys key [key ...] arg [arg ...]\n\nAvailable since: 2.6.0.\n\nTime complexity: Depends on the script that is executed.", :fn-params-fixed [sha1 numkeys], :fn-params-more [sha1 numkeys & args], :req-args-fixed ["EVALSHA" sha1 numkeys], :cluster-key-idx 1}
+"EVALSHA" {:fn-name "evalsha", :fn-docstring "Execute a Lua script server side.\n\nEVALSHA sha1 numkeys [key [key ...]] [arg [arg ...]]\n\nAvailable since: 2.6.0.\n\nTime complexity: Depends on the script that is executed.", :fn-params-fixed [sha1 numkeys], :fn-params-more [sha1 numkeys & args], :req-args-fixed ["EVALSHA" sha1 numkeys], :cluster-key-idx 1}
 "GET" {:fn-name "get", :fn-docstring "Get the value of a key.\n\nGET key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["GET" key], :cluster-key-idx 1}
 "HLEN" {:fn-name "hlen", :fn-docstring "Get the number of fields in a hash.\n\nHLEN key\n\nAvailable since: 2.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["HLEN" key], :cluster-key-idx 1}
 "ACL LIST" {:fn-name "acl-list", :fn-docstring "List the current ACL rules in ACL config file format.\n\nACL LIST \n\nAvailable since: 6.0.0.\n\nTime complexity: O(N). Where N is the number of configured users.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["ACL" "LIST"], :cluster-key-idx 2}
-"XREVRANGE" {:fn-name "xrevrange", :fn-docstring "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.\n\nXREVRANGE key end start [COUNT count]\n\nAvailable since: 5.0.0.\n\nTime 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).", :fn-params-fixed [key end start], :fn-params-more [key end start & args], :req-args-fixed ["XREVRANGE" key end start], :cluster-key-idx 1}
-"CONFIG REWRITE" {:fn-name "config-rewrite", :fn-docstring "Rewrite the configuration file with the in memory configuration.\n\nCONFIG REWRITE \n\nAvailable since: 2.8.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CONFIG" "REWRITE"], :cluster-key-idx 2}
-"LPOS" {:fn-name "lpos", :fn-docstring "Return the index of matching elements on a list.\n\nLPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]\n\nAvailable since: 6.0.6.\n\nTime 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.", :fn-params-fixed [key element], :fn-params-more [key element & args], :req-args-fixed ["LPOS" key element], :cluster-key-idx 1}
+"XREVRANGE" {:fn-name "xrevrange", :fn-docstring "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.\n\nXREVRANGE key end start [count]\n\nAvailable since: 5.0.0.\n\nTime 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).", :fn-params-fixed [key end start], :fn-params-more [key end start & args], :req-args-fixed ["XREVRANGE" key end start], :cluster-key-idx 1}
+"CONFIG REWRITE" {:fn-name "config-rewrite", :fn-docstring "Rewrite the configuration file with the in memory configuration.\n\nCONFIG REWRITE \n\nAvailable since: 2.8.0.\n\nTime complexity: O(1)", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["CONFIG" "REWRITE"], :cluster-key-idx 2}
+"LPOS" {:fn-name "lpos", :fn-docstring "Return the index of matching elements on a list.\n\nLPOS key element [rank] [num-matches] [len]\n\nAvailable since: 6.0.6.\n\nTime 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.", :fn-params-fixed [key element], :fn-params-more [key element & args], :req-args-fixed ["LPOS" key element], :cluster-key-idx 1}
+"OBJECT IDLETIME" {:fn-name "object-idletime", :fn-docstring "Get the time since a Redis object was last accessed.\n\nOBJECT IDLETIME key\n\nAvailable since: 2.2.3.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["OBJECT" "IDLETIME" key], :cluster-key-idx 2}
+"GEOSEARCHSTORE" {:fn-name "geosearchstore", :fn-docstring "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..\n\nGEOSEARCHSTORE destination source from by [order] [count] [storedist]\n\nAvailable since: 6.2.0.\n\nTime 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", :fn-params-fixed [destination source from by], :fn-params-more [destination source from by & args], :req-args-fixed ["GEOSEARCHSTORE" destination source from by], :cluster-key-idx 1}
 "BZPOPMIN" {:fn-name "bzpopmin", :fn-docstring "Remove and return the member with the lowest score from one or more sorted sets, or block until one is available.\n\nBZPOPMIN key [key ...] timeout\n\nAvailable since: 5.0.0.\n\nTime complexity: O(log(N)) with N being the number of elements in the sorted set.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["BZPOPMIN" key], :cluster-key-idx 1}
-"CLIENT KILL" {:fn-name "client-kill", :fn-docstring "Kill the connection of a client.\n\nCLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [USER username] [ADDR ip:port] [SKIPME yes/no]\n\nAvailable since: 2.4.0.\n\nTime complexity: O(N) where N is the number of client connections", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["CLIENT" "KILL"], :cluster-key-idx 2}
-"DISCARD" {:fn-name "discard", :fn-docstring "Discard all commands issued after MULTI.\n\nDISCARD \n\nAvailable since: 2.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["DISCARD"], :cluster-key-idx 1}
+"CLIENT KILL" {:fn-name "client-kill", :fn-docstring "Kill the connection of a client.\n\nCLIENT KILL filter\n\nAvailable since: 2.4.0.\n\nTime complexity: O(N) where N is the number of client connections", :fn-params-fixed [filter], :fn-params-more nil, :req-args-fixed ["CLIENT" "KILL" filter], :cluster-key-idx 2}
+"DISCARD" {:fn-name "discard", :fn-docstring "Discard all commands issued after MULTI.\n\nDISCARD \n\nAvailable since: 2.0.0.\n\nTime complexity: O(N), when N is the number of queued commands", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["DISCARD"], :cluster-key-idx 1}
 "HGETALL" {:fn-name "hgetall", :fn-docstring "Get all the fields and values in a hash.\n\nHGETALL key\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the size of the hash.", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["HGETALL" key], :cluster-key-idx 1}
 "HMGET" {:fn-name "hmget", :fn-docstring "Get the values of all the given hash fields.\n\nHMGET key field [field ...]\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the number of fields being requested.", :fn-params-fixed [key field], :fn-params-more [key field & args], :req-args-fixed ["HMGET" key field], :cluster-key-idx 1}
+"XGROUP DELCONSUMER" {:fn-name "xgroup-delconsumer", :fn-docstring "Delete a consumer from a consumer group..\n\nXGROUP DELCONSUMER key groupname consumername\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key groupname consumername], :fn-params-more nil, :req-args-fixed ["XGROUP" "DELCONSUMER" key groupname consumername], :cluster-key-idx 2}
+"OBJECT REFCOUNT" {:fn-name "object-refcount", :fn-docstring "Get the number of references to the value of the key.\n\nOBJECT REFCOUNT key\n\nAvailable since: 2.2.3.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["OBJECT" "REFCOUNT" key], :cluster-key-idx 2}
+"FCALL_RO" {:fn-name "fcall_ro", :fn-docstring "Invoke a read-only function.\n\nFCALL_RO function numkeys [key [key ...]] [arg [arg ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: Depends on the function that is executed.", :fn-params-fixed [function numkeys], :fn-params-more [function numkeys & args], :req-args-fixed ["FCALL_RO" function numkeys], :cluster-key-idx 1}
 "CLIENT SETNAME" {:fn-name "client-setname", :fn-docstring "Set the current connection name.\n\nCLIENT SETNAME connection-name\n\nAvailable since: 2.6.9.\n\nTime complexity: O(1)", :fn-params-fixed [connection-name], :fn-params-more nil, :req-args-fixed ["CLIENT" "SETNAME" connection-name], :cluster-key-idx 2}
-"SORT" {:fn-name "sort", :fn-docstring "Sort the elements in a list, set or sorted set.\n\nSORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]\n\nAvailable since: 1.0.0.\n\nTime 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 currently O(N) as there is a copy step that will be avoided in next releases.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["SORT" key], :cluster-key-idx 1}
-"BITFIELD" {:fn-name "bitfield", :fn-docstring "Perform arbitrary bitfield integer operations on strings.\n\nBITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]\n\nAvailable since: 3.2.0.\n\nTime complexity: O(1) for each subcommand specified", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["BITFIELD" key], :cluster-key-idx 1}
+"SORT" {:fn-name "sort", :fn-docstring "Sort the elements in a list, set or sorted set.\n\nSORT key [pattern] [offset_count] [pattern [pattern ...]] [order] [sorting] [destination]\n\nAvailable since: 1.0.0.\n\nTime 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).", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["SORT" key], :cluster-key-idx 1}
+"BITFIELD" {:fn-name "bitfield", :fn-docstring "Perform arbitrary bitfield integer operations on strings.\n\nBITFIELD key operation [operation ...]\n\nAvailable since: 3.2.0.\n\nTime complexity: O(1) for each subcommand specified", :fn-params-fixed [key operation], :fn-params-more [key operation & args], :req-args-fixed ["BITFIELD" key operation], :cluster-key-idx 1}
 "HKEYS" {:fn-name "hkeys", :fn-docstring "Get all the fields in a hash.\n\nHKEYS key\n\nAvailable since: 2.0.0.\n\nTime complexity: O(N) where N is the size of the hash.", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["HKEYS" key], :cluster-key-idx 1}
-"CLIENT CACHING" {:fn-name "client-caching", :fn-docstring "Instruct the server about tracking or not keys in the next request.\n\nCLIENT CACHING YES|NO\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [mode], :fn-params-more nil, :req-args-fixed ["CLIENT" "CACHING" mode], :cluster-key-idx 2}
+"CLIENT CACHING" {:fn-name "client-caching", :fn-docstring "Instruct the server about tracking or not keys in the next request.\n\nCLIENT CACHING mode\n\nAvailable since: 6.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [mode], :fn-params-more nil, :req-args-fixed ["CLIENT" "CACHING" mode], :cluster-key-idx 2}
+"MODULE LOADEX" {:fn-name "module-loadex", :fn-docstring "Load a module with extended parameters.\n\nMODULE LOADEX path [configs [configs ...]] [args [args ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [path], :fn-params-more [path & args], :req-args-fixed ["MODULE" "LOADEX" path], :cluster-key-idx 2}
 "ZREM" {:fn-name "zrem", :fn-docstring "Remove one or more members from a sorted set.\n\nZREM key member [member ...]\n\nAvailable since: 1.2.0.\n\nTime 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.", :fn-params-fixed [key member], :fn-params-more [key member & args], :req-args-fixed ["ZREM" key member], :cluster-key-idx 1}
 "HGET" {:fn-name "hget", :fn-docstring "Get the value of a hash field.\n\nHGET key field\n\nAvailable since: 2.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key field], :fn-params-more nil, :req-args-fixed ["HGET" key field], :cluster-key-idx 1}
-"MEMORY PURGE" {:fn-name "memory-purge", :fn-docstring "Ask the allocator to release memory.\n\nMEMORY PURGE \n\nAvailable since: 4.0.0.\n\n", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "PURGE"], :cluster-key-idx 2}
+"MEMORY PURGE" {:fn-name "memory-purge", :fn-docstring "Ask the allocator to release memory.\n\nMEMORY PURGE \n\nAvailable since: 4.0.0.\n\nTime complexity: Depends on how much memory is allocated, could be slow", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["MEMORY" "PURGE"], :cluster-key-idx 2}
 "ZCOUNT" {:fn-name "zcount", :fn-docstring "Count the members in a sorted set with scores within the given values.\n\nZCOUNT key min max\n\nAvailable since: 2.0.0.\n\nTime complexity: O(log(N)) with N being the number of elements in the sorted set.", :fn-params-fixed [key min max], :fn-params-more nil, :req-args-fixed ["ZCOUNT" key min max], :cluster-key-idx 1}
 "PUNSUBSCRIBE" {:fn-name "punsubscribe", :fn-docstring "Stop listening for messages posted to channels matching the given patterns.\n\nPUNSUBSCRIBE [pattern [pattern ...]]\n\nAvailable since: 2.0.0.\n\nTime 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).", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["PUNSUBSCRIBE"], :cluster-key-idx 1}
 "GETBIT" {:fn-name "getbit", :fn-docstring "Returns the bit value at offset in the string value stored at key.\n\nGETBIT key offset\n\nAvailable since: 2.2.0.\n\nTime complexity: O(1)", :fn-params-fixed [key offset], :fn-params-more nil, :req-args-fixed ["GETBIT" key offset], :cluster-key-idx 1}
-"RESTORE" {:fn-name "restore", :fn-docstring "Create a key using the provided serialized value, previously obtained using DUMP..\n\nRESTORE key ttl serialized-value [REPLACE] [ABSTTL] [IDLETIME seconds] [FREQ frequency]\n\nAvailable since: 2.6.0.\n\nTime 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)).", :fn-params-fixed [key ttl serialized-value], :fn-params-more [key ttl serialized-value & args], :req-args-fixed ["RESTORE" key ttl serialized-value], :cluster-key-idx 1}
+"RESTORE" {:fn-name "restore", :fn-docstring "Create a key using the provided serialized value, previously obtained using DUMP..\n\nRESTORE key ttl serialized-value [replace] [absttl] [seconds] [frequency]\n\nAvailable since: 2.6.0.\n\nTime 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)).", :fn-params-fixed [key ttl serialized-value], :fn-params-more [key ttl serialized-value & args], :req-args-fixed ["RESTORE" key ttl serialized-value], :cluster-key-idx 1}
+"PUBSUB SHARDNUMSUB" {:fn-name "pubsub-shardnumsub", :fn-docstring "Get the count of subscribers for shard channels.\n\nPUBSUB SHARDNUMSUB [shardchannel [shardchannel ...]]\n\nAvailable since: 7.0.0.\n\nTime complexity: O(N) for the SHARDNUMSUB subcommand, where N is the number of requested shard channels", :fn-params-fixed [], :fn-params-more [& args], :req-args-fixed ["PUBSUB" "SHARDNUMSUB"], :cluster-key-idx 2}
 "BITOP" {:fn-name "bitop", :fn-docstring "Perform bitwise operations between strings.\n\nBITOP operation destkey key [key ...]\n\nAvailable since: 2.6.0.\n\nTime complexity: O(N)", :fn-params-fixed [operation destkey key], :fn-params-more [operation destkey key & args], :req-args-fixed ["BITOP" operation destkey key], :cluster-key-idx 1}
+"ZDIFF" {:fn-name "zdiff", :fn-docstring "Subtract multiple sorted sets.\n\nZDIFF numkeys key [key ...] [withscores]\n\nAvailable since: 6.2.0.\n\nTime 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.", :fn-params-fixed [numkeys key], :fn-params-more [numkeys key & args], :req-args-fixed ["ZDIFF" numkeys key], :cluster-key-idx 1}
 "CLUSTER COUNTKEYSINSLOT" {:fn-name "cluster-countkeysinslot", :fn-docstring "Return the number of local keys in the specified hash slot.\n\nCLUSTER COUNTKEYSINSLOT slot\n\nAvailable since: 3.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [slot], :fn-params-more nil, :req-args-fixed ["CLUSTER" "COUNTKEYSINSLOT" slot], :cluster-key-idx 2}
-"REPLICAOF" {:fn-name "replicaof", :fn-docstring "Make the server a replica of another instance, or promote it as master..\n\nREPLICAOF host port\n\nAvailable since: 5.0.0.\n\n", :fn-params-fixed [host port], :fn-params-more nil, :req-args-fixed ["REPLICAOF" host port], :cluster-key-idx 1}
+"REPLICAOF" {:fn-name "replicaof", :fn-docstring "Make the server a replica of another instance, or promote it as master..\n\nREPLICAOF host port\n\nAvailable since: 5.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [host port], :fn-params-more nil, :req-args-fixed ["REPLICAOF" host port], :cluster-key-idx 1}
+"OBJECT FREQ" {:fn-name "object-freq", :fn-docstring "Get the logarithmic access frequency counter of a Redis object.\n\nOBJECT FREQ key\n\nAvailable since: 4.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["OBJECT" "FREQ" key], :cluster-key-idx 2}
 "SUNION" {:fn-name "sunion", :fn-docstring "Add multiple sets.\n\nSUNION key [key ...]\n\nAvailable since: 1.0.0.\n\nTime complexity: O(N) where N is the total number of elements in all given sets.", :fn-params-fixed [key], :fn-params-more [key & args], :req-args-fixed ["SUNION" key], :cluster-key-idx 1}
 "INCR" {:fn-name "incr", :fn-docstring "Increment the integer value of a key by one.\n\nINCR key\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key], :fn-params-more nil, :req-args-fixed ["INCR" key], :cluster-key-idx 1}
+"SCRIPT" {:fn-name "script", :fn-docstring "A container for Lua scripts management commands.\n\nSCRIPT \n\nAvailable since: 2.6.0.\n\nTime complexity: Depends on subcommand.", :fn-params-fixed [], :fn-params-more nil, :req-args-fixed ["SCRIPT"], :cluster-key-idx 1}
 "MOVE" {:fn-name "move", :fn-docstring "Move a key to another database.\n\nMOVE key db\n\nAvailable since: 1.0.0.\n\nTime complexity: O(1)", :fn-params-fixed [key db], :fn-params-more nil, :req-args-fixed ["MOVE" key db], :cluster-key-idx 1}}
\ No newline at end of file