Commands
Every command the server accepts, 287 in 21 families, read from docs/compatibility-matrix.json. CI runs scripts/check_compatibility_matrix.py, which fails when this list and the command parser or the compatibility contract disagree, and when a command has no test coverage.
Notes are the limitations recorded for each command in the matrix.
Sorted sets (30) · Strings (26) · Keys (25) · Hashes (24) · JSON (24) · Lists (23) · Streams (21) · Sets (17) · Connection (16) · Keyspace (11) · Scripting (10) · ACL (8) · Bloom filters (8) · Cluster (8) · Geo (8) · Pub/Sub (8) · Bitmaps (7) · Transactions (5) · Introspection (4) · HyperLogLog (3) · Replication (1)
Sorted sets
Section titled “Sorted sets”30 commands.
| Command | Notes |
|---|---|
ZADD |
NX, XX, GT, LT, CH, and INCR. Without CH the reply counts new members. INCR returns the new score or nil. GT and LT still add a missing member. |
ZRANGE |
WITHSCORES, BYSCORE, BYLEX, REV, and LIMIT. BYSCORE and BYLEX accept LIMIT. A negative LIMIT count returns the rest of the range. |
ZREVRANGE |
WITHSCORES is supported. |
ZRANGEBYSCORE |
Supports -inf/+inf, exclusive ( bounds, and LIMIT. A negative LIMIT count returns the rest of the range. |
ZRANGEBYLEX |
Bounds are -, +, [member, and (member. Member order ignores the score. LIMIT is supported. A negative count returns the rest of the range. |
ZREVRANGEBYLEX |
The first bound is the high member and the second is the low member. Same bound and LIMIT rules as ZRANGEBYLEX. |
ZREM |
|
ZINCRBY |
Records the resulting score. |
ZCARD |
|
ZSCORE |
|
ZRANK |
|
ZREVRANK |
|
ZPOPMIN |
Optional count. A flat member, score array; empty array for a missing key or count 0. Recorded as one ZREM of the popped members. |
ZPOPMAX |
Highest scores first. Same reply and record as ZPOPMIN. |
BZPOPMIN |
Shard-local, like BLPOP. Replies key, member, score. ZADD, ZINCRBY, and GEOADD serve the oldest waiting client. At most 1,024 blocked clients per shard. |
BZPOPMAX |
Highest score. Otherwise as BZPOPMIN. |
ZREMRANGEBYRANK |
Negative ranks count from the end. Recorded as one ZREM. |
ZREMRANGEBYSCORE |
-inf/+inf and exclusive ( bounds. Recorded as one ZREM. |
ZREMRANGEBYLEX |
-, +, [member, and (member. Recorded as one ZREM. |
ZSCAN |
Cursor is a position in score order. MATCH and COUNT are supported; a missing key returns cursor 0 and an empty array. |
ZCOUNT |
|
ZLEXCOUNT |
|
ZMSCORE |
|
ZUNIONSTORE |
Inputs may be sorted sets or sets (score 1). Same-slot keys in multi-shard mode. An empty result removes the destination. |
ZINTERSTORE |
Inputs may be sorted sets or sets (score 1). Same-slot keys in multi-shard mode. An empty result removes the destination. |
ZDIFFSTORE |
Same-slot keys in multi-shard mode. An empty result removes the destination. |
ZUNION |
Inputs may be sorted sets or sets (score 1). Same-slot keys in multi-shard mode. WITHSCORES is a flat array in both protocols. |
ZINTER |
Inputs may be sorted sets or sets (score 1). Same-slot keys in multi-shard mode. WITHSCORES is a flat array in both protocols. |
ZDIFF |
Same-slot keys in multi-shard mode. WITHSCORES is a flat array in both protocols. |
ZRANDMEMBER |
Pseudo-random; reads the whole set, O(N). WITHSCORES is a flat array in both protocols. |
Strings
Section titled “Strings”26 commands.
| Command | Notes |
|---|---|
GET |
WRONGTYPE on a non-string key. |
SETV |
Writes a versioned string. The first call with no version creates version 1. A later call must pass the current version and receives the next one. A mismatch returns an error and does not change the value. A plain SET replaces the versioned string. The version is stored only on keys written with SETV, and that write is a WAL record. |
TAKE |
Subtracts a positive count from an integer when the key holds at least that many. Returns the remainder. A missing key or a shortfall returns a null bulk and does not create or change the key. The successful subtraction is the same integer WAL record as INCR. A non-integer is WRONGTYPE. |
DELEX |
Ruvio extension. DELEX key IFEQ value deletes the string only when it equals value and returns 1, otherwise 0. A missing key returns 0; another type is WRONGTYPE. The delete is the ordinary DEL WAL record. |
GETEX |
Returns the string and sets its deadline to now plus the given milliseconds. A missing key returns a null bulk and stores nothing. GET does not move a deadline. The deadline is the existing expire WAL record. A non-string is WRONGTYPE. |
SET |
Supports EX, PX, EXAT, PXAT, KEEPTTL, NX, XX, and GET. GET returns the previous string and refuses a non-string. SET key value IFEQ expected [EX|PX|EXAT|PXAT|KEEPTTL] (Ruvio extension) writes only when the string equals expected and answers nil otherwise; it does not combine with NX, XX or GET. |
MGET |
Nil bulk for a missing or wrong-type key. Same-slot keys in multi-shard mode. |
MSET |
Clears TTL. Same-slot keys in multi-shard mode. |
GETSET |
Clears TTL. WRONGTYPE on a non-string key. |
APPEND |
Keeps an existing TTL. |
STRLEN |
|
INCR |
Signed 64-bit decimal integers. |
DECR |
Signed 64-bit decimal integers. |
INCRBY |
Signed 64-bit decimal integers. INCRBY key n MAX limit returns a null bulk and writes nothing when the result would pass limit. |
DECRBY |
Signed 64-bit decimal integers. |
FILLGET |
Ruvio command. Replies HIT, FILL, BUSY or STALE. Markers are memory only and expire after fill_ms. WAIT wait_ms holds a caller that would get BUSY (retry every 5 ms, like BLMOVE) until the filler writes, the marker lapses (the waiter then becomes the filler) or the wait ends with BUSY; it is refused inside MULTI and scripts. |
FILLSET |
Ruvio command. Needs the live token from FILLGET; SWR keeps the value stale_ms past its fresh period. The soft expiry is not persisted. |
SETEX |
Same as SET with EX. |
PSETEX |
Same as SET with PX. |
SETNX |
Returns 1 or 0. |
GETDEL |
Not a list or other type: WRONGTYPE. |
MSETNX |
All-or-nothing. Same-slot keys in multi-shard mode. |
INCRBYFLOAT |
Computed in double precision and printed with 15 significant digits; Redis uses long double, so results with more digits can differ in the last places (Redis prints 153.10000000000000001 where Ruvio prints 153.1). Keeps the TTL. |
GETRANGE |
A range wholly before the start of the string returns an empty string (Redis 7.0 returns the first byte). |
SUBSTR |
Alias of GETRANGE. |
SETRANGE |
String limited to 16 MiB; each call rewrites the value, O(value size). Keeps the TTL. |
25 commands.
| Command | Notes |
|---|---|
LIMIT |
Fixed window on one key. Returns the remaining allowance after this call, or a null bulk when the window is full. The counter is not incremented on rejection. The window is the key deadline, so an unused window disappears. A plain key does not store a limit. The accepted call is a WAL record. GET of a limit is WRONGTYPE. |
IDEM |
IDEM key BEGIN fingerprint owner ttl_ms atomically reserves a missing key or returns pending, conflict, or completed with the binary result. IDEM key COMPLETE fingerprint owner result publishes only for the matching live owner. Identical completion is acknowledged without rewriting; changed results are refused. Neither retries nor completion renew the original TTL. Tokens are 1-128 bytes, retention is 1 ms-7 days, and result is at most 4 MiB (also subject to protocol limits including the packed metadata). Uses the existing string layout with an internal packed record; do not modify it with string/expiry commands. Each state transition and its deadline is one WAL record. Not exactly-once for external effects. |
ONCE |
First call returns 1 and keeps the key until the TTL. A later call returns 0 and does not refresh the TTL. After the deadline the next call is first again. The marker exists only on keys written with ONCE. The first call is a WAL record. GET of an once key is WRONGTYPE. |
LEASE |
Acquires a shard-owned lease. Returns a new fencing token, or a null bulk when the lease is still held. Expiry and RELEASE keep the token so the next LEASE continues the sequence. DEL starts a new key at token 1. The grant is a WAL record. GET of a lease is WRONGTYPE. Unused keys do not store a lease. |
SEMAPHORE |
SEMAPHORE key max ttl_ms returns a token while fewer than max holders are live, or a null bulk when full. Each holder has its own TTL. RELEASE key token frees one slot. The key stores 16 bytes per live holder and goes away with the last one. Grant and release are WAL records. GET of a semaphore is WRONGTYPE. |
RELEASE |
Releases a lease when the token matches the current holder. Returns 1 or 0. A mismatch leaves the holder in place. The key keeps the token so the next LEASE continues the sequence. The release is a WAL record. |
CHANGES |
CHANGES START arms an in-memory feed on this shard and returns the cursor. CHANGES cursor reads notes after that cursor, at most 1024. Nothing is recorded before START. The feed is not a second copy of the WAL and is empty after restart. |
DEL |
Same-slot keys in multi-shard mode. |
UNLINK |
Synchronous, identical to DEL. |
EXISTS |
Same-slot keys in multi-shard mode. |
TYPE |
|
RENAME |
Same-slot keys in multi-shard mode. |
SCAN |
Shard-local. Cursors walk sorted live keys, not Redis dict cursors. |
DBSIZE |
Shard-local. Counts keys in the selected logical database. |
FLUSHDB |
Clears the selected database on every shard. ASYNC runs synchronously. One WAL record. Allowed inside MULTI; refused in scripts. |
FLUSHALL |
Clears every database. ASYNC runs synchronously. One WAL record. Allowed inside MULTI; refused in scripts. |
SWAPDB |
O(1) map exchange, one WAL record. Allowed inside MULTI; refused in cluster mode and in scripts. Does not wake clients blocked on keys that now exist. |
MOVE |
One WAL record. Refused in cluster mode and in scripts. Returns 0 when the key is missing or the target already has it. |
EXPIRE |
A relative expire of zero or less deletes the key and returns 1, as Redis does. |
PEXPIRE |
A relative expire of zero or less deletes the key and returns 1, as Redis does. |
EXPIREAT |
A deadline in the past leaves the key absent and still replies OK. |
PEXPIREAT |
A deadline in the past leaves the key absent and still replies OK. |
TTL |
|
PTTL |
|
PERSIST |
Hashes
Section titled “Hashes”24 commands.
| Command | Notes |
|---|---|
HSET |
Compact pairs until 64 fields or a 64-byte field/value. |
HGET |
|
HDEL |
|
HLEN |
|
HGETALL |
Enumeration order is unspecified, as in Redis. |
HMGET |
|
HEXISTS |
|
HKEYS |
Enumeration order is unspecified, as in Redis. |
HVALS |
Enumeration order is unspecified, as in Redis. |
HINCRBY |
Stores the decimal result. Non-integers and overflow are rejected without a write. |
HSETNX |
Returns 1 and records one field when the field is missing. Returns 0 with no write when the field exists. |
HSTRLEN |
Returns the field length, or 0 when the key or field is missing. |
HSCAN |
Cursor pages follow storage order. MATCH and COUNT are supported. A missing key returns cursor 0 and an empty array. |
HEXPIRE |
NX, XX, GT, and LT. Replies per field: -2 missing, 0 condition not met, 1 set, 2 deleted by a zero or past time. Absolute deadline up to 2^46-1 ms. HSET and HDEL drop a field TTL; HINCRBY keeps it. |
HPEXPIRE |
Milliseconds. Same replies and conditions as HEXPIRE. |
HEXPIREAT |
Unix seconds. A past time deletes the field (reply 2). |
HPEXPIREAT |
Unix milliseconds. A past time deletes the field (reply 2). |
HTTL |
Seconds, rounded up. -1 for a field without a TTL. Missing field or key is -2. A hash with no field TTL pays nothing; the first TTL moves it to a timed form, the last HPERSIST moves it back. |
HPTTL |
Milliseconds. -1 for a field without a TTL. Missing field or key is -2. A hash with no field TTL pays nothing; the first TTL moves it to a timed form, the last HPERSIST moves it back. |
HEXPIRETIME |
Unix seconds, rounded up. -1 for a field without a TTL. |
HPEXPIRETIME |
Unix milliseconds. -1 for a field without a TTL. |
HPERSIST |
1 removed a TTL, -1 had none, -2 missing. |
HRANDFIELD |
Pseudo-random; reads the whole hash, O(N). WITHVALUES is a flat array in both protocols. |
HINCRBYFLOAT |
Computed in double precision and printed with 15 significant digits (Redis uses long double). Keeps a field TTL. |
24 commands.
| Command | Notes |
|---|---|
JSON.GET |
Optional path defaults to $. Supports only simple .field and [N] paths; not full RedisJSON. |
JSON.INDEX |
Ruvio extension (no RedisJSON/RediSearch equivalent): JSON.INDEX CREATE name PREFIX p PATH $.field [TYPE string|number|bool] | DROP name | LIST. Exact equality on one field only; database 0 only. Definitions are stored as reserved keys (visible to KEYS/DBSIZE) and dropped by FLUSHDB 0 / FLUSHALL; postings are rebuilt incrementally at startup. |
JSON.FIND |
Ruvio extension: JSON.FIND name VALUE v [COUNT n<=1000] [AFTER key] returns matching keys in ascending order; ERR index is building until the first build finishes. Runs on every shard and is merged. |
JSON.MGET |
One path for every key, as MGET: all keys must share a slot. A missing key or a key of another type gives null. |
JSON.SET |
Whole-document updates; only existing intermediate nodes; maximum resulting document 16 MiB. NX / XX as a fourth argument write only when the path is missing / present, and answer null otherwise. |
JSON.DEL |
Optional path defaults to $; returns 1 for a removed field, element, or root. |
JSON.MERGE |
RFC 7396 merge patch at a simple path; not RFC 6902 JSON Patch. |
JSON.TYPE |
Returns object, array, string, integer, number, boolean or null for the value at a simple path; null reply when the key or path is absent. |
JSON.STRLEN |
Byte length of a string value; WRONGTYPE for other values. Simple paths only. |
JSON.ARRLEN |
Element count of an array value; WRONGTYPE for other values. Simple paths only. |
JSON.OBJKEYS |
Object member names in document order; WRONGTYPE for other values. Simple paths only. |
JSON.NUMINCRBY |
Adds a number to a number value and returns the new value as a bulk string. Integer arithmetic when both are integers that do not overflow, otherwise a finite double. Logged as a path write of the computed value. |
JSON.TOGGLE |
Flips a boolean value and returns 1 for true, 0 for false. Logged as a path write. |
JSON.ARRAPPEND |
Appends one or more JSON values to an array and returns the new length. Logged as a path write of the whole array. |
JSON.CLEAR |
Empties an array or object, sets a number to 0, and returns how many values changed (0 when already empty or not clearable). |
JSON.OBJLEN |
Number of members of the object at the path; null when the key or path is missing. |
JSON.STRAPPEND |
JSON.STRAPPEND key path json-string. The path is required. Returns the new string length in bytes. |
JSON.NUMMULTBY |
JSON.NUMMULTBY key path number. The path is required. Integers stay integers unless the product overflows. A non-finite result is refused. |
JSON.ARRINSERT |
JSON.ARRINSERT key path index value.... A negative index counts from the end; an index outside 0..=length is an error. The path is required. Logged as a path write of the whole array. |
JSON.ARRPOP |
JSON.ARRPOP key [path [index]]. Default index -1; an index outside the array is clamped; an empty array answers null. Logged as a path write of the whole array. |
JSON.ARRTRIM |
JSON.ARRTRIM key path start stop, inclusive, negative from the end; a reversed or past-the-end range empties the array. Returns the new length. |
JSON.ARRINDEX |
JSON.ARRINDEX key path scalar [start [stop]]. Scalars only; a stop of 0 means the end; 1 and 1.0 are different values. Returns -1 when absent. |
JSON.FORGET |
Alias of JSON.DEL. |
JMERGE |
Alias of JSON.MERGE. |
23 commands.
| Command | Notes |
|---|---|
LPUSH |
|
LPUSHCAP |
Ruvio extension. LPUSHCAP key cap value... pushes like LPUSH, then drops items from the tail until at most cap remain, and returns the new length. A list already over cap takes one trim record; otherwise each dropped item is a pop record. |
RPUSHCAP |
Ruvio extension. RPUSHCAP key cap value... pushes like RPUSH, then drops items from the head until at most cap remain, and returns the new length. |
RPUSH |
|
LPOP |
Optional positive COUNT returns an array. An empty list returns nil. Each popped element is its own list-pop record. |
RPOP |
Optional positive COUNT returns an array. An empty list returns nil. Each popped element is its own list-pop record. |
LLEN |
|
LINDEX |
|
LRANGE |
|
LTRIM |
|
BLPOP |
Shard-local. At most 1,024 blocked clients per shard. |
BRPOP |
Shard-local. At most 1,024 blocked clients per shard. |
LINSERT |
Rewrites the list (O(N)); the WAL records the whole list as one atomic transaction. |
LSET |
Rewrites the list (O(N)); the WAL records the whole list as one atomic transaction. |
LREM |
Rewrites the list (O(N)); the WAL records the whole list as one atomic transaction. |
LPOS |
Read-only, O(N). |
LMOVE |
Atomic: the move is one WAL transaction. |
RPOPLPUSH |
ACL category and name follow LMOVE (+lmove allows it). |
BLMOVE |
Retries every 5 ms instead of parking a waiter; not allowed in MULTI or scripts. Counts against the 1,024 blocked-client limit. |
LPUSHX |
|
RPUSHX |
|
LMPOP |
|
BLMPOP |
Retries every 5 ms instead of parking a waiter; not allowed in MULTI or scripts. Counts against the 1,024 blocked-client limit. |
Streams
Section titled “Streams”21 commands.
| Command | Notes |
|---|---|
XADD |
Auto id is * or ms-*. Explicit ids are ms-seq. DELAY holds the new entry from XREADGROUP until that many milliseconds pass. The hold is a WAL record and a snapshot trailer, written only when a delay is set. A millisecond behind the top id is rejected. MAXLEN and MINID, including ~ and =, both trim exactly. They cannot be combined. NOMKSTREAM returns a null bulk and does not create a missing key. The assigned id is the WAL record. The approximate trim option LIMIT is not accepted. |
XLEN |
Returns 0 for a missing key. |
XRANGE |
start and end are -, +, or ms-seq. COUNT limits the reply. No exclusive bounds. |
XREVRANGE |
end then start, like Redis. COUNT keeps the newest matches. No exclusive bounds. |
XREAD |
COUNT and STREAMS. Id is exclusive; 0 means 0-0 and $ means the current end. BLOCK waits on this shard and does not remove entries. BLOCK 0 waits until an entry or shutdown. This command does not read a consumer group. |
XDEL |
Many ids. A repeated id counts once. The stream key and its last id remain after the last entry is deleted. |
XSETID |
Sets the last generated id without adding an entry. The id must be greater than or equal to the current top id. A missing key is an error. ENTRIESADDED and MAXDELETEDID are not accepted. |
XTRIM |
MAXLEN and MINID, including ~ and =, both trim exactly. MINID drops entries below the id and keeps that id. The approximate trim option LIMIT is not accepted. |
XGROUP CREATE |
Creates one group at $, 0, or an explicit id. MKSTREAM creates an empty stream when the key is missing. |
XGROUP CREATECONSUMER |
Registers a consumer before it has a pending entry. Returns 1 when the name is new and 0 when that group already has it. The name stays after its pending entries are acknowledged. |
XREADGROUP |
One stream and the > id only. COUNT limits the new entries. BLOCK waits on this shard until a later XADD and delivers that id to the oldest waiting consumer of the group. BLOCK 0 waits until an entry or shutdown. NOACK advances the group id and does not add a pending entry. |
XGROUP DESTROY |
Returns 1 when the group is removed and 0 when it is already gone. A blocked XREADGROUP on that group receives NOGROUP. |
XGROUP SETID |
Moves the group id to $, 0, or an explicit id. Pending entries stay as they are. |
XGROUP DELCONSUMER |
Returns how many pending entries that consumer held. A missing consumer returns 0. A missing group is NOGROUP. |
XACK |
Many ids. A repeated id counts once. Removes the id from that group’s pending list and leaves the stream entry stored. |
XPENDING |
No arguments after the group returns the summary: count, smallest id, greatest id, and consumers sorted by name. An empty group returns 0, two nils, and an empty array. The extended form is optional IDLE, an inclusive start, an inclusive end, a count, and an optional consumer. Each row is the id, consumer, idle milliseconds, and delivery count. |
XAUTOCLAIM |
Scans pending ids after the start id. Claims those idle for at least min-idle milliseconds, up to COUNT, which defaults to the rest of the list. JUSTID returns ids. The reply is the next start id, the claimed entries, and ids dropped because the stream entry is gone. The next start id is 0-0 when the scan finishes. |
XCLAIM |
Claims pending ids idle for at least min-idle milliseconds. IDLE, TIME, RETRYCOUNT, FORCE, JUSTID, and LASTID are accepted. IDLE and TIME cannot be combined. FORCE claims an id that is in the stream but not pending and does not move the group cursor. LASTID sets that cursor. A repeated id is claimed once. An id deleted from the stream is dropped from the pending list and is not returned. JUSTID returns only the claimed ids. |
XINFO STREAM |
Reports length, last-generated-id, groups, and the first and last entries. Does not report a radix tree or entries-added. A missing key is an error. |
XINFO GROUPS |
Reports name, consumers, pending, last-delivered-id, and lag. Consumers are the distinct names on the pending list. |
XINFO CONSUMERS |
Lists pending consumers with pending count and idle time since the latest delivery. A consumer with an empty pending list is not stored. |
17 commands.
| Command | Notes |
|---|---|
SADD |
|
SREM |
|
SISMEMBER |
|
SCARD |
|
SMEMBERS |
Replies are sorted. |
SINTER |
Replies are sorted. Same-slot keys in multi-shard mode. |
SUNION |
Replies are sorted. Same-slot keys in multi-shard mode. |
SDIFF |
Replies are sorted. Same-slot keys in multi-shard mode. |
SINTERSTORE |
Same-slot keys in multi-shard mode. |
SUNIONSTORE |
Same-slot keys in multi-shard mode. |
SDIFFSTORE |
Same-slot keys in multi-shard mode. |
SMOVE |
Same-slot keys in multi-shard mode. |
SPOP |
One member without a count, or an array with a count. The removed members are recorded so recovery does not draw again. |
SRANDMEMBER |
Does not remove members. No count returns one bulk or nil. A positive count returns distinct members up to the set size. A negative count may repeat. Count 0 is an empty array. |
SSCAN |
Cursor is a position in member order. MATCH and COUNT are supported; a missing key returns cursor 0 and an empty array. |
SMISMEMBER |
|
SINTERCARD |
Same-slot keys in multi-shard mode. |
Connection
Section titled “Connection”16 commands.
| Command | Notes |
|---|---|
RUVIO |
No arguments replies PONG is taken. OWNER names the shard rule. Any other argument is an error. |
PING |
|
HELLO |
HELLO and HELLO 2 or 3. AUTH username password and SETNAME are accepted after the version. An unknown version returns NOPROTO and changes nothing. Attributes are not produced. |
AUTH |
Default user or configured ACL users. AUTH username password is supported. |
SELECT |
Indexes 0 through databases - 1 (16 by default, at most 256). Cluster mode allows only 0. Each database is its own map in the shard; WAL records carry the database. Routing hashes the user key. Not scriptable. |
CLIENT GETNAME |
Empty when the connection has no name. |
CLIENT SETNAME |
An empty name clears it. The name is not durable. |
CLIENT TRACKING |
ON or OFF only, and ON requires RESP3. Records GET and MGET on this shard, including misses. A completed write pushes one invalidate and forgets the key. No REDIRECT, BCAST, PREFIX, OPTIN, OPTOUT, or NOLOOP. Not cross-shard. A blocked BLPOP that pops later is not invalidated. A full push queue disconnects that connection. |
COMMAND |
COMMAND, COMMAND COUNT, COMMAND INFO [name …] and COMMAND DOCS [name …] read the command table. INFO entries use the Redis 7 shape with empty tips, key specs and subcommands; DOCS entries are empty maps. Key positions and arity of Ruvio-native commands are informational. |
ECHO |
|
CLIENT ID |
Connection ids are per shard; with several shards two connections can share an id. Inside MULTI it answers at once instead of queueing. |
CLIENT LIST |
Each shard knows only its own connections; with several shards the reply covers the shard that got the command, and ids repeat across shards. Reports id, addr, laddr, name, age, db, multi, resp and user; idle is always 0 and the buffer and memory fields are left out. TYPE is validated but not used as a filter. |
CLIENT INFO |
The calling connection’s CLIENT LIST line. Each shard knows only its own connections; with several shards the reply covers the shard that got the command, and ids repeat across shards. |
CLIENT KILL |
ID, ADDR, SKIPME and the legacy addr form; USER, LADDR and TYPE filters are refused. Each shard knows only its own connections; with several shards the reply covers the shard that got the command, and ids repeat across shards. |
SLOWLOG |
GET, LEN, RESET. Only commands that take the generic dispatcher are timed (not GET, SET, INCR, PING on the fast path) and blocking commands are skipped. An entry holds the command name and its first key (128 bytes), not every argument. Per shard; set slowlog_threshold_micros and slowlog_max_len in the config file or environment, not with CONFIG SET. |
LATENCY |
LATEST only, and it is always empty: Ruvio records no latency-spike events. Use INFO latencystats. |
Keyspace
Section titled “Keyspace”11 commands.
| Command | Notes |
|---|---|
KEYS |
Walks the database in one call, so it refuses databases above 100,000 keys per shard (use SCAN). Glob supports *, ?, [abc], [^a-z] and \\ escapes. With several shards the arrays are joined. |
RANDOMKEY |
Starts at a pseudo-random slot of the key index, so it is not uniform. With several shards it picks a random non-nil answer. |
TOUCH |
Counts existing keys; does not update the access time used by eviction. Keys must share a shard, like EXISTS. |
RENAMENX |
|
EXPIRETIME |
|
PEXPIRETIME |
|
COPY |
Strings, lists, sets, hashes and sorted sets, with their TTL. The DB option, streams, JSON, bloom filters and hashes with field TTLs are refused. Copies the whole value (O(N)) as one atomic WAL transaction. |
OBJECT |
ENCODING, IDLETIME and FREQ only. ENCODING names what Redis 7.0 would report (int, embstr, raw, quicklist, intset, hashtable, listpack, skiplist, stream), not the physical layout. IDLETIME needs an LRU maxmemory-policy and FREQ needs allkeys-lfu; otherwise they return an error (Redis tracks idle time under every policy). An unknown subcommand gets a generic error without the subcommand name. |
MEMORY |
USAGE key [SAMPLES n] only; the size is exact and counts the key, value and collection storage the memory budget charges, plus the fixed entry overhead. It is not comparable byte for byte with Redis. |
DUMP |
Ruvio’s own payload (RVD1 plus a checksummed WAL record), not Redis RDB: only Ruvio’s RESTORE reads it. Strings, lists, sets, hashes and sorted sets; streams, JSON, bloom filters and hashes with field TTLs are refused. The TTL is not part of the payload. |
RESTORE |
Reads only Ruvio’s DUMP payload. REPLACE and ABSTTL work; IDLETIME and FREQ are accepted and ignored. A past ABSTTL deadline creates nothing. One atomic WAL transaction. |
Scripting
Section titled “Scripting”10 commands.
| Command | Notes |
|---|---|
EVAL |
Lua 5.1 sandbox. Declared keys must be same-slot; a script with no keys runs on the connection’s shard. Writes are one WAL batch. |
EVALSHA |
Cache is per shard and memory-only. Restart is NOSCRIPT. Same key rules as EVAL. |
SCRIPT LOAD |
Cache is not durable. |
SCRIPT EXISTS |
|
SCRIPT FLUSH |
|
SCRIPT KILL |
Returns NOTBUSY when no script is running. |
FCALL |
Runs a memory-only FUNCTION LOAD body. Same key rules as EVAL. Lua is not replayed. |
FUNCTION LOAD |
Stores one named Lua body on the shard. Not a Redis library shebang. Lost on restart. |
FUNCTION LIST |
Returns loaded function names in byte order. |
FUNCTION DELETE |
Removes one memory-only function. Returns 1 or 0. |
8 commands.
| Command | Notes |
|---|---|
ACL WHOAMI |
The name copied at the last AUTH. |
ACL USERS |
Live directory, including ACL SETUSER users until restart. |
ACL LIST |
Passwords are redacted. Includes ACL SETUSER users until restart. |
ACL GETUSER |
Flat bulk fields. Passwords are counted, not echoed. Reads the live directory. |
ACL CAT |
Ruvio command categories only. |
ACL SETUSER |
Incremental rules. A new user starts off with no password, commands, or keys. A failed rule changes nothing. Open connections keep the rules from their last AUTH. ACL SAVE writes the live directory when security.acl_file is set. Rules must be UTF-8. |
ACL LOAD |
Replaces the live directory from security.acl_file. A missing path or a bad line changes nothing. Open connections keep the rules from their last AUTH. GET and SET do not read the file. |
ACL SAVE |
Writes the live directory to security.acl_file, including passwords. ACL LIST stays redacted. A missing path changes nothing. |
Bloom filters
Section titled “Bloom filters”8 commands.
| Command | Notes |
|---|---|
BF.RESERVE |
RedisBloom wire shape: BF.RESERVE key error capacity [EXPANSION n | NONSCALING]. Filters scale by default (each new layer is expansion times larger with half the error rate); a layer above 64 MiB is refused. Not certified module compatibility. |
BF.ADD |
RedisBloom wire shape. A missing key becomes a scalable filter (error 0.01, capacity 100, expansion 2). A full non-scaling filter answers an error. Not certified module compatibility. |
BF.MADD |
RedisBloom wire shape. One reply per item (1 added, 0 present, or an error element when a non-scaling filter is full). One WAL record for the whole batch. |
BF.INSERT |
RedisBloom wire shape: CAPACITY, ERROR, EXPANSION, NOCREATE, NONSCALING, ITEMS. The creation options apply only when the key is new. NOCREATE on a missing key answers ERR not found. |
BF.INFO |
RedisBloom wire shape: Capacity, Size, Number of filters, Number of items inserted, Expansion rate (nil for a non-scaling filter); or one field by name. Size is the bit arrays plus the filter header. |
BF.CARD |
Items added so far (counted when an item sets a new bit); 0 for a missing key. |
BF.EXISTS |
RedisBloom wire shape; not certified module compatibility. |
BF.MEXISTS |
RedisBloom wire shape. A missing key answers 0 for every item. |
Cluster
Section titled “Cluster”8 commands.
| Command | Notes |
|---|---|
CLUSTER SLOTS |
Static topology of the shards in one process. Hosts and ports come from advertised_host and advertised_port. |
CLUSTER NODES |
Static topology of the shards in one process. Hosts and ports come from advertised_host and advertised_port. |
CLUSTER SHARDS |
Static topology of the shards in one process. Every shard is a primary. |
CLUSTER INFO |
cluster_state is always ok; every slot is assigned. |
CLUSTER MYID |
The id of the receiving shard. |
CLUSTER KEYSLOT |
Also available with one shard. |
READONLY |
Returns OK in cluster mode. There are no replicas to read from. |
READWRITE |
Returns OK in cluster mode. |
8 commands.
| Command | Notes |
|---|---|
GEOADD |
One sorted set. Score is the 52-bit geohash. NX, XX, and CH. |
GEODIST |
Units M, KM, FT, and MI. Missing member is nil. |
GEOHASH |
11-character string. The last character is 0. |
GEOPOS |
Missing member is nil. |
GEOSEARCH |
FROMMEMBER, FROMLONLAT, BYRADIUS, BYBOX, ASC, DESC, COUNT, ANY, WITHDIST, WITHHASH, WITHCOORD. |
GEOSEARCHSTORE |
Replaces the destination sorted set. STOREDIST stores the distance. |
GEORADIUS |
STORE and STOREDIST replace the destination. Same-slot when storing. |
GEORADIUSBYMEMBER |
STORE and STOREDIST replace the destination. Same-slot when storing. |
Pub/Sub
Section titled “Pub/Sub”8 commands.
| Command | Notes |
|---|---|
SPUBLISH |
Delivered only to subscribers of that channel on this slot. Not stored and not durable. A full subscriber queue disconnects that subscriber. |
SSUBSCRIBE |
Puts the connection in Pub/Sub mode. Replies are RESP2 arrays. No pattern subscribe. |
SUNSUBSCRIBE |
No arguments unsubscribes every channel on this connection. An unknown channel still returns the current count. |
PUBLISH |
Delivers on this shard to exact SUBSCRIBE clients and matching PSUBSCRIBE patterns. Not stored and not written to the WAL. Other shards do not receive it. A full subscriber queue disconnects that subscriber. |
SUBSCRIBE |
Exact channels on this shard. The reply count is classic channels plus patterns on the connection. After a subscription the connection accepts SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, SSUBSCRIBE, SUNSUBSCRIBE, and PING. |
UNSUBSCRIBE |
No arguments drops every exact classic channel on this connection and leaves patterns in place. |
PSUBSCRIBE |
Patterns use * and ?. Character classes are not supported. A match is delivered as pmessage. Keyspace notices stay on exact SSUBSCRIBE channels. |
PUNSUBSCRIBE |
No arguments drops every pattern on this connection and leaves exact channels in place. |
Bitmaps
Section titled “Bitmaps”7 commands.
| Command | Notes |
|---|---|
SETBIT |
Bitmap limited to 16 MiB (offset < 134,217,728); each call rewrites the value, O(value size). Keeps an existing TTL. |
BITFIELD |
GET, SET, INCRBY and OVERFLOW WRAP|SAT|FAIL on i1..i64 and u1..u63 fields (offset or #n). Field must end below 134,217,728 bits (16 MiB bitmap). A write rewrites the whole value, O(value size), and keeps an existing TTL. |
BITFIELD_RO |
GET only, same field types and limits as BITFIELD. |
GETBIT |
Offsets up to 2^32-1. |
BITCOUNT |
|
BITPOS |
|
BITOP |
AND, OR, XOR, NOT. Result limited to 16 MiB. |
Transactions
Section titled “Transactions”5 commands.
| Command | Notes |
|---|---|
MULTI |
Same-slot, shard-local only. At most 1,024 queued commands. |
EXEC |
A command refused while queueing (unknown, wrong arity, NOPERM, CROSSSLOT or MOVED, not allowed in MULTI, queue full) makes EXEC reply EXECABORT and discard the queue. Invalid arguments, such as MOVE or SWAPDB to a missing database, fail only that command at EXEC. One WAL Transaction record. Empty EXEC is *0; a dirty WATCH is *-1. |
DISCARD |
Drops the queue and leaves watches. |
WATCH |
At most 128 watched keys. A mutation by any connection, including the watcher, aborts EXEC. |
UNWATCH |
Introspection
Section titled “Introspection”4 commands.
| Command | Notes |
|---|---|
INFO |
INFO prometheus returns Prometheus text. |
CONFIG GET |
Lists Ruvio settings with requirepass redacted. CONFIG SET is not supported. |
SAVE |
In-process checkpoint. |
BGSAVE |
In-process, not a fork. |
HyperLogLog
Section titled “HyperLogLog”3 commands.
| Command | Notes |
|---|---|
PFADD |
Dense encoding only (12,304-byte string); every call rewrites the value. Estimates match Redis 7. |
PFCOUNT |
Multiple keys return the union estimate without storing it. |
PFMERGE |
The destination takes part in the union, as in Redis. |
Replication
Section titled “Replication”1 command.
| Command | Notes |
|---|---|
WAIT |
Blocks only the calling client until N replicas have synced this shard’s wal_last_sequence to disk, or the timeout. Timeout 0 waits until shutdown. The integer reply is how many replicas reached that sequence. A missing replica does not drop the write. Off and replica roles return 0. Not queued inside MULTI and not scriptable. |
Not supported
Section titled “Not supported”| Command | Reason |
|---|---|
CONFIG SET |
Runtime mutation of process settings is not supported. |