# Source: https://upstash.com/docs/redis/overall/rediscompatibility.md

> ## Documentation Index
> Fetch the complete documentation index at: https://upstash.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Redis® API Compatibility

Upstash supports Redis client protocol up to version `8.2`. We are also gradually adding changes introduced in later versions.

Most of the unsupported items are in our roadmap. If you need a feature that we do not support, please drop a note to [support@upstash.com](mailto:support@upstash.com).
So we can inform you when we are planning to support it.

***

## Supported Commands

<AccordionGroup>
  <Accordion title="Bitmap" icon="grid">
    <CardGroup cols={2}>
      <Card title="BITCOUNT" href="https://redis.io/docs/latest/commands/bitcount/">Count set bits in a string</Card>
      <Card title="BITFIELD" href="https://redis.io/docs/latest/commands/bitfield/">Perform arbitrary bitfield operations</Card>
      <Card title="BITFIELD_RO" href="https://redis.io/docs/latest/commands/bitfield_ro/">Read-only bitfield operations</Card>
      <Card title="BITOP" href="https://redis.io/docs/latest/commands/bitop/">Perform bitwise operations between strings</Card>
      <Card title="BITPOS" href="https://redis.io/docs/latest/commands/bitpos/">Find first bit set or clear in a string</Card>
      <Card title="GETBIT" href="https://redis.io/docs/latest/commands/getbit/">Get the bit value at offset</Card>
      <Card title="SETBIT" href="https://redis.io/docs/latest/commands/setbit/">Set or clear the bit at offset</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Connection" icon="plug">
    <CardGroup cols={2}>
      <Card title="AUTH" href="https://redis.io/docs/latest/commands/auth/">Authenticate to the server</Card>
      <Card title="CLIENT GETNAME" href="https://redis.io/docs/latest/commands/client-getname/">Get the current connection name</Card>
      <Card title="CLIENT ID" href="https://redis.io/docs/latest/commands/client-id/">Get the current client ID</Card>
      <Card title="CLIENT INFO" href="https://redis.io/docs/latest/commands/client-info/">Get info about current connection</Card>
      <Card title="CLIENT LIST" href="https://redis.io/docs/latest/commands/client-list/">List all client connections</Card>
      <Card title="CLIENT SETINFO" href="https://redis.io/docs/latest/commands/client-setinfo/">Set client connection attributes</Card>
      <Card title="CLIENT SETNAME" href="https://redis.io/docs/latest/commands/client-setname/">Set the connection name</Card>
      <Card title="ECHO" href="https://redis.io/docs/latest/commands/echo/">Echo the given string</Card>
      <Card title="HELLO" href="https://redis.io/docs/latest/commands/hello/">Handshake with Redis protocol</Card>
      <Card title="PING" href="https://redis.io/docs/latest/commands/ping/">Ping the server</Card>
      <Card title="QUIT" href="https://redis.io/docs/latest/commands/quit/">Close the connection</Card>
      <Card title="RESET" href="https://redis.io/docs/latest/commands/reset/">Reset the connection</Card>
      <Card title="SELECT" href="https://redis.io/docs/latest/commands/select/">Select the database by index</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Functions" icon="code">
    <CardGroup cols={2}>
      <Card title="FCALL" href="https://redis.io/docs/latest/commands/fcall/">Call a function</Card>
      <Card title="FCALL_RO" href="https://redis.io/docs/latest/commands/fcall_ro/">Call a read-only function</Card>
      <Card title="FUNCTION DELETE" href="https://redis.io/docs/latest/commands/function-delete/">Delete a library</Card>
      <Card title="FUNCTION FLUSH" href="https://redis.io/docs/latest/commands/function-flush/">Delete all libraries</Card>
      <Card title="FUNCTION KILL" href="https://redis.io/docs/latest/commands/function-kill/">Kill a running function</Card>
      <Card title="FUNCTION LIST" href="https://redis.io/docs/latest/commands/function-list/">List all libraries</Card>
      <Card title="FUNCTION LOAD" href="https://redis.io/docs/latest/commands/function-load/">Load a library</Card>
      <Card title="FUNCTION STATS" href="https://redis.io/docs/latest/commands/function-stats/">Get function execution stats</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Generic" icon="sliders">
    <CardGroup cols={2}>
      <Card title="COPY" href="https://redis.io/docs/latest/commands/copy/">Copy a key to another key</Card>
      <Card title="DEL" href="https://redis.io/docs/latest/commands/del/">Delete one or more keys</Card>
      <Card title="DUMP" href="https://redis.io/docs/latest/commands/dump/">Serialize a key's value</Card>
      <Card title="EXISTS" href="https://redis.io/docs/latest/commands/exists/">Check if keys exist</Card>
      <Card title="EXPIRE" href="https://redis.io/docs/latest/commands/expire/">Set a key's TTL in seconds</Card>
      <Card title="EXPIREAT" href="https://redis.io/docs/latest/commands/expireat/">Set expiry as Unix timestamp</Card>
      <Card title="EXPIRETIME" href="https://redis.io/docs/latest/commands/expiretime/">Get expiry as Unix timestamp</Card>
      <Card title="KEYS" href="https://redis.io/docs/latest/commands/keys/">Find keys matching a pattern</Card>
      <Card title="PERSIST" href="https://redis.io/docs/latest/commands/persist/">Remove the expiration from a key</Card>
      <Card title="PEXPIRE" href="https://redis.io/docs/latest/commands/pexpire/">Set a key's TTL in milliseconds</Card>
      <Card title="PEXPIREAT" href="https://redis.io/docs/latest/commands/pexpireat/">Set expiry as Unix ms timestamp</Card>
      <Card title="PEXPIRETIME" href="https://redis.io/docs/latest/commands/pexpiretime/">Get expiry as Unix ms timestamp</Card>
      <Card title="PTTL" href="https://redis.io/docs/latest/commands/pttl/">Get TTL in milliseconds</Card>
      <Card title="RANDOMKEY" href="https://redis.io/docs/latest/commands/randomkey/">Return a random key</Card>
      <Card title="RENAME" href="https://redis.io/docs/latest/commands/rename/">Rename a key</Card>
      <Card title="RENAMENX" href="https://redis.io/docs/latest/commands/renamenx/">Rename a key if new key doesn't exist</Card>
      <Card title="RESTORE" href="https://redis.io/docs/latest/commands/restore/">Deserialize and restore a key</Card>
      <Card title="SCAN" href="https://redis.io/docs/latest/commands/scan/">Incrementally iterate keys</Card>
      <Card title="TOUCH" href="https://redis.io/docs/latest/commands/touch/">Update last access time of keys</Card>
      <Card title="TTL" href="https://redis.io/docs/latest/commands/ttl/">Get TTL in seconds</Card>
      <Card title="TYPE" href="https://redis.io/docs/latest/commands/type/">Get the type of a key</Card>
      <Card title="UNLINK" href="https://redis.io/docs/latest/commands/unlink/">Delete keys asynchronously</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Geo" icon="location-dot">
    <CardGroup cols={2}>
      <Card title="GEOADD" href="https://redis.io/docs/latest/commands/geoadd/">Add geospatial items</Card>
      <Card title="GEODIST" href="https://redis.io/docs/latest/commands/geodist/">Get distance between two members</Card>
      <Card title="GEOHASH" href="https://redis.io/docs/latest/commands/geohash/">Get geohash strings for members</Card>
      <Card title="GEOPOS" href="https://redis.io/docs/latest/commands/geopos/">Get coordinates of members</Card>
      <Card title="GEORADIUS" href="https://redis.io/docs/latest/commands/georadius/">Query members within radius</Card>
      <Card title="GEORADIUS_RO" href="https://redis.io/docs/latest/commands/georadius_ro/">Read-only radius query</Card>
      <Card title="GEORADIUSBYMEMBER" href="https://redis.io/docs/latest/commands/georadiusbymember/">Radius query centered on member</Card>
      <Card title="GEORADIUSBYMEMBER_RO" href="https://redis.io/docs/latest/commands/georadiusbymember_ro/">Read-only radius query by member</Card>
      <Card title="GEOSEARCH" href="https://redis.io/docs/latest/commands/geosearch/">Search for members in an area</Card>
      <Card title="GEOSEARCHSTORE" href="https://redis.io/docs/latest/commands/geosearchstore/">Store geosearch results</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Hash" icon="hashtag">
    <CardGroup cols={2}>
      <Card title="HDEL" href="https://redis.io/docs/latest/commands/hdel/">Delete one or more hash fields</Card>
      <Card title="HEXISTS" href="https://redis.io/docs/latest/commands/hexists/">Check if a hash field exists</Card>
      <Card title="HEXPIRE" href="https://redis.io/docs/latest/commands/hexpire/">Set field TTL in seconds</Card>
      <Card title="HEXPIREAT" href="https://redis.io/docs/latest/commands/hexpireat/">Set field expiry as timestamp</Card>
      <Card title="HEXPIRETIME" href="https://redis.io/docs/latest/commands/hexpiretime/">Get field expiry as timestamp</Card>
      <Card title="HGET" href="https://redis.io/docs/latest/commands/hget/">Get the value of a hash field</Card>
      <Card title="HGETALL" href="https://redis.io/docs/latest/commands/hgetall/">Get all fields and values</Card>
      <Card title="HGETDEL" href="https://redis.io/docs/latest/commands/hgetdel/">Get and delete hash fields</Card>
      <Card title="HGETEX" href="https://redis.io/docs/latest/commands/hgetex/">Get fields and set their expiry</Card>
      <Card title="HINCRBY" href="https://redis.io/docs/latest/commands/hincrby/">Increment integer value of a field</Card>
      <Card title="HINCRBYFLOAT" href="https://redis.io/docs/latest/commands/hincrbyfloat/">Increment float value of a field</Card>
      <Card title="HKEYS" href="https://redis.io/docs/latest/commands/hkeys/">Get all fields in a hash</Card>
      <Card title="HLEN" href="https://redis.io/docs/latest/commands/hlen/">Get number of fields in a hash</Card>
      <Card title="HMGET" href="https://redis.io/docs/latest/commands/hmget/">Get values of multiple fields</Card>
      <Card title="HMSET" href="https://redis.io/docs/latest/commands/hmset/">Set multiple hash fields</Card>
      <Card title="HPERSIST" href="https://redis.io/docs/latest/commands/hpersist/">Remove field expiration</Card>
      <Card title="HPEXPIRE" href="https://redis.io/docs/latest/commands/hpexpire/">Set field TTL in milliseconds</Card>
      <Card title="HPEXPIREAT" href="https://redis.io/docs/latest/commands/hpexpireat/">Set field expiry as ms timestamp</Card>
      <Card title="HPEXPIRETIME" href="https://redis.io/docs/latest/commands/hpexpiretime/">Get field expiry as ms timestamp</Card>
      <Card title="HPTTL" href="https://redis.io/docs/latest/commands/hpttl/">Get field TTL in milliseconds</Card>
      <Card title="HRANDFIELD" href="https://redis.io/docs/latest/commands/hrandfield/">Get random fields from a hash</Card>
      <Card title="HSCAN" href="https://redis.io/docs/latest/commands/hscan/">Incrementally iterate hash fields</Card>
      <Card title="HSET" href="https://redis.io/docs/latest/commands/hset/">Set hash field values</Card>
      <Card title="HSETEX" href="https://redis.io/docs/latest/commands/hsetex/">Set fields with expiration</Card>
      <Card title="HSETNX" href="https://redis.io/docs/latest/commands/hsetnx/">Set field only if it doesn't exist</Card>
      <Card title="HSTRLEN" href="https://redis.io/docs/latest/commands/hstrlen/">Get length of a field's value</Card>
      <Card title="HTTL" href="https://redis.io/docs/latest/commands/httl/">Get field TTL in seconds</Card>
      <Card title="HVALS" href="https://redis.io/docs/latest/commands/hvals/">Get all values in a hash</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="HyperLogLog" icon="chart-simple">
    <CardGroup cols={2}>
      <Card title="PFADD" href="https://redis.io/docs/latest/commands/pfadd/">Add elements to HyperLogLog</Card>
      <Card title="PFCOUNT" href="https://redis.io/docs/latest/commands/pfcount/">Get estimated cardinality</Card>
      <Card title="PFMERGE" href="https://redis.io/docs/latest/commands/pfmerge/">Merge multiple HyperLogLogs</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="JSON" icon="brackets-curly">
    <CardGroup cols={2}>
      <Card title="JSON.ARRAPPEND" href="https://redis.io/docs/latest/commands/json.arrappend/">Append values to JSON array</Card>
      <Card title="JSON.ARRINDEX" href="https://redis.io/docs/latest/commands/json.arrindex/">Find index of value in array</Card>
      <Card title="JSON.ARRINSERT" href="https://redis.io/docs/latest/commands/json.arrinsert/">Insert values into JSON array</Card>
      <Card title="JSON.ARRLEN" href="https://redis.io/docs/latest/commands/json.arrlen/">Get JSON array length</Card>
      <Card title="JSON.ARRPOP" href="https://redis.io/docs/latest/commands/json.arrpop/">Pop value from JSON array</Card>
      <Card title="JSON.ARRTRIM" href="https://redis.io/docs/latest/commands/json.arrtrim/">Trim JSON array to range</Card>
      <Card title="JSON.CLEAR" href="https://redis.io/docs/latest/commands/json.clear/">Clear JSON values</Card>
      <Card title="JSON.DEL" href="https://redis.io/docs/latest/commands/json.del/">Delete JSON values</Card>
      <Card title="JSON.FORGET" href="https://redis.io/docs/latest/commands/json.forget/">Alias for JSON.DEL</Card>
      <Card title="JSON.GET" href="https://redis.io/docs/latest/commands/json.get/">Get JSON values</Card>
      <Card title="JSON.MERGE" href="https://redis.io/docs/latest/commands/json.merge/">Merge JSON values</Card>
      <Card title="JSON.MGET" href="https://redis.io/docs/latest/commands/json.mget/">Get values from multiple keys</Card>
      <Card title="JSON.MSET" href="https://redis.io/docs/latest/commands/json.mset/">Set values in multiple keys</Card>
      <Card title="JSON.NUMINCRBY" href="https://redis.io/docs/latest/commands/json.numincrby/">Increment JSON number</Card>
      <Card title="JSON.NUMMULTBY" href="https://redis.io/docs/latest/commands/json.nummultby/">Multiply JSON number</Card>
      <Card title="JSON.OBJKEYS" href="https://redis.io/docs/latest/commands/json.objkeys/">Get JSON object keys</Card>
      <Card title="JSON.OBJLEN" href="https://redis.io/docs/latest/commands/json.objlen/">Get JSON object size</Card>
      <Card title="JSON.RESP" href="https://redis.io/docs/latest/commands/json.resp/">Get JSON in RESP format</Card>
      <Card title="JSON.SET" href="https://redis.io/docs/latest/commands/json.set/">Set JSON value</Card>
      <Card title="JSON.STRAPPEND" href="https://redis.io/docs/latest/commands/json.strappend/">Append to JSON string</Card>
      <Card title="JSON.STRLEN" href="https://redis.io/docs/latest/commands/json.strlen/">Get JSON string length</Card>
      <Card title="JSON.TOGGLE" href="https://redis.io/docs/latest/commands/json.toggle/">Toggle JSON boolean</Card>
      <Card title="JSON.TYPE" href="https://redis.io/docs/latest/commands/json.type/">Get JSON value type</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="List" icon="list">
    <CardGroup cols={2}>
      <Card title="BLMOVE" href="https://redis.io/docs/latest/commands/blmove/">Blocking list move</Card>
      <Card title="BLMPOP" href="https://redis.io/docs/latest/commands/blmpop/">Blocking pop from multiple lists</Card>
      <Card title="BLPOP" href="https://redis.io/docs/latest/commands/blpop/">Blocking left pop</Card>
      <Card title="BRPOP" href="https://redis.io/docs/latest/commands/brpop/">Blocking right pop</Card>
      <Card title="BRPOPLPUSH" href="https://redis.io/docs/latest/commands/brpoplpush/">Blocking pop and push</Card>
      <Card title="LINDEX" href="https://redis.io/docs/latest/commands/lindex/">Get element by index</Card>
      <Card title="LINSERT" href="https://redis.io/docs/latest/commands/linsert/">Insert before or after pivot</Card>
      <Card title="LLEN" href="https://redis.io/docs/latest/commands/llen/">Get list length</Card>
      <Card title="LMOVE" href="https://redis.io/docs/latest/commands/lmove/">Move element between lists</Card>
      <Card title="LMPOP" href="https://redis.io/docs/latest/commands/lmpop/">Pop from multiple lists</Card>
      <Card title="LPOP" href="https://redis.io/docs/latest/commands/lpop/">Pop from list head</Card>
      <Card title="LPOS" href="https://redis.io/docs/latest/commands/lpos/">Find element position</Card>
      <Card title="LPUSH" href="https://redis.io/docs/latest/commands/lpush/">Push to list head</Card>
      <Card title="LPUSHX" href="https://redis.io/docs/latest/commands/lpushx/">Push to head if list exists</Card>
      <Card title="LRANGE" href="https://redis.io/docs/latest/commands/lrange/">Get range of elements</Card>
      <Card title="LREM" href="https://redis.io/docs/latest/commands/lrem/">Remove elements by value</Card>
      <Card title="LSET" href="https://redis.io/docs/latest/commands/lset/">Set element at index</Card>
      <Card title="LTRIM" href="https://redis.io/docs/latest/commands/ltrim/">Trim list to range</Card>
      <Card title="RPOP" href="https://redis.io/docs/latest/commands/rpop/">Pop from list tail</Card>
      <Card title="RPOPLPUSH" href="https://redis.io/docs/latest/commands/rpoplpush/">Pop from tail and push to head</Card>
      <Card title="RPUSH" href="https://redis.io/docs/latest/commands/rpush/">Push to list tail</Card>
      <Card title="RPUSHX" href="https://redis.io/docs/latest/commands/rpushx/">Push to tail if list exists</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Pub/Sub" icon="tower-broadcast">
    <CardGroup cols={2}>
      <Card title="PSUBSCRIBE" href="https://redis.io/docs/latest/commands/psubscribe/">Subscribe to pattern channels</Card>
      <Card title="PUBLISH" href="https://redis.io/docs/latest/commands/publish/">Publish message to channel</Card>
      <Card title="PUBSUB" href="https://redis.io/docs/latest/commands/pubsub/">Inspect pub/sub state</Card>
      <Card title="PUNSUBSCRIBE" href="https://redis.io/docs/latest/commands/punsubscribe/">Unsubscribe from patterns</Card>
      <Card title="SUBSCRIBE" href="https://redis.io/docs/latest/commands/subscribe/">Subscribe to channels</Card>
      <Card title="UNSUBSCRIBE" href="https://redis.io/docs/latest/commands/unsubscribe/">Unsubscribe from channels</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Scripting" icon="scroll">
    <CardGroup cols={2}>
      <Card title="EVAL" href="https://redis.io/docs/latest/commands/eval/">Execute a Lua script</Card>
      <Card title="EVAL_RO" href="https://redis.io/docs/latest/commands/eval_ro/">Execute read-only Lua script</Card>
      <Card title="EVALSHA" href="https://redis.io/docs/latest/commands/evalsha/">Execute cached Lua script by SHA</Card>
      <Card title="EVALSHA_RO" href="https://redis.io/docs/latest/commands/evalsha_ro/">Read-only execute by SHA</Card>
      <Card title="SCRIPT EXISTS" href="https://redis.io/docs/latest/commands/script-exists/">Check if scripts exist in cache</Card>
      <Card title="SCRIPT FLUSH" href="https://redis.io/docs/latest/commands/script-flush/">Clear the script cache</Card>
      <Card title="SCRIPT LOAD" href="https://redis.io/docs/latest/commands/script-load/">Load script into cache</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Server" icon="server">
    <CardGroup cols={2}>
      <Card title="ACL" href="https://redis.io/docs/latest/commands/acl/">Manage access control list</Card>
      <Card title="DBSIZE" href="https://redis.io/docs/latest/commands/dbsize/">Get number of keys in database</Card>
      <Card title="FLUSHALL" href="https://redis.io/docs/latest/commands/flushall/">Delete all keys in all databases</Card>
      <Card title="FLUSHDB" href="https://redis.io/docs/latest/commands/flushdb/">Delete all keys in current database</Card>
      <Card title="MONITOR" href="https://redis.io/docs/latest/commands/monitor/">Stream all commands received</Card>
      <Card title="TIME" href="https://redis.io/docs/latest/commands/time/">Get current server time</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Set" icon="layer-group">
    <CardGroup cols={2}>
      <Card title="SADD" href="https://redis.io/docs/latest/commands/sadd/">Add members to a set</Card>
      <Card title="SCARD" href="https://redis.io/docs/latest/commands/scard/">Get set cardinality</Card>
      <Card title="SDIFF" href="https://redis.io/docs/latest/commands/sdiff/">Get set difference</Card>
      <Card title="SDIFFSTORE" href="https://redis.io/docs/latest/commands/sdiffstore/">Store set difference</Card>
      <Card title="SINTER" href="https://redis.io/docs/latest/commands/sinter/">Get set intersection</Card>
      <Card title="SINTERCARD" href="https://redis.io/docs/latest/commands/sintercard/">Get intersection cardinality</Card>
      <Card title="SINTERSTORE" href="https://redis.io/docs/latest/commands/sinterstore/">Store set intersection</Card>
      <Card title="SISMEMBER" href="https://redis.io/docs/latest/commands/sismember/">Check if member exists in set</Card>
      <Card title="SMEMBERS" href="https://redis.io/docs/latest/commands/smembers/">Get all set members</Card>
      <Card title="SMISMEMBER" href="https://redis.io/docs/latest/commands/smismember/">Check multiple members</Card>
      <Card title="SMOVE" href="https://redis.io/docs/latest/commands/smove/">Move member between sets</Card>
      <Card title="SPOP" href="https://redis.io/docs/latest/commands/spop/">Remove random members</Card>
      <Card title="SRANDMEMBER" href="https://redis.io/docs/latest/commands/srandmember/">Get random members</Card>
      <Card title="SREM" href="https://redis.io/docs/latest/commands/srem/">Remove members from a set</Card>
      <Card title="SSCAN" href="https://redis.io/docs/latest/commands/sscan/">Incrementally iterate set members</Card>
      <Card title="SUNION" href="https://redis.io/docs/latest/commands/sunion/">Get set union</Card>
      <Card title="SUNIONSTORE" href="https://redis.io/docs/latest/commands/sunionstore/">Store set union</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Sorted Set" icon="arrow-down-1-9">
    <CardGroup cols={2}>
      <Card title="BZMPOP" href="https://redis.io/docs/latest/commands/bzmpop/">Blocking pop from sorted sets</Card>
      <Card title="BZPOPMAX" href="https://redis.io/docs/latest/commands/bzpopmax/">Blocking pop max score member</Card>
      <Card title="BZPOPMIN" href="https://redis.io/docs/latest/commands/bzpopmin/">Blocking pop min score member</Card>
      <Card title="ZADD" href="https://redis.io/docs/latest/commands/zadd/">Add members with scores</Card>
      <Card title="ZCARD" href="https://redis.io/docs/latest/commands/zcard/">Get sorted set cardinality</Card>
      <Card title="ZCOUNT" href="https://redis.io/docs/latest/commands/zcount/">Count members in score range</Card>
      <Card title="ZDIFF" href="https://redis.io/docs/latest/commands/zdiff/">Get sorted set difference</Card>
      <Card title="ZDIFFSTORE" href="https://redis.io/docs/latest/commands/zdiffstore/">Store sorted set difference</Card>
      <Card title="ZINCRBY" href="https://redis.io/docs/latest/commands/zincrby/">Increment member's score</Card>
      <Card title="ZINTER" href="https://redis.io/docs/latest/commands/zinter/">Get sorted set intersection</Card>
      <Card title="ZINTERCARD" href="https://redis.io/docs/latest/commands/zintercard/">Get intersection cardinality</Card>
      <Card title="ZINTERSTORE" href="https://redis.io/docs/latest/commands/zinterstore/">Store sorted set intersection</Card>
      <Card title="ZLEXCOUNT" href="https://redis.io/docs/latest/commands/zlexcount/">Count members in lex range</Card>
      <Card title="ZMPOP" href="https://redis.io/docs/latest/commands/zmpop/">Pop members from sorted sets</Card>
      <Card title="ZMSCORE" href="https://redis.io/docs/latest/commands/zmscore/">Get scores of multiple members</Card>
      <Card title="ZPOPMAX" href="https://redis.io/docs/latest/commands/zpopmax/">Pop members with highest scores</Card>
      <Card title="ZPOPMIN" href="https://redis.io/docs/latest/commands/zpopmin/">Pop members with lowest scores</Card>
      <Card title="ZRANDMEMBER" href="https://redis.io/docs/latest/commands/zrandmember/">Get random members</Card>
      <Card title="ZRANGE" href="https://redis.io/docs/latest/commands/zrange/">Get members by index range</Card>
      <Card title="ZRANGEBYLEX" href="https://redis.io/docs/latest/commands/zrangebylex/">Get members by lex range</Card>
      <Card title="ZRANGEBYSCORE" href="https://redis.io/docs/latest/commands/zrangebyscore/">Get members by score range</Card>
      <Card title="ZRANGESTORE" href="https://redis.io/docs/latest/commands/zrangestore/">Store range result</Card>
      <Card title="ZRANK" href="https://redis.io/docs/latest/commands/zrank/">Get member's rank</Card>
      <Card title="ZREM" href="https://redis.io/docs/latest/commands/zrem/">Remove members</Card>
      <Card title="ZREMRANGEBYLEX" href="https://redis.io/docs/latest/commands/zremrangebylex/">Remove members by lex range</Card>
      <Card title="ZREMRANGEBYRANK" href="https://redis.io/docs/latest/commands/zremrangebyrank/">Remove members by rank range</Card>
      <Card title="ZREMRANGEBYSCORE" href="https://redis.io/docs/latest/commands/zremrangebyscore/">Remove members by score range</Card>
      <Card title="ZREVRANGE" href="https://redis.io/docs/latest/commands/zrevrange/">Get members in reverse order</Card>
      <Card title="ZREVRANGEBYLEX" href="https://redis.io/docs/latest/commands/zrevrangebylex/">Reverse lex range query</Card>
      <Card title="ZREVRANGEBYSCORE" href="https://redis.io/docs/latest/commands/zrevrangebyscore/">Reverse score range query</Card>
      <Card title="ZREVRANK" href="https://redis.io/docs/latest/commands/zrevrank/">Get member's reverse rank</Card>
      <Card title="ZSCAN" href="https://redis.io/docs/latest/commands/zscan/">Incrementally iterate sorted set</Card>
      <Card title="ZSCORE" href="https://redis.io/docs/latest/commands/zscore/">Get member's score</Card>
      <Card title="ZUNION" href="https://redis.io/docs/latest/commands/zunion/">Get sorted set union</Card>
      <Card title="ZUNIONSTORE" href="https://redis.io/docs/latest/commands/zunionstore/">Store sorted set union</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Streams" icon="water">
    <CardGroup cols={2}>
      <Card title="XACK" href="https://redis.io/docs/latest/commands/xack/">Acknowledge stream messages</Card>
      <Card title="XACKDEL" href="https://redis.io/docs/latest/commands/xackdel/">Acknowledge and delete messages</Card>
      <Card title="XADD" href="https://redis.io/docs/latest/commands/xadd/">Add entry to stream</Card>
      <Card title="XAUTOCLAIM" href="https://redis.io/docs/latest/commands/xautoclaim/">Auto-claim idle messages</Card>
      <Card title="XCLAIM" href="https://redis.io/docs/latest/commands/xclaim/">Claim pending messages</Card>
      <Card title="XDEL" href="https://redis.io/docs/latest/commands/xdel/">Delete stream entries</Card>
      <Card title="XDELEX" href="https://redis.io/docs/latest/commands/xdelex/">Delete entries with expiration</Card>
      <Card title="XGROUP" href="https://redis.io/docs/latest/commands/xgroup/">Manage consumer groups</Card>
      <Card title="XINFO CONSUMERS" href="https://redis.io/docs/latest/commands/xinfo-consumers/">List group consumers</Card>
      <Card title="XINFO GROUPS" href="https://redis.io/docs/latest/commands/xinfo-groups/">List stream groups</Card>
      <Card title="XINFO STREAM" href="https://redis.io/docs/latest/commands/xinfo-stream/">Get stream info</Card>
      <Card title="XLEN" href="https://redis.io/docs/latest/commands/xlen/">Get stream length</Card>
      <Card title="XPENDING" href="https://redis.io/docs/latest/commands/xpending/">Get pending messages info</Card>
      <Card title="XRANGE" href="https://redis.io/docs/latest/commands/xrange/">Get range of stream entries</Card>
      <Card title="XREAD" href="https://redis.io/docs/latest/commands/xread/">Read stream entries</Card>
      <Card title="XREADGROUP" href="https://redis.io/docs/latest/commands/xreadgroup/">Read as consumer group</Card>
      <Card title="XREVRANGE" href="https://redis.io/docs/latest/commands/xrevrange/">Get range in reverse order</Card>
      <Card title="XTRIM" href="https://redis.io/docs/latest/commands/xtrim/">Trim stream to max length</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="String" icon="font">
    <CardGroup cols={2}>
      <Card title="APPEND" href="https://redis.io/docs/latest/commands/append/">Append value to a string</Card>
      <Card title="DECR" href="https://redis.io/docs/latest/commands/decr/">Decrement integer value by 1</Card>
      <Card title="DECRBY" href="https://redis.io/docs/latest/commands/decrby/">Decrement integer by amount</Card>
      <Card title="GET" href="https://redis.io/docs/latest/commands/get/">Get string value</Card>
      <Card title="GETDEL" href="https://redis.io/docs/latest/commands/getdel/">Get value and delete key</Card>
      <Card title="GETEX" href="https://redis.io/docs/latest/commands/getex/">Get value and set expiration</Card>
      <Card title="GETRANGE" href="https://redis.io/docs/latest/commands/getrange/">Get substring of string</Card>
      <Card title="GETSET" href="https://redis.io/docs/latest/commands/getset/">Set value and return old value</Card>
      <Card title="INCR" href="https://redis.io/docs/latest/commands/incr/">Increment integer value by 1</Card>
      <Card title="INCRBY" href="https://redis.io/docs/latest/commands/incrby/">Increment integer by amount</Card>
      <Card title="INCRBYFLOAT" href="https://redis.io/docs/latest/commands/incrbyfloat/">Increment float by amount</Card>
      <Card title="MGET" href="https://redis.io/docs/latest/commands/mget/">Get values of multiple keys</Card>
      <Card title="MSET" href="https://redis.io/docs/latest/commands/mset/">Set multiple keys at once</Card>
      <Card title="MSETNX" href="https://redis.io/docs/latest/commands/msetnx/">Set multiple keys if none exist</Card>
      <Card title="PSETEX" href="https://redis.io/docs/latest/commands/psetex/">Set value with ms expiration</Card>
      <Card title="SET" href="https://redis.io/docs/latest/commands/set/">Set string value</Card>
      <Card title="SETEX" href="https://redis.io/docs/latest/commands/setex/">Set value with expiration</Card>
      <Card title="SETNX" href="https://redis.io/docs/latest/commands/setnx/">Set value if key doesn't exist</Card>
      <Card title="SETRANGE" href="https://redis.io/docs/latest/commands/setrange/">Overwrite part of string</Card>
      <Card title="STRLEN" href="https://redis.io/docs/latest/commands/strlen/">Get string length</Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Transactions" icon="right-left">
    <CardGroup cols={2}>
      <Card title="DISCARD" href="https://redis.io/docs/latest/commands/discard/">Discard queued commands</Card>
      <Card title="EXEC" href="https://redis.io/docs/latest/commands/exec/">Execute queued commands</Card>
      <Card title="MULTI" href="https://redis.io/docs/latest/commands/multi/">Start a transaction</Card>
      <Card title="UNWATCH" href="https://redis.io/docs/latest/commands/unwatch/">Unwatch all keys</Card>
      <Card title="WATCH" href="https://redis.io/docs/latest/commands/watch/">Watch keys for changes</Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

***

We run command integration tests from the following Redis clients after each code change and also periodically:

* **[Node-Redis](https://github.com/redis/node-redis)**
* **[Jedis](https://github.com/redis/jedis)**
* **[Lettuce](https://github.com/lettuce-io/lettuce-core)**
* **[Go-Redis](https://github.com/go-redis/redis)**
* **[Redis-py](https://github.com/redis/redis-py)**