ioredis-mock
Version:
This library emulates ioredis by performing all operations in-memory.
812 lines (806 loc) • 50.4 kB
Markdown
## Supported commands 
> PRs welcome :heart:
| redis | ioredis | ioredis-mock |
| --------------------------- | :----------------: | :----------------: |
| [acl] | :white_check_mark: | :x: |
| [append] | :white_check_mark: | :white_check_mark: |
| [asking] | :white_check_mark: | :white_check_mark: |
| [auth] | :white_check_mark: | :white_check_mark: |
| [bgrewriteaof] | :white_check_mark: | :white_check_mark: |
| [bgsave] | :white_check_mark: | :white_check_mark: |
| [bitcount] | :white_check_mark: | :white_check_mark: |
| [bitfield] | :white_check_mark: | :x: |
| [bitfield_ro] | :white_check_mark: | :x: |
| [bitop] | :white_check_mark: | :x: |
| [bitpos] | :white_check_mark: | :x: |
| [blmove] | :white_check_mark: | :x: |
| [blmpop] | :white_check_mark: | :x: |
| [blpop] | :white_check_mark: | :x: |
| [brpop] | :white_check_mark: | :x: |
| [brpoplpush] | :white_check_mark: | :white_check_mark: |
| [bzmpop] | :white_check_mark: | :x: |
| [bzpopmax] | :white_check_mark: | :x: |
| [bzpopmin] | :white_check_mark: | :x: |
| [client] | :white_check_mark: | :x: |
| [cluster] | :white_check_mark: | :white_check_mark: |
| [command] | :white_check_mark: | :white_check_mark: |
| [config] | :white_check_mark: | :white_check_mark: |
| [copy] | :white_check_mark: | :x: |
| [dbsize] | :white_check_mark: | :white_check_mark: |
| [decr] | :white_check_mark: | :white_check_mark: |
| [decrby] | :white_check_mark: | :white_check_mark: |
| [del] | :white_check_mark: | :white_check_mark: |
| [discard] | :white_check_mark: | :white_check_mark: |
| [echo] | :white_check_mark: | :white_check_mark: |
| [eval] | :white_check_mark: | :white_check_mark: |
| [eval_ro] | :white_check_mark: | :x: |
| [evalsha] | :white_check_mark: | :white_check_mark: |
| [evalsha_ro] | :white_check_mark: | :x: |
| [exists] | :white_check_mark: | :white_check_mark: |
| [expire] | :white_check_mark: | :white_check_mark: |
| [expireat] | :white_check_mark: | :white_check_mark: |
| [expiretime] | :white_check_mark: | :white_check_mark: |
| [failover] | :white_check_mark: | :white_check_mark: |
| [fcall] | :white_check_mark: | :x: |
| [fcall_ro] | :white_check_mark: | :x: |
| [flushall] | :white_check_mark: | :white_check_mark: |
| [flushdb] | :white_check_mark: | :white_check_mark: |
| [function] | :white_check_mark: | :x: |
| [geoadd] | :white_check_mark: | :x: |
| [geodist] | :white_check_mark: | :x: |
| [geohash] | :white_check_mark: | :x: |
| [geopos] | :white_check_mark: | :x: |
| [georadius] | :white_check_mark: | :x: |
| [georadius_ro] | :white_check_mark: | :x: |
| [georadiusbymember] | :white_check_mark: | :x: |
| [georadiusbymember_ro] | :white_check_mark: | :x: |
| [geosearch] | :white_check_mark: | :x: |
| [geosearchstore] | :white_check_mark: | :x: |
| [get] | :white_check_mark: | :white_check_mark: |
| [getbit] | :white_check_mark: | :white_check_mark: |
| [getdel] | :white_check_mark: | :white_check_mark: |
| [getex] | :white_check_mark: | :white_check_mark: |
| [getrange] | :white_check_mark: | :white_check_mark: |
| [getset] | :white_check_mark: | :white_check_mark: |
| [hdel] | :white_check_mark: | :white_check_mark: |
| [hexists] | :white_check_mark: | :white_check_mark: |
| [hexpire] | :white_check_mark: | :x: |
| [hget] | :white_check_mark: | :white_check_mark: |
| [hgetall] | :white_check_mark: | :white_check_mark: |
| [hincrby] | :white_check_mark: | :white_check_mark: |
| [hincrbyfloat] | :white_check_mark: | :white_check_mark: |
| [hkeys] | :white_check_mark: | :white_check_mark: |
| [hlen] | :white_check_mark: | :white_check_mark: |
| [hmget] | :white_check_mark: | :white_check_mark: |
| [hmset] | :white_check_mark: | :white_check_mark: |
| [hpexpire] | :white_check_mark: | :x: |
| [hrandfield] | :white_check_mark: | :white_check_mark: |
| [hscan] | :white_check_mark: | :white_check_mark: |
| [hset] | :white_check_mark: | :white_check_mark: |
| [hsetnx] | :white_check_mark: | :white_check_mark: |
| [hstrlen] | :white_check_mark: | :white_check_mark: |
| [hvals] | :white_check_mark: | :white_check_mark: |
| [incr] | :white_check_mark: | :white_check_mark: |
| [incrby] | :white_check_mark: | :white_check_mark: |
| [incrbyfloat] | :white_check_mark: | :white_check_mark: |
| [info] | :white_check_mark: | :white_check_mark: |
| [keys] | :white_check_mark: | :white_check_mark: |
| [lastsave] | :white_check_mark: | :white_check_mark: |
| [lcs] | :white_check_mark: | :x: |
| [lindex] | :white_check_mark: | :white_check_mark: |
| [linsert] | :white_check_mark: | :white_check_mark: |
| [llen] | :white_check_mark: | :white_check_mark: |
| [lmove] | :white_check_mark: | :white_check_mark: |
| [lmpop] | :white_check_mark: | :white_check_mark: |
| [lolwut] | :white_check_mark: | :white_check_mark: |
| [lpop] | :white_check_mark: | :white_check_mark: |
| [lpos] | :white_check_mark: | :white_check_mark: |
| [lpush] | :white_check_mark: | :white_check_mark: |
| [lpushx] | :white_check_mark: | :white_check_mark: |
| [lrange] | :white_check_mark: | :white_check_mark: |
| [lrem] | :white_check_mark: | :white_check_mark: |
| [lset] | :white_check_mark: | :white_check_mark: |
| [ltrim] | :white_check_mark: | :white_check_mark: |
| [mget] | :white_check_mark: | :white_check_mark: |
| [monitor] | :white_check_mark: | :x: |
| [move] | :white_check_mark: | :x: |
| [mset] | :white_check_mark: | :white_check_mark: |
| [msetnx] | :white_check_mark: | :white_check_mark: |
| [object] | :white_check_mark: | :white_check_mark: |
| [persist] | :white_check_mark: | :white_check_mark: |
| [pexpire] | :white_check_mark: | :white_check_mark: |
| [pexpireat] | :white_check_mark: | :white_check_mark: |
| [pexpiretime] | :white_check_mark: | :white_check_mark: |
| [pfadd] | :white_check_mark: | :x: |
| [pfcount] | :white_check_mark: | :x: |
| [pfmerge] | :white_check_mark: | :x: |
| [ping] | :white_check_mark: | :white_check_mark: |
| [psetex] | :white_check_mark: | :white_check_mark: |
| [psubscribe] | :white_check_mark: | :white_check_mark: |
| [psync] | :white_check_mark: | :x: |
| [pttl] | :white_check_mark: | :white_check_mark: |
| [publish] | :white_check_mark: | :white_check_mark: |
| [pubsub] | :white_check_mark: | :white_check_mark: |
| [punsubscribe] | :white_check_mark: | :white_check_mark: |
| [quit] | :white_check_mark: | :white_check_mark: |
| [randomkey] | :white_check_mark: | :white_check_mark: |
| [readonly] | :white_check_mark: | :white_check_mark: |
| [readwrite] | :white_check_mark: | :white_check_mark: |
| [rename] | :white_check_mark: | :white_check_mark: |
| [renamenx] | :white_check_mark: | :white_check_mark: |
| [replconf] | :white_check_mark: | :white_check_mark: |
| [replicaof] | :white_check_mark: | :white_check_mark: |
| [reset] | :white_check_mark: | :x: |
| [role] | :white_check_mark: | :white_check_mark: |
| [rpop] | :white_check_mark: | :white_check_mark: |
| [rpoplpush] | :white_check_mark: | :white_check_mark: |
| [rpush] | :white_check_mark: | :white_check_mark: |
| [rpushx] | :white_check_mark: | :white_check_mark: |
| [sadd] | :white_check_mark: | :white_check_mark: |
| [save] | :white_check_mark: | :white_check_mark: |
| [scan] | :white_check_mark: | :white_check_mark: |
| [scard] | :white_check_mark: | :white_check_mark: |
| [script] | :white_check_mark: | :x: |
| [sdiff] | :white_check_mark: | :white_check_mark: |
| [sdiffstore] | :white_check_mark: | :white_check_mark: |
| [select] | :white_check_mark: | :x: |
| [set] | :white_check_mark: | :white_check_mark: |
| [setbit] | :white_check_mark: | :white_check_mark: |
| [setex] | :white_check_mark: | :white_check_mark: |
| [setnx] | :white_check_mark: | :white_check_mark: |
| [setrange] | :white_check_mark: | :white_check_mark: |
| [shutdown] | :white_check_mark: | :x: |
| [sinter] | :white_check_mark: | :white_check_mark: |
| [sintercard] | :white_check_mark: | :x: |
| [sinterstore] | :white_check_mark: | :white_check_mark: |
| [sismember] | :white_check_mark: | :white_check_mark: |
| [slaveof] | :white_check_mark: | :white_check_mark: |
| [smembers] | :white_check_mark: | :white_check_mark: |
| [smismember] | :white_check_mark: | :white_check_mark: |
| [smove] | :white_check_mark: | :white_check_mark: |
| [sort] | :white_check_mark: | :x: |
| [sort_ro] | :white_check_mark: | :x: |
| [spop] | :white_check_mark: | :white_check_mark: |
| [spublish] | :white_check_mark: | :x: |
| [srandmember] | :white_check_mark: | :white_check_mark: |
| [srem] | :white_check_mark: | :white_check_mark: |
| [sscan] | :white_check_mark: | :white_check_mark: |
| [ssubscribe] | :white_check_mark: | :x: |
| [strlen] | :white_check_mark: | :white_check_mark: |
| [subscribe] | :white_check_mark: | :white_check_mark: |
| [substr] | :white_check_mark: | :white_check_mark: |
| [sunion] | :white_check_mark: | :white_check_mark: |
| [sunionstore] | :white_check_mark: | :white_check_mark: |
| [sunsubscribe] | :white_check_mark: | :x: |
| [swapdb] | :white_check_mark: | :x: |
| [sync] | :white_check_mark: | :x: |
| [time] | :white_check_mark: | :white_check_mark: |
| [touch] | :white_check_mark: | :x: |
| [ttl] | :white_check_mark: | :white_check_mark: |
| [type] | :white_check_mark: | :white_check_mark: |
| [unlink] | :white_check_mark: | :white_check_mark: |
| [unsubscribe] | :white_check_mark: | :white_check_mark: |
| [unwatch] | :white_check_mark: | :white_check_mark: |
| [wait] | :white_check_mark: | :x: |
| [watch] | :white_check_mark: | :white_check_mark: |
| [xack] | :white_check_mark: | :x: |
| [xadd] | :white_check_mark: | :white_check_mark: |
| [xautoclaim] | :white_check_mark: | :x: |
| [xclaim] | :white_check_mark: | :x: |
| [xdel] | :white_check_mark: | :x: |
| [xdelex] | :white_check_mark: | :x: |
| [xgroup] | :white_check_mark: | :x: |
| [xinfo] | :white_check_mark: | :x: |
| [xlen] | :white_check_mark: | :white_check_mark: |
| [xpending] | :white_check_mark: | :x: |
| [xrange] | :white_check_mark: | :white_check_mark: |
| [xread] | :white_check_mark: | :white_check_mark: |
| [xreadgroup] | :white_check_mark: | :x: |
| [xrevrange] | :white_check_mark: | :white_check_mark: |
| [xsetid] | :white_check_mark: | :x: |
| [xtrim] | :white_check_mark: | :x: |
| [zadd] | :white_check_mark: | :white_check_mark: |
| [zcard] | :white_check_mark: | :white_check_mark: |
| [zcount] | :white_check_mark: | :white_check_mark: |
| [zdiff] | :white_check_mark: | :white_check_mark: |
| [zdiffstore] | :white_check_mark: | :x: |
| [zincrby] | :white_check_mark: | :white_check_mark: |
| [zinter] | :white_check_mark: | :x: |
| [zintercard] | :white_check_mark: | :x: |
| [zinterstore] | :white_check_mark: | :white_check_mark: |
| [zlexcount] | :white_check_mark: | :x: |
| [zmpop] | :white_check_mark: | :x: |
| [zmscore] | :white_check_mark: | :white_check_mark: |
| [zpopmax] | :white_check_mark: | :white_check_mark: |
| [zpopmin] | :white_check_mark: | :white_check_mark: |
| [zrandmember] | :white_check_mark: | :x: |
| [zrange] | :white_check_mark: | :white_check_mark: |
| [zrangebylex] | :white_check_mark: | :white_check_mark: |
| [zrangebyscore] | :white_check_mark: | :white_check_mark: |
| [zrangestore] | :white_check_mark: | :x: |
| [zrank] | :white_check_mark: | :white_check_mark: |
| [zrem] | :white_check_mark: | :white_check_mark: |
| [zremrangebylex] | :white_check_mark: | :x: |
| [zremrangebyrank] | :white_check_mark: | :white_check_mark: |
| [zremrangebyscore] | :white_check_mark: | :white_check_mark: |
| [zrevrange] | :white_check_mark: | :white_check_mark: |
| [zrevrangebylex] | :white_check_mark: | :white_check_mark: |
| [zrevrangebyscore] | :white_check_mark: | :white_check_mark: |
| [zrevrank] | :white_check_mark: | :white_check_mark: |
| [zscan] | :white_check_mark: | :white_check_mark: |
| [zscore] | :white_check_mark: | :white_check_mark: |
| [zunion] | :white_check_mark: | :x: |
| [zunionstore] | :white_check_mark: | :x: |
| [_FT.CONFIG] | :x: | :x: |
| [_FT.DEBUG] | :x: | :x: |
| [_FT.SAFEADD] | :x: | :x: |
| [bf.add] | :x: | :x: |
| [bf.card] | :x: | :x: |
| [bf.debug] | :x: | :x: |
| [bf.exists] | :x: | :x: |
| [bf.info] | :x: | :x: |
| [bf.insert] | :x: | :x: |
| [bf.loadchunk] | :x: | :x: |
| [bf.madd] | :x: | :x: |
| [bf.mexists] | :x: | :x: |
| [bf.reserve] | :x: | :x: |
| [bf.scandump] | :x: | :x: |
| [cf.add] | :x: | :x: |
| [cf.addnx] | :x: | :x: |
| [cf.compact] | :x: | :x: |
| [cf.count] | :x: | :x: |
| [cf.debug] | :x: | :x: |
| [cf.del] | :x: | :x: |
| [cf.exists] | :x: | :x: |
| [cf.info] | :x: | :x: |
| [cf.insert] | :x: | :x: |
| [cf.insertnx] | :x: | :x: |
| [cf.loadchunk] | :x: | :x: |
| [cf.mexists] | :x: | :x: |
| [cf.reserve] | :x: | :x: |
| [cf.scandump] | :x: | :x: |
| [cms.incrby] | :x: | :x: |
| [cms.info] | :x: | :x: |
| [cms.initbydim] | :x: | :x: |
| [cms.initbyprob] | :x: | :x: |
| [cms.merge] | :x: | :x: |
| [cms.query] | :x: | :x: |
| [FT._ALIASADDIFNX] | :x: | :x: |
| [FT._ALIASDELIFX] | :x: | :x: |
| [FT._ALTERIFNX] | :x: | :x: |
| [FT._CREATEIFNX] | :x: | :x: |
| [FT._DROPIFX] | :x: | :x: |
| [FT._DROPINDEXIFX] | :x: | :x: |
| [FT._LIST] | :x: | :x: |
| [FT.ADD] | :x: | :x: |
| [FT.AGGREGATE] | :x: | :x: |
| [FT.ALIASADD] | :x: | :x: |
| [FT.ALIASDEL] | :x: | :x: |
| [FT.ALIASUPDATE] | :x: | :x: |
| [FT.ALTER] | :x: | :x: |
| [FT.CONFIG] | :x: | :x: |
| [FT.CREATE] | :x: | :x: |
| [FT.CURSOR] | :x: | :x: |
| [FT.DEL] | :x: | :x: |
| [FT.DICTADD] | :x: | :x: |
| [FT.DICTDEL] | :x: | :x: |
| [FT.DICTDUMP] | :x: | :x: |
| [FT.DROP] | :x: | :x: |
| [FT.DROPINDEX] | :x: | :x: |
| [FT.EXPLAIN] | :x: | :x: |
| [FT.EXPLAINCLI] | :x: | :x: |
| [FT.GET] | :x: | :x: |
| [FT.INFO] | :x: | :x: |
| [FT.MGET] | :x: | :x: |
| [FT.PROFILE] | :x: | :x: |
| [FT.SEARCH] | :x: | :x: |
| [FT.SPELLCHECK] | :x: | :x: |
| [FT.SUGADD] | :x: | :x: |
| [FT.SUGDEL] | :x: | :x: |
| [FT.SUGGET] | :x: | :x: |
| [FT.SUGLEN] | :x: | :x: |
| [FT.SYNADD] | :x: | :x: |
| [FT.SYNDUMP] | :x: | :x: |
| [FT.SYNUPDATE] | :x: | :x: |
| [FT.TAGVALS] | :x: | :x: |
| [hexpireat] | :x: | :x: |
| [hexpiretime] | :x: | :x: |
| [hgetdel] | :x: | :x: |
| [hgetex] | :x: | :x: |
| [hpersist] | :x: | :x: |
| [hpexpireat] | :x: | :x: |
| [hpexpiretime] | :x: | :x: |
| [hpttl] | :x: | :x: |
| [hsetex] | :x: | :x: |
| [httl] | :x: | :x: |
| [json.arrappend] | :x: | :x: |
| [json.arrindex] | :x: | :x: |
| [json.arrinsert] | :x: | :x: |
| [json.arrlen] | :x: | :x: |
| [json.arrpop] | :x: | :x: |
| [json.arrtrim] | :x: | :x: |
| [json.clear] | :x: | :x: |
| [json.debug] | :x: | :x: |
| [json.del] | :x: | :x: |
| [json.forget] | :x: | :x: |
| [json.get] | :x: | :x: |
| [json.merge] | :x: | :x: |
| [json.mget] | :x: | :x: |
| [json.mset] | :x: | :x: |
| [json.numincrby] | :x: | :x: |
| [json.nummultby] | :x: | :x: |
| [json.numpowby] | :x: | :x: |
| [json.objkeys] | :x: | :x: |
| [json.objlen] | :x: | :x: |
| [json.resp] | :x: | :x: |
| [json.set] | :x: | :x: |
| [json.strappend] | :x: | :x: |
| [json.strlen] | :x: | :x: |
| [json.toggle] | :x: | :x: |
| [json.type] | :x: | :x: |
| [search.CLUSTERINFO] | :x: | :x: |
| [search.CLUSTERREFRESH] | :x: | :x: |
| [search.CLUSTERSET] | :x: | :x: |
| [tdigest.add] | :x: | :x: |
| [tdigest.byrank] | :x: | :x: |
| [tdigest.byrevrank] | :x: | :x: |
| [tdigest.cdf] | :x: | :x: |
| [tdigest.create] | :x: | :x: |
| [tdigest.info] | :x: | :x: |
| [tdigest.max] | :x: | :x: |
| [tdigest.merge] | :x: | :x: |
| [tdigest.min] | :x: | :x: |
| [tdigest.quantile] | :x: | :x: |
| [tdigest.rank] | :x: | :x: |
| [tdigest.reset] | :x: | :x: |
| [tdigest.revrank] | :x: | :x: |
| [tdigest.trimmed_mean] | :x: | :x: |
| [timeseries.CLUSTERSET] | :x: | :x: |
| [timeseries.REFRESHCLUSTER] | :x: | :x: |
| [topk.add] | :x: | :x: |
| [topk.count] | :x: | :x: |
| [topk.incrby] | :x: | :x: |
| [topk.info] | :x: | :x: |
| [topk.list] | :x: | :x: |
| [topk.query] | :x: | :x: |
| [topk.reserve] | :x: | :x: |
| [ts.add] | :x: | :x: |
| [ts.alter] | :x: | :x: |
| [ts.create] | :x: | :x: |
| [ts.createrule] | :x: | :x: |
| [ts.decrby] | :x: | :x: |
| [ts.del] | :x: | :x: |
| [ts.deleterule] | :x: | :x: |
| [ts.get] | :x: | :x: |
| [ts.incrby] | :x: | :x: |
| [ts.info] | :x: | :x: |
| [ts.madd] | :x: | :x: |
| [ts.mget] | :x: | :x: |
| [ts.mrange] | :x: | :x: |
| [ts.mrevrange] | :x: | :x: |
| [ts.queryindex] | :x: | :x: |
| [ts.range] | :x: | :x: |
| [ts.revrange] | :x: | :x: |
| [VADD] | :x: | :x: |
| [VCARD] | :x: | :x: |
| [VDIM] | :x: | :x: |
| [VEMB] | :x: | :x: |
| [VGETATTR] | :x: | :x: |
| [VINFO] | :x: | :x: |
| [VISMEMBER] | :x: | :x: |
| [VLINKS] | :x: | :x: |
| [VRANDMEMBER] | :x: | :x: |
| [VREM] | :x: | :x: |
| [VSETATTR] | :x: | :x: |
| [VSIM] | :x: | :x: |
| [waitaof] | :x: | :x: |
| [xackdel] | :x: | :x: |
## Commands that won't be implemented
> This is just the current status, and may change in the future. If you have ideas on how to implement any of them feel free to tell us about it.
| redis | why it doesn't make sense to emulate |
| :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [debug] | This command is intended to aid in debugging redis |
| [dump] | Doesn't make sense to implement the internal data format used by RDB |
| [hello] | The protocols this command is switching between (RESP2, RESP3, Redis 6) aren't in use |
| [latency] | ioredis-mock isn't operating over the network so there is no latency to monitor |
| [memory] | It's unlikely this can be emulated in a JS environment |
| [migrate] | This command actually executes a DUMP + DEL on the source instance, and a RESTORE in the target. Since DUMP and RESTORE won't be implemented it includes MIGRATE. |
| [module] | It's unlikely that we'll be able to run Redis Modules in a JS VM |
| [pfdebug] | This command is intended to aid in debugging redis |
| [restore] | The RDB specific format used for restores would be a massive undertaking to implement with very little gain. |
| [slowlog] | Useful when you're on redis, not so much when on ioredis-mock |
[1]: https://github.com/luin/ioredis#handle-binary-data
[acl]: http://redis.io/commands/ACL
[append]: http://redis.io/commands/APPEND
[asking]: http://redis.io/commands/ASKING
[auth]: http://redis.io/commands/AUTH
[bgrewriteaof]: http://redis.io/commands/BGREWRITEAOF
[bgsave]: http://redis.io/commands/BGSAVE
[bitcount]: http://redis.io/commands/BITCOUNT
[bitfield]: http://redis.io/commands/BITFIELD
[bitfield_ro]: http://redis.io/commands/BITFIELD_RO
[bitop]: http://redis.io/commands/BITOP
[bitpos]: http://redis.io/commands/BITPOS
[blmove]: http://redis.io/commands/BLMOVE
[blmpop]: http://redis.io/commands/BLMPOP
[blpop]: http://redis.io/commands/BLPOP
[brpop]: http://redis.io/commands/BRPOP
[brpoplpush]: http://redis.io/commands/BRPOPLPUSH
[bzmpop]: http://redis.io/commands/BZMPOP
[bzpopmax]: http://redis.io/commands/BZPOPMAX
[bzpopmin]: http://redis.io/commands/BZPOPMIN
[client]: http://redis.io/commands/CLIENT
[cluster]: http://redis.io/commands/CLUSTER
[command]: http://redis.io/commands/COMMAND
[config]: http://redis.io/commands/CONFIG
[copy]: http://redis.io/commands/COPY
[dbsize]: http://redis.io/commands/DBSIZE
[decr]: http://redis.io/commands/DECR
[decrby]: http://redis.io/commands/DECRBY
[del]: http://redis.io/commands/DEL
[discard]: http://redis.io/commands/DISCARD
[echo]: http://redis.io/commands/ECHO
[eval]: http://redis.io/commands/EVAL
[eval_ro]: http://redis.io/commands/EVAL_RO
[evalsha]: http://redis.io/commands/EVALSHA
[evalsha_ro]: http://redis.io/commands/EVALSHA_RO
[exists]: http://redis.io/commands/EXISTS
[expire]: http://redis.io/commands/EXPIRE
[expireat]: http://redis.io/commands/EXPIREAT
[expiretime]: http://redis.io/commands/EXPIRETIME
[failover]: http://redis.io/commands/FAILOVER
[fcall]: http://redis.io/commands/FCALL
[fcall_ro]: http://redis.io/commands/FCALL_RO
[flushall]: http://redis.io/commands/FLUSHALL
[flushdb]: http://redis.io/commands/FLUSHDB
[function]: http://redis.io/commands/FUNCTION
[geoadd]: http://redis.io/commands/GEOADD
[geodist]: http://redis.io/commands/GEODIST
[geohash]: http://redis.io/commands/GEOHASH
[geopos]: http://redis.io/commands/GEOPOS
[georadius]: http://redis.io/commands/GEORADIUS
[georadius_ro]: http://redis.io/commands/GEORADIUS_RO
[georadiusbymember]: http://redis.io/commands/GEORADIUSBYMEMBER
[georadiusbymember_ro]: http://redis.io/commands/GEORADIUSBYMEMBER_RO
[geosearch]: http://redis.io/commands/GEOSEARCH
[geosearchstore]: http://redis.io/commands/GEOSEARCHSTORE
[get]: http://redis.io/commands/GET
[getbit]: http://redis.io/commands/GETBIT
[getdel]: http://redis.io/commands/GETDEL
[getex]: http://redis.io/commands/GETEX
[getrange]: http://redis.io/commands/GETRANGE
[getset]: http://redis.io/commands/GETSET
[hdel]: http://redis.io/commands/HDEL
[hexists]: http://redis.io/commands/HEXISTS
[hexpire]: http://redis.io/commands/HEXPIRE
[hget]: http://redis.io/commands/HGET
[hgetall]: http://redis.io/commands/HGETALL
[hincrby]: http://redis.io/commands/HINCRBY
[hincrbyfloat]: http://redis.io/commands/HINCRBYFLOAT
[hkeys]: http://redis.io/commands/HKEYS
[hlen]: http://redis.io/commands/HLEN
[hmget]: http://redis.io/commands/HMGET
[hmset]: http://redis.io/commands/HMSET
[hpexpire]: http://redis.io/commands/HPEXPIRE
[hrandfield]: http://redis.io/commands/HRANDFIELD
[hscan]: http://redis.io/commands/HSCAN
[hset]: http://redis.io/commands/HSET
[hsetnx]: http://redis.io/commands/HSETNX
[hstrlen]: http://redis.io/commands/HSTRLEN
[hvals]: http://redis.io/commands/HVALS
[incr]: http://redis.io/commands/INCR
[incrby]: http://redis.io/commands/INCRBY
[incrbyfloat]: http://redis.io/commands/INCRBYFLOAT
[info]: http://redis.io/commands/INFO
[keys]: http://redis.io/commands/KEYS
[lastsave]: http://redis.io/commands/LASTSAVE
[lcs]: http://redis.io/commands/LCS
[lindex]: http://redis.io/commands/LINDEX
[linsert]: http://redis.io/commands/LINSERT
[llen]: http://redis.io/commands/LLEN
[lmove]: http://redis.io/commands/LMOVE
[lmpop]: http://redis.io/commands/LMPOP
[lolwut]: http://redis.io/commands/LOLWUT
[lpop]: http://redis.io/commands/LPOP
[lpos]: http://redis.io/commands/LPOS
[lpush]: http://redis.io/commands/LPUSH
[lpushx]: http://redis.io/commands/LPUSHX
[lrange]: http://redis.io/commands/LRANGE
[lrem]: http://redis.io/commands/LREM
[lset]: http://redis.io/commands/LSET
[ltrim]: http://redis.io/commands/LTRIM
[mget]: http://redis.io/commands/MGET
[monitor]: http://redis.io/commands/MONITOR
[move]: http://redis.io/commands/MOVE
[mset]: http://redis.io/commands/MSET
[msetnx]: http://redis.io/commands/MSETNX
[object]: http://redis.io/commands/OBJECT
[persist]: http://redis.io/commands/PERSIST
[pexpire]: http://redis.io/commands/PEXPIRE
[pexpireat]: http://redis.io/commands/PEXPIREAT
[pexpiretime]: http://redis.io/commands/PEXPIRETIME
[pfadd]: http://redis.io/commands/PFADD
[pfcount]: http://redis.io/commands/PFCOUNT
[pfmerge]: http://redis.io/commands/PFMERGE
[ping]: http://redis.io/commands/PING
[psetex]: http://redis.io/commands/PSETEX
[psubscribe]: http://redis.io/commands/PSUBSCRIBE
[psync]: http://redis.io/commands/PSYNC
[pttl]: http://redis.io/commands/PTTL
[publish]: http://redis.io/commands/PUBLISH
[pubsub]: http://redis.io/commands/PUBSUB
[punsubscribe]: http://redis.io/commands/PUNSUBSCRIBE
[quit]: http://redis.io/commands/QUIT
[randomkey]: http://redis.io/commands/RANDOMKEY
[readonly]: http://redis.io/commands/READONLY
[readwrite]: http://redis.io/commands/READWRITE
[rename]: http://redis.io/commands/RENAME
[renamenx]: http://redis.io/commands/RENAMENX
[replconf]: http://redis.io/commands/REPLCONF
[replicaof]: http://redis.io/commands/REPLICAOF
[reset]: http://redis.io/commands/RESET
[role]: http://redis.io/commands/ROLE
[rpop]: http://redis.io/commands/RPOP
[rpoplpush]: http://redis.io/commands/RPOPLPUSH
[rpush]: http://redis.io/commands/RPUSH
[rpushx]: http://redis.io/commands/RPUSHX
[sadd]: http://redis.io/commands/SADD
[save]: http://redis.io/commands/SAVE
[scan]: http://redis.io/commands/SCAN
[scard]: http://redis.io/commands/SCARD
[script]: http://redis.io/commands/SCRIPT
[sdiff]: http://redis.io/commands/SDIFF
[sdiffstore]: http://redis.io/commands/SDIFFSTORE
[select]: http://redis.io/commands/SELECT
[set]: http://redis.io/commands/SET
[setbit]: http://redis.io/commands/SETBIT
[setex]: http://redis.io/commands/SETEX
[setnx]: http://redis.io/commands/SETNX
[setrange]: http://redis.io/commands/SETRANGE
[shutdown]: http://redis.io/commands/SHUTDOWN
[sinter]: http://redis.io/commands/SINTER
[sintercard]: http://redis.io/commands/SINTERCARD
[sinterstore]: http://redis.io/commands/SINTERSTORE
[sismember]: http://redis.io/commands/SISMEMBER
[slaveof]: http://redis.io/commands/SLAVEOF
[smembers]: http://redis.io/commands/SMEMBERS
[smismember]: http://redis.io/commands/SMISMEMBER
[smove]: http://redis.io/commands/SMOVE
[sort]: http://redis.io/commands/SORT
[sort_ro]: http://redis.io/commands/SORT_RO
[spop]: http://redis.io/commands/SPOP
[spublish]: http://redis.io/commands/SPUBLISH
[srandmember]: http://redis.io/commands/SRANDMEMBER
[srem]: http://redis.io/commands/SREM
[sscan]: http://redis.io/commands/SSCAN
[ssubscribe]: http://redis.io/commands/SSUBSCRIBE
[strlen]: http://redis.io/commands/STRLEN
[subscribe]: http://redis.io/commands/SUBSCRIBE
[substr]: http://redis.io/commands/SUBSTR
[sunion]: http://redis.io/commands/SUNION
[sunionstore]: http://redis.io/commands/SUNIONSTORE
[sunsubscribe]: http://redis.io/commands/SUNSUBSCRIBE
[swapdb]: http://redis.io/commands/SWAPDB
[sync]: http://redis.io/commands/SYNC
[time]: http://redis.io/commands/TIME
[touch]: http://redis.io/commands/TOUCH
[ttl]: http://redis.io/commands/TTL
[type]: http://redis.io/commands/TYPE
[unlink]: http://redis.io/commands/UNLINK
[unsubscribe]: http://redis.io/commands/UNSUBSCRIBE
[unwatch]: http://redis.io/commands/UNWATCH
[wait]: http://redis.io/commands/WAIT
[watch]: http://redis.io/commands/WATCH
[xack]: http://redis.io/commands/XACK
[xadd]: http://redis.io/commands/XADD
[xautoclaim]: http://redis.io/commands/XAUTOCLAIM
[xclaim]: http://redis.io/commands/XCLAIM
[xdel]: http://redis.io/commands/XDEL
[xdelex]: http://redis.io/commands/XDELEX
[xgroup]: http://redis.io/commands/XGROUP
[xinfo]: http://redis.io/commands/XINFO
[xlen]: http://redis.io/commands/XLEN
[xpending]: http://redis.io/commands/XPENDING
[xrange]: http://redis.io/commands/XRANGE
[xread]: http://redis.io/commands/XREAD
[xreadgroup]: http://redis.io/commands/XREADGROUP
[xrevrange]: http://redis.io/commands/XREVRANGE
[xsetid]: http://redis.io/commands/XSETID
[xtrim]: http://redis.io/commands/XTRIM
[zadd]: http://redis.io/commands/ZADD
[zcard]: http://redis.io/commands/ZCARD
[zcount]: http://redis.io/commands/ZCOUNT
[zdiff]: http://redis.io/commands/ZDIFF
[zdiffstore]: http://redis.io/commands/ZDIFFSTORE
[zincrby]: http://redis.io/commands/ZINCRBY
[zinter]: http://redis.io/commands/ZINTER
[zintercard]: http://redis.io/commands/ZINTERCARD
[zinterstore]: http://redis.io/commands/ZINTERSTORE
[zlexcount]: http://redis.io/commands/ZLEXCOUNT
[zmpop]: http://redis.io/commands/ZMPOP
[zmscore]: http://redis.io/commands/ZMSCORE
[zpopmax]: http://redis.io/commands/ZPOPMAX
[zpopmin]: http://redis.io/commands/ZPOPMIN
[zrandmember]: http://redis.io/commands/ZRANDMEMBER
[zrange]: http://redis.io/commands/ZRANGE
[zrangebylex]: http://redis.io/commands/ZRANGEBYLEX
[zrangebyscore]: http://redis.io/commands/ZRANGEBYSCORE
[zrangestore]: http://redis.io/commands/ZRANGESTORE
[zrank]: http://redis.io/commands/ZRANK
[zrem]: http://redis.io/commands/ZREM
[zremrangebylex]: http://redis.io/commands/ZREMRANGEBYLEX
[zremrangebyrank]: http://redis.io/commands/ZREMRANGEBYRANK
[zremrangebyscore]: http://redis.io/commands/ZREMRANGEBYSCORE
[zrevrange]: http://redis.io/commands/ZREVRANGE
[zrevrangebylex]: http://redis.io/commands/ZREVRANGEBYLEX
[zrevrangebyscore]: http://redis.io/commands/ZREVRANGEBYSCORE
[zrevrank]: http://redis.io/commands/ZREVRANK
[zscan]: http://redis.io/commands/ZSCAN
[zscore]: http://redis.io/commands/ZSCORE
[zunion]: http://redis.io/commands/ZUNION
[zunionstore]: http://redis.io/commands/ZUNIONSTORE
[_FT.CONFIG]: http://redis.io/commands/_FT.CONFIG
[_FT.DEBUG]: http://redis.io/commands/_FT.DEBUG
[_FT.SAFEADD]: http://redis.io/commands/_FT.SAFEADD
[bf.add]: http://redis.io/commands/BF.ADD
[bf.card]: http://redis.io/commands/BF.CARD
[bf.debug]: http://redis.io/commands/BF.DEBUG
[bf.exists]: http://redis.io/commands/BF.EXISTS
[bf.info]: http://redis.io/commands/BF.INFO
[bf.insert]: http://redis.io/commands/BF.INSERT
[bf.loadchunk]: http://redis.io/commands/BF.LOADCHUNK
[bf.madd]: http://redis.io/commands/BF.MADD
[bf.mexists]: http://redis.io/commands/BF.MEXISTS
[bf.reserve]: http://redis.io/commands/BF.RESERVE
[bf.scandump]: http://redis.io/commands/BF.SCANDUMP
[cf.add]: http://redis.io/commands/CF.ADD
[cf.addnx]: http://redis.io/commands/CF.ADDNX
[cf.compact]: http://redis.io/commands/CF.COMPACT
[cf.count]: http://redis.io/commands/CF.COUNT
[cf.debug]: http://redis.io/commands/CF.DEBUG
[cf.del]: http://redis.io/commands/CF.DEL
[cf.exists]: http://redis.io/commands/CF.EXISTS
[cf.info]: http://redis.io/commands/CF.INFO
[cf.insert]: http://redis.io/commands/CF.INSERT
[cf.insertnx]: http://redis.io/commands/CF.INSERTNX
[cf.loadchunk]: http://redis.io/commands/CF.LOADCHUNK
[cf.mexists]: http://redis.io/commands/CF.MEXISTS
[cf.reserve]: http://redis.io/commands/CF.RESERVE
[cf.scandump]: http://redis.io/commands/CF.SCANDUMP
[cms.incrby]: http://redis.io/commands/CMS.INCRBY
[cms.info]: http://redis.io/commands/CMS.INFO
[cms.initbydim]: http://redis.io/commands/CMS.INITBYDIM
[cms.initbyprob]: http://redis.io/commands/CMS.INITBYPROB
[cms.merge]: http://redis.io/commands/CMS.MERGE
[cms.query]: http://redis.io/commands/CMS.QUERY
[FT._ALIASADDIFNX]: http://redis.io/commands/FT._ALIASADDIFNX
[FT._ALIASDELIFX]: http://redis.io/commands/FT._ALIASDELIFX
[FT._ALTERIFNX]: http://redis.io/commands/FT._ALTERIFNX
[FT._CREATEIFNX]: http://redis.io/commands/FT._CREATEIFNX
[FT._DROPIFX]: http://redis.io/commands/FT._DROPIFX
[FT._DROPINDEXIFX]: http://redis.io/commands/FT._DROPINDEXIFX
[FT._LIST]: http://redis.io/commands/FT._LIST
[FT.ADD]: http://redis.io/commands/FT.ADD
[FT.AGGREGATE]: http://redis.io/commands/FT.AGGREGATE
[FT.ALIASADD]: http://redis.io/commands/FT.ALIASADD
[FT.ALIASDEL]: http://redis.io/commands/FT.ALIASDEL
[FT.ALIASUPDATE]: http://redis.io/commands/FT.ALIASUPDATE
[FT.ALTER]: http://redis.io/commands/FT.ALTER
[FT.CONFIG]: http://redis.io/commands/FT.CONFIG
[FT.CREATE]: http://redis.io/commands/FT.CREATE
[FT.CURSOR]: http://redis.io/commands/FT.CURSOR
[FT.DEL]: http://redis.io/commands/FT.DEL
[FT.DICTADD]: http://redis.io/commands/FT.DICTADD
[FT.DICTDEL]: http://redis.io/commands/FT.DICTDEL
[FT.DICTDUMP]: http://redis.io/commands/FT.DICTDUMP
[FT.DROP]: http://redis.io/commands/FT.DROP
[FT.DROPINDEX]: http://redis.io/commands/FT.DROPINDEX
[FT.EXPLAIN]: http://redis.io/commands/FT.EXPLAIN
[FT.EXPLAINCLI]: http://redis.io/commands/FT.EXPLAINCLI
[FT.GET]: http://redis.io/commands/FT.GET
[FT.INFO]: http://redis.io/commands/FT.INFO
[FT.MGET]: http://redis.io/commands/FT.MGET
[FT.PROFILE]: http://redis.io/commands/FT.PROFILE
[FT.SEARCH]: http://redis.io/commands/FT.SEARCH
[FT.SPELLCHECK]: http://redis.io/commands/FT.SPELLCHECK
[FT.SUGADD]: http://redis.io/commands/FT.SUGADD
[FT.SUGDEL]: http://redis.io/commands/FT.SUGDEL
[FT.SUGGET]: http://redis.io/commands/FT.SUGGET
[FT.SUGLEN]: http://redis.io/commands/FT.SUGLEN
[FT.SYNADD]: http://redis.io/commands/FT.SYNADD
[FT.SYNDUMP]: http://redis.io/commands/FT.SYNDUMP
[FT.SYNUPDATE]: http://redis.io/commands/FT.SYNUPDATE
[FT.TAGVALS]: http://redis.io/commands/FT.TAGVALS
[hexpireat]: http://redis.io/commands/HEXPIREAT
[hexpiretime]: http://redis.io/commands/HEXPIRETIME
[hgetdel]: http://redis.io/commands/HGETDEL
[hgetex]: http://redis.io/commands/HGETEX
[hpersist]: http://redis.io/commands/HPERSIST
[hpexpireat]: http://redis.io/commands/HPEXPIREAT
[hpexpiretime]: http://redis.io/commands/HPEXPIRETIME
[hpttl]: http://redis.io/commands/HPTTL
[hsetex]: http://redis.io/commands/HSETEX
[httl]: http://redis.io/commands/HTTL
[json.arrappend]: http://redis.io/commands/JSON.ARRAPPEND
[json.arrindex]: http://redis.io/commands/JSON.ARRINDEX
[json.arrinsert]: http://redis.io/commands/JSON.ARRINSERT
[json.arrlen]: http://redis.io/commands/JSON.ARRLEN
[json.arrpop]: http://redis.io/commands/JSON.ARRPOP
[json.arrtrim]: http://redis.io/commands/JSON.ARRTRIM
[json.clear]: http://redis.io/commands/JSON.CLEAR
[json.debug]: http://redis.io/commands/JSON.DEBUG
[json.del]: http://redis.io/commands/JSON.DEL
[json.forget]: http://redis.io/commands/JSON.FORGET
[json.get]: http://redis.io/commands/JSON.GET
[json.merge]: http://redis.io/commands/JSON.MERGE
[json.mget]: http://redis.io/commands/JSON.MGET
[json.mset]: http://redis.io/commands/JSON.MSET
[json.numincrby]: http://redis.io/commands/JSON.NUMINCRBY
[json.nummultby]: http://redis.io/commands/JSON.NUMMULTBY
[json.numpowby]: http://redis.io/commands/JSON.NUMPOWBY
[json.objkeys]: http://redis.io/commands/JSON.OBJKEYS
[json.objlen]: http://redis.io/commands/JSON.OBJLEN
[json.resp]: http://redis.io/commands/JSON.RESP
[json.set]: http://redis.io/commands/JSON.SET
[json.strappend]: http://redis.io/commands/JSON.STRAPPEND
[json.strlen]: http://redis.io/commands/JSON.STRLEN
[json.toggle]: http://redis.io/commands/JSON.TOGGLE
[json.type]: http://redis.io/commands/JSON.TYPE
[search.CLUSTERINFO]: http://redis.io/commands/SEARCH.CLUSTERINFO
[search.CLUSTERREFRESH]: http://redis.io/commands/SEARCH.CLUSTERREFRESH
[search.CLUSTERSET]: http://redis.io/commands/SEARCH.CLUSTERSET
[tdigest.add]: http://redis.io/commands/TDIGEST.ADD
[tdigest.byrank]: http://redis.io/commands/TDIGEST.BYRANK
[tdigest.byrevrank]: http://redis.io/commands/TDIGEST.BYREVRANK
[tdigest.cdf]: http://redis.io/commands/TDIGEST.CDF
[tdigest.create]: http://redis.io/commands/TDIGEST.CREATE
[tdigest.info]: http://redis.io/commands/TDIGEST.INFO
[tdigest.max]: http://redis.io/commands/TDIGEST.MAX
[tdigest.merge]: http://redis.io/commands/TDIGEST.MERGE
[tdigest.min]: http://redis.io/commands/TDIGEST.MIN
[tdigest.quantile]: http://redis.io/commands/TDIGEST.QUANTILE
[tdigest.rank]: http://redis.io/commands/TDIGEST.RANK
[tdigest.reset]: http://redis.io/commands/TDIGEST.RESET
[tdigest.revrank]: http://redis.io/commands/TDIGEST.REVRANK
[tdigest.trimmed_mean]: http://redis.io/commands/TDIGEST.TRIMMED_MEAN
[timeseries.CLUSTERSET]: http://redis.io/commands/TIMESERIES.CLUSTERSET
[timeseries.REFRESHCLUSTER]: http://redis.io/commands/TIMESERIES.REFRESHCLUSTER
[topk.add]: http://redis.io/commands/TOPK.ADD
[topk.count]: http://redis.io/commands/TOPK.COUNT
[topk.incrby]: http://redis.io/commands/TOPK.INCRBY
[topk.info]: http://redis.io/commands/TOPK.INFO
[topk.list]: http://redis.io/commands/TOPK.LIST
[topk.query]: http://redis.io/commands/TOPK.QUERY
[topk.reserve]: http://redis.io/commands/TOPK.RESERVE
[ts.add]: http://redis.io/commands/TS.ADD
[ts.alter]: http://redis.io/commands/TS.ALTER
[ts.create]: http://redis.io/commands/TS.CREATE
[ts.createrule]: http://redis.io/commands/TS.CREATERULE
[ts.decrby]: http://redis.io/commands/TS.DECRBY
[ts.del]: http://redis.io/commands/TS.DEL
[ts.deleterule]: http://redis.io/commands/TS.DELETERULE
[ts.get]: http://redis.io/commands/TS.GET
[ts.incrby]: http://redis.io/commands/TS.INCRBY
[ts.info]: http://redis.io/commands/TS.INFO
[ts.madd]: http://redis.io/commands/TS.MADD
[ts.mget]: http://redis.io/commands/TS.MGET
[ts.mrange]: http://redis.io/commands/TS.MRANGE
[ts.mrevrange]: http://redis.io/commands/TS.MREVRANGE
[ts.queryindex]: http://redis.io/commands/TS.QUERYINDEX
[ts.range]: http://redis.io/commands/TS.RANGE
[ts.revrange]: http://redis.io/commands/TS.REVRANGE
[VADD]: http://redis.io/commands/VADD
[VCARD]: http://redis.io/commands/VCARD
[VDIM]: http://redis.io/commands/VDIM
[VEMB]: http://redis.io/commands/VEMB
[VGETATTR]: http://redis.io/commands/VGETATTR
[VINFO]: http://redis.io/commands/VINFO
[VISMEMBER]: http://redis.io/commands/VISMEMBER
[VLINKS]: http://redis.io/commands/VLINKS
[VRANDMEMBER]: http://redis.io/commands/VRANDMEMBER
[VREM]: http://redis.io/commands/VREM
[VSETATTR]: http://redis.io/commands/VSETATTR
[VSIM]: http://redis.io/commands/VSIM
[waitaof]: http://redis.io/commands/WAITAOF
[xackdel]: http://redis.io/commands/XACKDEL
[debug]: htt