Skip to content

Coverage matrix

This is the canonical map of logical operations to wire commands. Each row describes one thing a client can ask the server to do; each column shows how that operation is expressed in a given protocol.

Cell value Meaning
name Concrete command, opcode, or meta form (clickable)
– Not applicable to this protocol
stub Recognised but returns synthetic output (no real backing)
no Not implemented; the command is rejected or ignored
Operation memcached text memcached binary memcached meta Redis RESP
Store value unconditionally set 0x01 SET / 0x11 SETQ ms M=S SET
Store only if absent add 0x02 ADD / 0x12 ADDQ ms M=E SET NX
Store only if present replace 0x03 REPLACE / 0x13 REPLACEQ ms M=R SET XX
Append to existing value append 0x0e APPEND / 0x19 APPENDQ ms M=A no
Prepend to existing value prepend 0x0f PREPEND / 0x1a PREPENDQ ms M=P no
Compare-and-swap cas via CAS field in header ms C(token) WATCH + MULTI/EXEC
Fetch by key get 0x00 GET / 0x09 GETQ / 0x0c GETK / 0x0d GETKQ mg v GET
Fetch with CAS gets implicit (CAS in header) mg c v –
Fetch and refresh TTL gat / gats 0x1d GAT / 0x1e GATQ / 0x23 GATK / 0x24 GATKQ mg v T(token) no
Refresh TTL without reading value touch 0x1c TOUCH mg T(token) EXPIRE / PEXPIRE / EXPIREAT / PEXPIREAT
Drop the TTL, keep the value – – – PERSIST
Read the remaining TTL – – me (exp) TTL / PTTL
Increment numeric value incr 0x05 INCREMENT / 0x15 INCREMENTQ ma M=I INCR / INCRBY / INCRBYFLOAT
Decrement numeric value decr 0x06 DECREMENT / 0x16 DECREMENTQ ma M=D DECR / DECRBY
Auto-vivify on miss – 0x05/0x06 with exptime!=0xFFFFFFFF mg N(token) / ma N J –
Delete key delete 0x04 DELETE / 0x14 DELETEQ md DEL / UNLINK
Mark stale (recache coordination) – – md I / ms I –
Drop all entries flush_all 0x08 FLUSH / 0x18 FLUSHQ – FLUSHDB / FLUSHALL
Check key existence implicit via get implicit via 0x00 mg h EXISTS
Server version version 0x0b VERSION – inside INFO
Server stats stats + sub-commands 0x10 STAT per-entry via me INFO
Set memory limit at runtime cache_memlimit – – –
Verbosity dial verbosity (no-op) 0x1b VERBOSITY (no-op) – –
Close connection quit 0x07 QUIT / 0x17 QUITQ – QUIT
Heartbeat – 0x0a NOOP mn PING
Pipeline sync barrier – – mn –
Slab rebalance stub (slabs) – – –
LRU tuning stub (lru) – – –
LRU crawler control stub (lru_crawler) – – –
Event watch streaming no – – –
Authentication – SASL rejected – AUTH against --requirepass
Echo – – – ECHO
Server handshake – – – HELLO
Command introspection – – – COMMAND / COUNT / INFO
Reset the connection – – – RESET
Fetch several keys at once get k1 k2 pipelined 0x09 GETQ pipelined mg MGET
Store several keys at once – pipelined 0x11 SETQ pipelined ms MSET / MSETNX
Set membership – – – SADD / SREM / SMEMBERS / SCARD / SISMEMBER / SMISMEMBER / SPOP
Set algebra – – – no
Stream append and read – – – XADD / XRANGE / XREAD / XLEN and 11 more
Stream consumer groups – – – XGROUP / XREADGROUP / XACK / XPENDING / XCLAIM / XAUTOCLAIM
Publish / subscribe – – – PUBLISH / SUBSCRIBE / PSUBSCRIBE and the two unsubscribes
Transaction – – – MULTI / EXEC / DISCARD / WATCH / UNWATCH
Enumerate the keyspace no no no no
Protocol conformance probe – – – DEBUG PROTOCOL <type>
Select database – – – SELECT accepted (no-op, single keyspace)
Client connection setup – – – CLIENT stub
Runtime config probe – – – CONFIG stub
Pub / sub – – – no
Scripting (EVAL) – – – no
Streams / sorted sets / hashes – – – no

Reading the matrix

  • A row marked no in every column is an operation fastcached does not support in any protocol.
  • A cell marked – means the protocol doesn't have a way to express the operation, so the absence is not a fastcached limitation.
  • "stub" cells return well-shaped responses (OK) so capability-probing clients don't error out, but no underlying state is changed. See the linked command page for each stub's exact behavior.