Skip to content

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)

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.

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

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.

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.

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.

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.

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.

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.

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.

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.

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.

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

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.

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.

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.
Command Reason
CONFIG SET Runtime mutation of process settings is not supported.