/**
* Static argument syntax hints for common Redis commands.
* Format: command name (uppercase) → syntax string
*/
export default {
// Strings
SET: 'key value [EX seconds | PX ms | EXAT unix-sec | PXAT unix-ms | KEEPTTL] [NX | XX] [GET]',
GET: 'key',
MSET: 'key value [key value ...]',
MGET: 'key [key ...]',
SETNX: 'key value',
SETEX: 'key seconds value',
PSETEX: 'key milliseconds value',
GETSET: 'key value',
GETDEL: 'key',
GETEX: 'key [EX seconds | PX ms | EXAT unix-sec | PXAT unix-ms | PERSIST]',
GETRANGE: 'key start end',
SETRANGE: 'key offset value',
APPEND: 'key value',
STRLEN: 'key',
INCR: 'key',
INCRBY: 'key increment',
INCRBYFLOAT: 'key increment',
DECR: 'key',
DECRBY: 'key decrement',
MSETNX: 'key value [key value ...]',
// Redis 8.4
MSETEX: 'key value [key value ...] [EX seconds | PX ms | EXAT unix-sec | PXAT unix-ms]',
LCS: 'key1 key2 [LEN] [IDX] [MINMATCHLEN min] [WITHMATCHLEN]',
SUBSTR: 'key start end',
// Hash
HSET: 'key field value [field value ...]',
HGET: 'key field',
HMSET: 'key field value [field value ...]',
HMGET: 'key field [field ...]',
HGETALL: 'key',
HDEL: 'key field [field ...]',
HEXISTS: 'key field',
HINCRBY: 'key field increment',
HINCRBYFLOAT: 'key field increment',
HKEYS: 'key',
HVALS: 'key',
HLEN: 'key',
HSETNX: 'key field value',
HRANDFIELD: 'key [count [WITHVALUES]]',
HSCAN: 'key cursor [MATCH pattern] [COUNT count]',
// Redis 8.0 — per-field hash TTL
HGETEX: 'key FIELDS count field [field ...] [EX seconds | PX ms | EXAT unix-sec | PXAT unix-ms | PERSIST]',
HSETEX: 'key FIELDS count field value [field value ...] [EX seconds | PX ms | EXAT unix-sec | PXAT unix-ms | KEEPTTL]',
HGETDEL: 'key FIELDS count field [field ...]',
HTTL: 'key FIELDS count field [field ...]',
HPTTL: 'key FIELDS count field [field ...]',
HEXPIRE: 'key seconds FIELDS count field [field ...]',
HPEXPIRE: 'key milliseconds FIELDS count field [field ...]',
HEXPIREAT: 'key unix-time-seconds FIELDS count field [field ...]',
HPEXPIREAT: 'key unix-time-ms FIELDS count field [field ...]',
HPERSIST: 'key FIELDS count field [field ...]',
HEXPIRETIME: 'key FIELDS count field [field ...]',
HPEXPIRETIME: 'key FIELDS count field [field ...]',
// List
LPUSH: 'key element [element ...]',
RPUSH: 'key element [element ...]',
LPOP: 'key [count]',
RPOP: 'key [count]',
LLEN: 'key',
LRANGE: 'key start stop',
LINDEX: 'key index',
LSET: 'key index element',
LINSERT: 'key BEFORE|AFTER pivot element',
LREM: 'key count element',
LTRIM: 'key start stop',
LPOS: 'key element [RANK rank] [COUNT count] [MAXLEN len]',
LMOVE: 'source destination LEFT|RIGHT LEFT|RIGHT',
BLPOP: 'key [key ...] timeout',
BRPOP: 'key [key ...] timeout',
BLMOVE: 'source destination LEFT|RIGHT LEFT|RIGHT timeout',
RPOPLPUSH: 'source destination',
BRPOPLPUSH: 'source destination timeout',
LPUSHX: 'key element [element ...]',
RPUSHX: 'key element [element ...]',
LMPOP: 'numkeys key [key ...] LEFT|RIGHT [COUNT count]',
BLMPOP: 'timeout numkeys key [key ...] LEFT|RIGHT [COUNT count]',
// Set
SADD: 'key member [member ...]',
SREM: 'key member [member ...]',
SMEMBERS: 'key',
SISMEMBER: 'key member',
SMISMEMBER: 'key member [member ...]',
SCARD: 'key',
SPOP: 'key [count]',
SRANDMEMBER: 'key [count]',
SINTER: 'key [key ...]',
SUNION: 'key [key ...]',
SDIFF: 'key [key ...]',
SINTERSTORE: 'destination key [key ...]',
SUNIONSTORE: 'destination key [key ...]',
SDIFFSTORE: 'destination key [key ...]',
SMOVE: 'source destination member',
SINTERCARD: 'numkeys key [key ...] [LIMIT limit]',
SSCAN: 'key cursor [MATCH pattern] [COUNT count]',
// Sorted Set
ZADD: 'key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]',
ZREM: 'key member [member ...]',
ZSCORE: 'key member',
ZMSCORE: 'key member [member ...]',
ZRANK: 'key member [WITHSCORE]',
ZREVRANK: 'key member [WITHSCORE]',
ZRANGE: 'key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]',
ZRANGEBYSCORE: 'key min max [WITHSCORES] [LIMIT offset count]',
ZREVRANGEBYSCORE: 'key max min [WITHSCORES] [LIMIT offset count]',
ZRANGEBYLEX: 'key min max [LIMIT offset count]',
ZREVRANGEBYLEX: 'key max min [LIMIT offset count]',
ZRANGESTORE: 'dst src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count]',
ZCARD: 'key',
ZCOUNT: 'key min max',
ZLEXCOUNT: 'key min max',
ZINCRBY: 'key increment member',
ZINTERSTORE: 'destination numkeys key [key ...] [WEIGHTS weight ...] [AGGREGATE SUM|MIN|MAX]',
ZUNIONSTORE: 'destination numkeys key [key ...] [WEIGHTS weight ...] [AGGREGATE SUM|MIN|MAX]',
ZDIFFSTORE: 'destination numkeys key [key ...]',
ZINTER: 'numkeys key [key ...] [WEIGHTS weight ...] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]',
ZUNION: 'numkeys key [key ...] [WEIGHTS weight ...] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]',
ZDIFF: 'numkeys key [key ...] [WITHSCORES]',
ZRANDMEMBER: 'key [count [WITHSCORES]]',
ZPOPMIN: 'key [count]',
ZPOPMAX: 'key [count]',
BZPOPMIN: 'key [key ...] timeout',
BZPOPMAX: 'key [key ...] timeout',
ZMPOP: 'numkeys key [key ...] MIN|MAX [COUNT count]',
BZMPOP: 'timeout numkeys key [key ...] MIN|MAX [COUNT count]',
ZSCAN: 'key cursor [MATCH pattern] [COUNT count]',
// Key
DEL: 'key [key ...]',
UNLINK: 'key [key ...]',
EXISTS: 'key [key ...]',
EXPIRE: 'key seconds [NX|XX|GT|LT]',
PEXPIRE: 'key milliseconds [NX|XX|GT|LT]',
EXPIREAT: 'key unix-time-seconds [NX|XX|GT|LT]',
PEXPIREAT: 'key unix-time-milliseconds [NX|XX|GT|LT]',
PERSIST: 'key',
TTL: 'key',
PTTL: 'key',
EXPIRETIME: 'key',
PEXPIRETIME: 'key',
TYPE: 'key',
RENAME: 'key newkey',
RENAMENX: 'key newkey',
KEYS: 'pattern',
SCAN: 'cursor [MATCH pattern] [COUNT count] [TYPE type]',
RANDOMKEY: '',
DUMP: 'key',
RESTORE: 'key ttl serialized-value [REPLACE] [ABSTTL] [IDLETIME seconds] [FREQ frequency]',
COPY: 'source destination [DB destination-db] [REPLACE]',
MOVE: 'key db',
OBJECT: 'ENCODING|FREQ|HELP|IDLETIME|REFCOUNT key',
SORT: 'key [BY pattern] [LIMIT offset count] [GET pattern ...] [ASC|DESC] [ALPHA] [STORE destination]',
SORT_RO: 'key [BY pattern] [LIMIT offset count] [GET pattern ...] [ASC|DESC] [ALPHA]',
TOUCH: 'key [key ...]',
WAIT: 'numreplicas timeout',
WAITAOF: 'numlocal numreplicas timeout',
// Stream
XADD: 'key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|id field value [field value ...]',
XREAD: '[COUNT count] [BLOCK ms] STREAMS key [key ...] id [id ...]',
XREADGROUP: 'GROUP group consumer [COUNT count] [BLOCK ms] [NOACK] STREAMS key [key ...] id [id ...]',
XRANGE: 'key start end [COUNT count]',
XREVRANGE: 'key end start [COUNT count]',
XLEN: 'key',
XINFO: 'CONSUMERS|GROUPS|STREAM key [FULL [COUNT count]]',
XACK: 'key group id [id ...]',
XCLAIM: 'key group consumer min-idle-time id [id ...] [IDLE ms] [TIME ms] [RETRYCOUNT count] [FORCE] [JUSTID] [LASTID id]',
XAUTOCLAIM: 'key group consumer min-idle-time start [COUNT count] [JUSTID]',
XDEL: 'key id [id ...]',
XTRIM: 'key MAXLEN|MINID [=|~] threshold [LIMIT count]',
XGROUP: 'CREATE|CREATECONSUMER|DELCONSUMER|DESTROY|SETID key group [id|$] [MKSTREAM] [ENTRIESREAD entries-read]',
XPENDING: 'key group [[IDLE min-idle-time] start end count [consumer]]',
XSETID: 'key last-id [ENTRIESREAD entries-read]',
// Redis 8.2
XDELEX: 'key id [id ...] [GROUP group] [IDLE min-idle-time]',
// Redis 8.6
XCFGSET: 'key parameter value',
// Server
INFO: '[section ...]',
DBSIZE: '',
FLUSHDB: '[ASYNC|SYNC]',
FLUSHALL: '[ASYNC|SYNC]',
SELECT: 'index',
PING: '[message]',
ECHO: 'message',
QUIT: '',
CONFIG: 'GET|SET|RESETSTAT|REWRITE parameter [value]',
SLOWLOG: 'GET|LEN|RESET [count]',
CLIENT: 'GETNAME|ID|INFO|KILL|LIST|NO-EVICT|PAUSE|REPLY|SETNAME|UNPAUSE|NO-TOUCH ...',
MEMORY: 'DOCTOR|HELP|MALLOC-STATS|PURGE|STATS|USAGE key [SAMPLES count]',
TIME: '',
LASTSAVE: '',
BGSAVE: '[SCHEDULE]',
BGREWRITEAOF: '',
SAVE: '',
SHUTDOWN: '[NOSAVE|SAVE] [NOW] [FORCE]',
ACL: 'CAT|DELUSER|GENPASS|GETUSER|LIST|LOAD|LOG|SAVE|SETUSER|WHOAMI ...',
MODULE: 'LIST|LOAD|LOADEX|UNLOAD ...',
COMMAND: '[COUNT|DOCS|GETKEYS|INFO|LIST ...]',
DEBUG: 'subcommand [arg ...]',
LATENCY: 'HISTORY|LATEST|RESET event',
SWAPDB: 'index1 index2',
REPLICAOF: 'host port',
SLAVEOF: 'host port',
FAILOVER: '[TO host port [FORCE]] [ABORT] [TIMEOUT ms]',
CLUSTER: 'INFO|NODES|SLOTS|MYID|RESET|KEYSLOT|SLOT-STATS|MIGRATION|...',
// Redis 8.4
DIGEST: 'key',
// Pub/Sub
PUBLISH: 'channel message',
SUBSCRIBE: 'channel [channel ...]',
UNSUBSCRIBE: '[channel ...]',
PSUBSCRIBE: 'pattern [pattern ...]',
PUNSUBSCRIBE: '[pattern ...]',
PUBSUB: 'CHANNELS|NUMSUB|NUMPAT|SHARDCHANNELS|SHARDNUMSUB [argument ...]',
// Scripting
EVAL: '"script" numkeys [key ...] [arg ...]',
EVALSHA: 'sha1 numkeys [key ...] [arg ...]',
EVALRO: '"script" numkeys [key ...] [arg ...]',
EVALSHA_RO: 'sha1 numkeys [key ...] [arg ...]',
SCRIPT: 'DEBUG|EXISTS|FLUSH|LOAD ...',
FCALL: 'function numkeys [key ...] [arg ...]',
FCALL_RO: 'function numkeys [key ...] [arg ...]',
FUNCTION: 'CREATE|DELETE|DUMP|FLUSH|LIST|LOAD|RESTORE|STATS ...',
// Geo
GEOADD: 'key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]',
GEOPOS: 'key member [member ...]',
GEODIST: 'key member1 member2 [M|KM|FT|MI]',
GEOSEARCH: 'key FROMMEMBER member|FROMLONLAT lng lat BYRADIUS radius M|KM|FT|MI|BYBOX width height M|KM|FT|MI [ASC|DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST] [WITHHASH]',
GEOSEARCHSTORE: 'destination source FROMMEMBER member|FROMLONLAT lng lat BYRADIUS radius unit|BYBOX width height unit [ASC|DESC] [COUNT count [ANY]] [STOREDIST]',
GEORADIUS: 'key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]',
GEORADIUSBYMEMBER: 'key member radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]',
GEOHASH: 'key member [member ...]',
// HyperLogLog
PFADD: 'key element [element ...]',
PFCOUNT: 'key [key ...]',
PFMERGE: 'destkey sourcekey [sourcekey ...]',
// Bitmap
SETBIT: 'key offset value',
GETBIT: 'key offset',
BITCOUNT: 'key [start end [BYTE|BIT]]',
BITPOS: 'key bit [start [end [BYTE|BIT]]]',
BITOP: 'AND|OR|XOR|NOT|DIFF|DIFF1|ANDOR|ONE destkey key [key ...]',
BITFIELD: 'key [GET encoding offset | SET encoding offset value | INCRBY encoding offset increment | OVERFLOW WRAP|SAT|FAIL] ...',
BITFIELD_RO: 'key GET encoding offset [GET encoding offset ...]',
// JSON (ReJSON)
'JSON.SET': 'key path value [NX|XX]',
'JSON.GET': 'key [path ...]',
'JSON.DEL': 'key [path]',
'JSON.MGET': 'key [key ...] path',
'JSON.TYPE': 'key [path]',
'JSON.NUMINCRBY': 'key path value',
'JSON.NUMMULTBY': 'key path value',
'JSON.STRAPPEND': 'key [path] value',
'JSON.STRLEN': 'key [path]',
'JSON.ARRAPPEND': 'key path value [value ...]',
'JSON.ARRINDEX': 'key path value [start [stop]]',
'JSON.ARRINSERT': 'key path index value [value ...]',
'JSON.ARRLEN': 'key [path]',
'JSON.ARRPOP': 'key [path [index]]',
'JSON.ARRTRIM': 'key path start stop',
'JSON.OBJKEYS': 'key [path]',
'JSON.OBJLEN': 'key [path]',
'JSON.RESP': 'key [path]',
// RediSearch
'FT.CREATE': 'index [ON HASH|JSON] [PREFIX count prefix ...] SCHEMA field TYPE [SORTABLE] ...',
'FT.SEARCH': 'index query [NOCONTENT] [VERBATIM] [NOSTOPWORDS] [WITHSCORES] [WITHPAYLOADS] [WITHSORTKEYS] [FILTER field min max ...] [GEOFILTER field lon lat radius unit] [INKEYS count key ...] [INFIELDS count field ...] [RETURN count field ...] [SUMMARIZE ...] [HIGHLIGHT ...] [SLOP slop] [TIMEOUT timeout] [INORDER] [LANGUAGE lang] [EXPANDER exp] [SCORER scorer] [SORTBY field [ASC|DESC]] [LIMIT offset num]',
'FT.AGGREGATE': 'index query [LOAD count field ...] [GROUPBY count field ... REDUCE func nargs arg ... [AS name]] [SORTBY count field [ASC|DESC] ...] [APPLY expr AS name] [LIMIT offset num] [FILTER expr]',
'FT.INFO': 'index',
'FT.DROPINDEX': 'index [DD]',
'FT._LIST': '',
'FT.ALTER': 'index SCHEMA ADD field TYPE ...',
'FT.ALIASADD': 'alias index',
'FT.ALIASDEL': 'alias',
'FT.ALIASUPDATE': 'alias index',
'FT.TAGVALS': 'index field',
'FT.EXPLAIN': 'index query',
// Redis 8.4
'FT.HYBRID': 'index query [SCORER scorer] [WEIGHT text_weight vector_weight] [LIMIT offset num] VECTOR field num value [EF_RUNTIME efrt] [EPSILON eps]',
// TimeSeries
'TS.CREATE': 'key [RETENTION retentionPeriod] [ENCODING UNCOMPRESSED|COMPRESSED] [CHUNK_SIZE size] [DUPLICATE_POLICY policy] [LABELS label value ...]',
'TS.ADD': 'key timestamp value [RETENTION retentionPeriod] [ENCODING UNCOMPRESSED|COMPRESSED] [CHUNK_SIZE size] [ON_DUPLICATE policy] [LABELS label value ...]',
'TS.MADD': 'key timestamp value [key timestamp value ...]',
'TS.INCRBY': 'key value [TIMESTAMP timestamp] [RETENTION retentionPeriod] [LABELS label value ...]',
'TS.DECRBY': 'key value [TIMESTAMP timestamp] [RETENTION retentionPeriod] [LABELS label value ...]',
'TS.DEL': 'key fromTimestamp toTimestamp',
'TS.RANGE': 'key fromTimestamp toTimestamp [LATEST] [FILTER_BY_TS ts ...] [FILTER_BY_VALUE min max] [COUNT count] [AGGREGATION aggregator bucketDuration]',
'TS.REVRANGE': 'key fromTimestamp toTimestamp [LATEST] [FILTER_BY_TS ts ...] [FILTER_BY_VALUE min max] [COUNT count] [AGGREGATION aggregator bucketDuration]',
'TS.MRANGE': 'fromTimestamp toTimestamp [LATEST] [FILTER_BY_TS ts ...] [FILTER_BY_VALUE min max] [WITHLABELS] [COUNT count] [AGGREGATION aggregator bucketDuration] FILTER filter ...',
'TS.MREVRANGE': 'fromTimestamp toTimestamp [LATEST] [FILTER_BY_TS ts ...] [FILTER_BY_VALUE min max] [WITHLABELS] [COUNT count] [AGGREGATION aggregator bucketDuration] FILTER filter ...',
'TS.GET': 'key [LATEST]',
'TS.MGET': '[LATEST] [WITHLABELS] FILTER filter ...',
'TS.INFO': 'key [DEBUG]',
'TS.ALTER': 'key [RETENTION retentionPeriod] [CHUNK_SIZE size] [DUPLICATE_POLICY policy] [LABELS label value ...]',
'TS.QUERYINDEX': 'filter ...',
'TS.CREATERULE': 'sourceKey destKey AGGREGATION aggregator bucketDuration [alignTimestamp]',
'TS.DELETERULE': 'sourceKey destKey',
// Bloom Filter
'BF.RESERVE': 'key error_rate capacity [EXPANSION expansion] [NONSCALING]',
'BF.ADD': 'key item',
'BF.MADD': 'key item [item ...]',
'BF.EXISTS': 'key item',
'BF.MEXISTS': 'key item [item ...]',
'BF.INFO': 'key [CAPACITY|SIZE|FILTERS|ITEMS|EXPANSION]',
'BF.INSERT': 'key [CAPACITY cap] [ERROR error] [EXPANSION exp] [NOCREATE] [NONSCALING] ITEMS item [item ...]',
// Cuckoo Filter
'CF.RESERVE': 'key capacity [BUCKETSIZE bucketsize] [MAXITERATIONS maxiterations] [EXPANSION expansion]',
'CF.ADD': 'key item',
'CF.ADDNX': 'key item',
'CF.EXISTS': 'key item',
'CF.MEXISTS': 'key item [item ...]',
'CF.DEL': 'key item',
'CF.COUNT': 'key item',
'CF.INFO': 'key',
// Top-K
'TOPK.RESERVE': 'key topk [width] [depth] [decay]',
'TOPK.ADD': 'key item [item ...]',
'TOPK.INCRBY': 'key item increment [item increment ...]',
'TOPK.QUERY': 'key item [item ...]',
'TOPK.COUNT': 'key item [item ...]',
'TOPK.LIST': 'key [WITHCOUNT]',
'TOPK.INFO': 'key',
// Count-Min Sketch
'CMS.INITBYDIM': 'key width depth',
'CMS.INITBYPROB': 'key error probability',
'CMS.INCRBY': 'key item increment [item increment ...]',
'CMS.QUERY': 'key item [item ...]',
'CMS.MERGE': 'destination numkeys source [source ...] [WEIGHTS weight [weight ...]]',
'CMS.INFO': 'key',
// T-Digest
'TDIGEST.CREATE': 'key [COMPRESSION compression]',
'TDIGEST.ADD': 'key value [value ...]',
'TDIGEST.MERGE': 'destination-key numkeys source-key [source-key ...] [COMPRESSION compression] [OVERRIDE]',
'TDIGEST.CDF': 'key value [value ...]',
'TDIGEST.QUANTILE': 'key quantile [quantile ...]',
'TDIGEST.MIN': 'key',
'TDIGEST.MAX': 'key',
'TDIGEST.TRIMMED_MEAN': 'key low_cut_quantile high_cut_quantile',
'TDIGEST.RANK': 'key value [value ...]',
'TDIGEST.REVRANK': 'key value [value ...]',
'TDIGEST.BYRANK': 'key rank [rank ...]',
'TDIGEST.BYREVRANK': 'key rank [rank ...]',
'TDIGEST.INFO': 'key',
'TDIGEST.RESET': 'key',
// VectorSet (Redis 8)
'VADD': 'key [REDUCE dim] VALUES dim val [val ...] element [SETATTR "field\\nvalue\\n..."] [CAS]',
'VSIM': 'key {ELE element | VALUES dim val [val ...]} [COUNT count] [WITHSCORES] [FILTER expr]',
'VCARD': 'key',
'VDIM': 'key',
'VGETATTR': 'key element',
'VSETATTR': 'key element "field\\nvalue\\n..."',
'VREM': 'key element',
'VINFO': 'key',
'VLINKS': 'key element [WITHSCORES]',
'VRANDMEMBER': 'key [count]',
'VEMB': 'key element',
}