From ed48d521a5fd654c3ececd90d4e866cb7d110899 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 22 Jan 2026 12:25:16 +0000
Subject: [PATCH 1/4] Initial plan
From 9c54f0348a140788d8b906f7bf5484ef44b0e32f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 22 Jan 2026 12:30:37 +0000
Subject: [PATCH 2/4] Add documentation for DIGEST and DELEX commands
Co-authored-by: romange <3674760+romange@users.noreply.github.com>
---
docs/command-reference/compatibility.md | 2 +
docs/command-reference/generic/delex.md | 186 ++++++++++++++++++++
docs/command-reference/strings/digest.md | 123 +++++++++++++
src/components/CompatibilityTable/data.json | 2 +-
4 files changed, 312 insertions(+), 1 deletion(-)
create mode 100644 docs/command-reference/generic/delex.md
create mode 100644 docs/command-reference/strings/digest.md
diff --git a/docs/command-reference/compatibility.md b/docs/command-reference/compatibility.md
index c193280b..86d5a300 100644
--- a/docs/command-reference/compatibility.md
+++ b/docs/command-reference/compatibility.md
@@ -40,6 +40,7 @@ sidebar_position: 0
| | SELECT | Fully supported |
| Generic | COPY | Partially supported |
| | DEL | Fully supported |
+| | DELEX | Fully supported |
| | DUMP | Fully supported |
| | EXISTS | Fully supported |
| | EXPIRE | Fully supported |
@@ -267,6 +268,7 @@ sidebar_position: 0
| String | APPEND | Fully supported |
| | DECR | Fully supported |
| | DECRBY | Fully supported |
+| | DIGEST | Fully supported |
| | GET | Fully supported |
| | GETEX | Fully supported |
| | GETDEL | Fully supported |
diff --git a/docs/command-reference/generic/delex.md b/docs/command-reference/generic/delex.md
new file mode 100644
index 00000000..c62a8d06
--- /dev/null
+++ b/docs/command-reference/generic/delex.md
@@ -0,0 +1,186 @@
+---
+description: Learn how to use Redis DELEX command for conditional key deletion.
+---
+
+import PageTitle from '@site/src/components/PageTitle';
+
+# DELEX
+
+
+
+## Introduction
+
+The `DELEX` command provides conditional key deletion based on value or digest comparison.
+It enables atomic conditional operations, allowing you to delete keys only when specific conditions are met.
+This is useful for implementing optimistic locking patterns and ensuring data consistency.
+
+## Syntax
+
+```shell
+DELEX key [IFEQ value | IFNE value | IFDEQ digest | IFDNE digest]
+```
+
+**Time complexity:**
+- O(1) when no condition is specified
+- O(min(M,N)) for value comparisons (IFEQ/IFNE) where M and N are value lengths
+- O(N) for digest comparisons (IFDEQ/IFDNE) where N is the length of the stored string value
+
+**ACL categories:** @keyspace, @write, @fast
+
+## Parameter Explanations
+
+- `key`: The key to conditionally delete. Must be a string type for conditional operations.
+- `IFEQ value` (optional): Delete the key only if its value matches the provided value.
+- `IFNE value` (optional): Delete the key only if its value differs from the provided value.
+- `IFDEQ digest` (optional): Delete the key only if its digest matches the provided digest (16-character hex string).
+- `IFDNE digest` (optional): Delete the key only if its digest differs from the provided digest (16-character hex string).
+
+## Return Values
+
+- Returns `1` if the key was deleted.
+- Returns `0` if the key was not deleted (condition not met or key doesn't exist).
+
+## Code Examples
+
+### Basic DELEX Without Condition
+
+Without a condition, `DELEX` behaves like the standard [`DEL`](./del.md) command:
+
+```shell
+dragonfly$> SET mykey "hello"
+OK
+dragonfly$> DELEX mykey
+(integer) 1
+dragonfly$> EXISTS mykey
+(integer) 0
+```
+
+### DELEX with IFEQ (Delete If Equal)
+
+Delete the key only if the value matches:
+
+```shell
+dragonfly$> SET mykey "hello"
+OK
+dragonfly$> DELEX mykey IFEQ "hello"
+(integer) 1
+
+dragonfly$> SET mykey "hello"
+OK
+dragonfly$> DELEX mykey IFEQ "world"
+(integer) 0
+dragonfly$> GET mykey
+"hello"
+```
+
+### DELEX with IFNE (Delete If Not Equal)
+
+Delete the key only if the value differs:
+
+```shell
+dragonfly$> SET mykey "hello"
+OK
+dragonfly$> DELEX mykey IFNE "world"
+(integer) 1
+
+dragonfly$> SET mykey "hello"
+OK
+dragonfly$> DELEX mykey IFNE "hello"
+(integer) 0
+dragonfly$> GET mykey
+"hello"
+```
+
+### DELEX with IFDEQ (Delete If Digest Equal)
+
+Delete the key only if the digest matches:
+
+```shell
+dragonfly$> SET mykey "test"
+OK
+dragonfly$> DIGEST mykey
+"a1b2c3d4e5f67890"
+dragonfly$> DELEX mykey IFDEQ "a1b2c3d4e5f67890"
+(integer) 1
+
+dragonfly$> SET mykey "test"
+OK
+dragonfly$> DELEX mykey IFDEQ "0000000000000000"
+(integer) 0
+dragonfly$> GET mykey
+"test"
+```
+
+### DELEX with IFDNE (Delete If Digest Not Equal)
+
+Delete the key only if the digest differs:
+
+```shell
+dragonfly$> SET mykey "test"
+OK
+dragonfly$> DIGEST mykey
+"a1b2c3d4e5f67890"
+dragonfly$> DELEX mykey IFDNE "0000000000000000"
+(integer) 1
+
+dragonfly$> SET mykey "test"
+OK
+dragonfly$> DELEX mykey IFDNE "a1b2c3d4e5f67890"
+(integer) 0
+dragonfly$> GET mykey
+"test"
+```
+
+### Optimistic Locking Pattern
+
+Use `DELEX` for optimistic locking to ensure data hasn't changed:
+
+```shell
+dragonfly$> SET counter "100"
+OK
+dragonfly$> DIGEST counter
+"d4f3c8b2a1e6f7d9"
+
+# Later, delete only if the value hasn't changed
+dragonfly$> DELEX counter IFDEQ "d4f3c8b2a1e6f7d9"
+(integer) 1
+```
+
+## Best Practices
+
+- Use `DELEX` with digest comparisons (`IFDEQ`/`IFDNE`) for efficient optimistic locking without transferring full values.
+- Use value comparisons (`IFEQ`/`IFNE`) when you need exact value matching.
+- Always check the return value to determine if the deletion was successful.
+- For optimistic locking, compute the digest first with [`DIGEST`](../strings/digest.md), then use `DELEX IFDEQ` to ensure atomicity.
+
+## Common Mistakes
+
+- Providing only a condition without a value/digest (e.g., `DELEX key IFEQ`) will result in a syntax error.
+- Using `DELEX` with conditional options on non-string keys will result in a `WRONGTYPE` error.
+- Forgetting that `DELEX` returns `0` when the condition is not met, not an error.
+
+## FAQs
+
+### What happens if the key doesn't exist?
+
+If the key doesn't exist, `DELEX` returns `0` regardless of the condition specified.
+
+### Can DELEX be used with non-string values?
+
+For basic `DELEX key` without conditions, yes. However, conditional operations (IFEQ, IFNE, IFDEQ, IFDNE) only work with string values.
+
+### Is DELEX atomic?
+
+Yes, `DELEX` is atomic. The check and delete operation happens as a single atomic operation within Dragonfly's transaction framework.
+
+### Is DELEX replicated?
+
+Yes, `DELEX` operations are journaled and replicated to replicas, ensuring consistency across your cluster.
+
+### How is DELEX different from DEL?
+
+`DELEX` extends [`DEL`](./del.md) by adding conditional deletion based on value or digest matching. Without conditions, `DELEX key` behaves identically to `DEL key`.
+
+### Is DELEX compatible with Redis?
+
+Yes, `DELEX` is compatible with Redis 8.4.0 and later versions.
diff --git a/docs/command-reference/strings/digest.md b/docs/command-reference/strings/digest.md
new file mode 100644
index 00000000..b50bcfc0
--- /dev/null
+++ b/docs/command-reference/strings/digest.md
@@ -0,0 +1,123 @@
+---
+description: Learn how to use Redis DIGEST command to compute hash digest of string values.
+---
+
+import PageTitle from '@site/src/components/PageTitle';
+
+# DIGEST
+
+
+
+## Introduction
+
+The `DIGEST` command returns a hash digest for the value stored at a specified key.
+It uses the XXH3 hashing algorithm to compute a 64-bit hash and returns it as a 16-character hexadecimal string.
+This command is useful for comparing values without transferring the full content, implementing checksums, or detecting changes.
+
+## Syntax
+
+```shell
+DIGEST key
+```
+
+**Time complexity:** O(N) where N is the length of the string value
+
+**ACL categories:** @read, @string, @fast
+
+## Parameter Explanations
+
+- `key`: The key whose value should be hashed. Must be a string type.
+
+## Return Values
+
+- Returns a 16-character hexadecimal string representing the XXH3 64-bit hash of the value.
+- Returns `nil` if the key does not exist.
+- Returns an error if the key exists but holds a non-string value type.
+
+## Code Examples
+
+### Basic Example
+
+Compute digest of a string value:
+
+```shell
+dragonfly$> SET mykey "Hello, Dragonfly!"
+OK
+dragonfly$> DIGEST mykey
+"d4f3c8b2a1e6f7d9"
+```
+
+### Non-Existent Key
+
+If the key does not exist, `DIGEST` returns `nil`:
+
+```shell
+dragonfly$> DIGEST non_existent_key
+(nil)
+```
+
+### Digest Consistency
+
+The same value always produces the same digest:
+
+```shell
+dragonfly$> SET key1 "test"
+OK
+dragonfly$> SET key2 "test"
+OK
+dragonfly$> DIGEST key1
+"a1b2c3d4e5f67890"
+dragonfly$> DIGEST key2
+"a1b2c3d4e5f67890"
+```
+
+### Different Values Produce Different Digests
+
+```shell
+dragonfly$> SET key1 "hello"
+OK
+dragonfly$> SET key2 "world"
+OK
+dragonfly$> DIGEST key1
+"1234567890abcdef"
+dragonfly$> DIGEST key2
+"fedcba0987654321"
+```
+
+### Error on Wrong Type
+
+```shell
+dragonfly$> LPUSH mylist "item"
+(integer) 1
+dragonfly$> DIGEST mylist
+(error) WRONGTYPE Operation against a key holding the wrong kind of value
+```
+
+## Best Practices
+
+- Use `DIGEST` to compare values efficiently without transferring full content over the network.
+- Implement change detection mechanisms by storing and comparing digests.
+- Use with [`DELEX`](../generic/delex.md) `IFDEQ`/`IFDNE` for conditional deletions based on digest matching.
+
+## Common Mistakes
+
+- Attempting to use `DIGEST` on non-string keys will result in a `WRONGTYPE` error.
+- Assuming different values might produce the same digest (hash collisions are extremely rare with XXH3).
+
+## FAQs
+
+### What hashing algorithm does DIGEST use?
+
+`DIGEST` uses the XXH3 algorithm, which is a fast, non-cryptographic hash function that produces a 64-bit hash value.
+
+### Is DIGEST suitable for cryptographic purposes?
+
+No, `DIGEST` uses XXH3 which is not a cryptographic hash function. For cryptographic purposes, use dedicated cryptographic hash functions.
+
+### Can DIGEST work with compressed or integer-encoded strings?
+
+Yes, `DIGEST` handles all string encodings including raw strings, integer-encoded strings, and compressed strings.
+
+### Is DIGEST compatible with Redis?
+
+Yes, `DIGEST` is compatible with Redis 8.4.0 and later versions.
diff --git a/src/components/CompatibilityTable/data.json b/src/components/CompatibilityTable/data.json
index 90a122f3..72254259 100644
--- a/src/components/CompatibilityTable/data.json
+++ b/src/components/CompatibilityTable/data.json
@@ -1 +1 @@
-[{"family":"Bitmap","command":"BITCOUNT","support":"Fully supported","notes":"We do not have external docs for any of these commands"} ,{"family":"Bitmap","command":"BITFIELD","support":"Unsupported","notes":null},{"family":"Bitmap","command":"BITFIELD_RO","support":"Unsupported","notes":null},{"family":"Bitmap","command":"BITOP","support":"Fully supported","notes":null},{"family":"Bitmap","command":"BITPOS","support":"Fully supported","notes":null},{"family":"Bitmap","command":"GETBIT","support":"Fully supported","notes":null},{"family":"Bitmap","command":"SETBIT","support":"Fully supported","notes":null},{"family":"Cluster","command":"ASKING","support":"Unsupported","notes":"All unsupported (with no comments): our cluster management commands are different from those of Redis"},{"family":"Cluster","command":"CLUSTER ADDSLOTS","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER ADDSLOTSRANGE","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER BUMPEPOCH","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER COUNT-FAILURE-REPORTS","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER COUNTKEYSINSLOT","support":"Unsupported","notes":"We could implement this in the future"},{"family":"Cluster","command":"CLUSTER DELSLOTS","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER DELSLOTRANGE","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER FAILOVER","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER FLUSHSLOTS","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER FORGET","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER GETKEYSINSLOT","support":"Unsupported","notes":"We could implement this in the future"},{"family":"Cluster","command":"CLUSTER INFO","support":"Fully supported","notes":null},{"family":"Cluster","command":"CLUSTER KEYSLOT","support":"Unsupported","notes":"We could implement this in the future"},{"family":"Cluster","command":"CLUSTER LINKS","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER MEET","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER MYID","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER MYSHARDID","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER NODES","support":"Fully supported","notes":null},{"family":"Cluster","command":"CLUSTER REPLICAS","support":"Unsupported","notes":"We could implement this in the future"},{"family":"Cluster","command":"CLUSTER REPLICATE","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER RESET","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER SAVECONFIG","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER SET-CONFIG-EPOCH","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER SETSLOT","support":"Unsupported","notes":null},{"family":"Cluster","command":"CLUSTER SHARDS","support":"Fully supported","notes":null},{"family":"Cluster","command":"CLUSTER SLAVES","support":"Unsupported","notes":"Deprecated as of Redis 5.0"},{"family":"Cluster","command":"CLUSTER SLOTS","support":"Fully supported","notes":null},{"family":"Cluster","command":"READONLY","support":"Unsupported","notes":"We could implement this in the future"},{"family":"Cluster","command":"READWRITE","support":"Unsupported","notes":"We could implement this in the future"},{"family":"Connection","command":"AUTH","support":"Partially supported","notes":"Optional UserName is not allowed"},{"family":"Connection","command":"CLIENT CACHING","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT GETNAME","support":"Fully supported","notes":null},{"family":"Connection","command":"CLIENT GETREDIR","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT ID","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT INFO","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT KILL","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT LIST","support":"Fully supported","notes":null},{"family":"Connection","command":"CLIENT NO-EVICT","support":"Unsupported","notes":"Client Eviction"},{"family":"Connection","command":"CLIENT NO-TOUCH","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT PAUSE","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT REPLY","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT SETINFO","support":"Unsupported","notes":"INFO/SETINFO are not supported"},{"family":"Connection","command":"CLIENT SETNAME","support":"Fully supported","notes":null},{"family":"Connection","command":"CLIENT TRACKING","support":"Unsupported","notes":"Server assisted client side caching"},{"family":"Connection","command":"CLIENT TRACKINGINFO","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT UNBLOCK","support":"Unsupported","notes":null},{"family":"Connection","command":"CLIENT UNPAUSE","support":"Unsupported","notes":null},{"family":"Connection","command":"ECHO","support":"Fully supported","notes":null},{"family":"Connection","command":"HELLO","support":"Partially supported","notes":"No support for protocol changeover"},{"family":"Connection","command":"PING","support":"Fully supported","notes":null},{"family":"Connection","command":"QUIT","support":"Fully supported","notes":"Redis seems to deprecate it from 7.2.0"},{"family":"Connection","command":"RESET","support":"Unsupported","notes":null},{"family":"Connection","command":"SELECT","support":"Fully supported","notes":null},{"family":"Generic","command":"COPY","support":"Unsupported","notes":null},{"family":"Generic","command":"DEL","support":"Fully supported","notes":null},{"family":"Generic","command":"DUMP","support":"Fully supported","notes":null},{"family":"Generic","command":"EXISTS","support":"Fully supported","notes":null},{"family":"Generic","command":"EXPIRE","support":"Fully supported","notes":"support version 6"},{"family":"Generic","command":"EXPIREAT","support":"Fully supported","notes":"support version 6"},{"family":"Generic","command":"EXPIRETIME","support":"Unsupported","notes":"since 7.0"},{"family":"Generic","command":"KEYS","support":"Fully supported","notes":null},{"family":"Generic","command":"MIGRATE","support":"Unsupported","notes":null},{"family":"Generic","command":"MOVE","support":"Fully supported","notes":null},{"family":"Generic","command":"OBJECT ENCODING","support":"Unsupported","notes":null},{"family":"Generic","command":"OBJECT FREQ","support":"Unsupported","notes":null},{"family":"Generic","command":"OBJECT IDLETIME","support":"Unsupported","notes":null},{"family":"Generic","command":"OBJECT REFCOUNT","support":"Unsupported","notes":null},{"family":"Generic","command":"PRESIST","support":"Fully supported","notes":null},{"family":"Generic","command":"PEXPIRE","support":"Fully supported","notes":"support version 6"},{"family":"Generic","command":"PEXPIREAT","support":"Fully supported","notes":"support version 6"},{"family":"Generic","command":"PEXPIRETIME","support":"Unsupported","notes":"since 7.0"},{"family":"Generic","command":"PTTL","support":"Fully supported","notes":null},{"family":"Generic","command":"RANDOMKEY","support":"Unsupported","notes":null},{"family":"Generic","command":"RENAME","support":"Fully supported","notes":null},{"family":"Generic","command":"RENAMENX","support":"Fully supported","notes":null},{"family":"Generic","command":"RESTORE","support":"Partially supported","notes":"IDLETIME and FREQ options not supported"},{"family":"Generic","command":"SCAN","support":"Fully supported","notes":null},{"family":"Generic","command":"SORT","support":"Partially supported","notes":"[BY pattern], [GET pattern], [STORE dest] options not supported"},{"family":"Generic","command":"SORT_RO","support":"Unsupported","notes":null},{"family":"Generic","command":"TOUCH","support":"Fully supported","notes":null},{"family":"Generic","command":"TTL","support":"Fully supported","notes":null},{"family":"Generic","command":"TYPE","support":"Fully supported","notes":null},{"family":"Generic","command":"UNLINK","support":"Fully supported","notes":null},{"family":"Generic","command":"WAIT","support":"Unsupported","notes":null},{"family":"Generic","command":"WAITAOF","support":"Unsupported","notes":null},{"family":"Geo","command":"GEOADD","support":"Unsupported","notes":"https://github.com/dragonflydb/dragonfly/issues/1135"},{"family":"Geo","command":"GEODIST","support":"Unsupported","notes":null},{"family":"Geo","command":"GEOHASH","support":"Unsupported","notes":null},{"family":"Geo","command":"GEOPOS","support":"Unsupported","notes":null},{"family":"Geo","command":"GEORADIUS","support":"Unsupported","notes":null},{"family":"Geo","command":"GEORADIUS_RO","support":"Unsupported","notes":null},{"family":"Geo","command":"GEORADIUSBYMEMBER","support":"Unsupported","notes":null},{"family":"Geo","command":"GEORADIUSBYMEMBER_RO","support":"Unsupported","notes":null},{"family":"Geo","command":"GEOSEARCH","support":"Unsupported","notes":null},{"family":"Geo","command":"GEOSEARCHSTORE","support":"Unsupported","notes":null},{"family":"Hash","command":"HDEL","support":"Fully supported","notes":null},{"family":"Hash","command":"HEXISTS","support":"Fully supported","notes":null},{"family":"Hash","command":"HGET","support":"Fully supported","notes":null},{"family":"Hash","command":"HGETALL","support":"Fully supported","notes":null},{"family":"Hash","command":"HINCRBY","support":"Fully supported","notes":null},{"family":"Hash","command":"HINCRBYFLOAT","support":"Fully supported","notes":null},{"family":"Hash","command":"HKEYS","support":"Fully supported","notes":null},{"family":"Hash","command":"HLEN","support":"Fully supported","notes":null},{"family":"Hash","command":"HMGET","support":"Fully supported","notes":null},{"family":"Hash","command":"HMSET","support":"Unsupported","notes":"Its deprecated since 4.0"},{"family":"Hash","command":"HRANDFIELD","support":"Partially supported","notes":"Don't support COUNT and WITHVALUES flags"},{"family":"Hash","command":"HSCAN","support":"Fully supported","notes":null},{"family":"Hash","command":"HSET","support":"Fully supported","notes":null},{"family":"Hash","command":"HSETNX","support":"Fully supported","notes":null},{"family":"Hash","command":"HSTRLEN","support":"Fully supported","notes":null},{"family":"Hash","command":"HVALS","support":"Fully supported","notes":null},{"family":"HyperLogLog","command":"PFADD","support":"Fully supported","notes":null},{"family":"HyperLogLog","command":"PFMERGE","support":"Fully supported","notes":null},{"family":"HyperLogLog","command":"PFCOUNT","support":"Fully supported","notes":null},{"family":"HyperLogLog","command":"PFDEBUG","support":"Unsupported","notes":"Debug command"},{"family":"HyperLogLog","command":"PFSELFTEST","support":"Unsupported","notes":"Debug command"},{"family":"List","command":"BRPOPLPUSH","support":"Fully supported","notes":null},{"family":"List","command":"BRPOP","support":"Fully supported","notes":null},{"family":"List","command":"BLMPOP","support":"Unsupported","notes":null},{"family":"List","command":"LINDEX","support":"Fully supported","notes":null},{"family":"List","command":"LINSERT","support":"Fully supported","notes":null},{"family":"List","command":"LLEN","support":"Fully supported","notes":null},{"family":"List","command":"LMOVE","support":"Fully supported","notes":null},{"family":"List","command":"LPUSH","support":"Fully supported","notes":null},{"family":"List","command":"LRANGE","support":"Fully supported","notes":null},{"family":"List","command":"LSET","support":"Fully supported","notes":null},{"family":"List","command":"LTRIM","support":"Fully supported","notes":null},{"family":"List","command":"RPOPLPUSH","support":"Fully supported","notes":null},{"family":"List","command":"RPUSH","support":"Fully supported","notes":null},{"family":"List","command":"RPUSHX","support":"Fully supported","notes":null},{"family":"List","command":"RPOP","support":"Fully supported","notes":null},{"family":"List","command":"LREM","support":"Fully supported","notes":null},{"family":"List","command":"LPUSHX","support":"Fully supported","notes":null},{"family":"List","command":"LMPOP","support":"Fully supported","notes":null},{"family":"List","command":"LPOS","support":"Fully supported","notes":null},{"family":"List","command":"LPOP","support":"Fully supported","notes":null},{"family":"List","command":"BLPOP","support":"Fully supported","notes":null},{"family":"List","command":"BLMOVE","support":"Fully supported","notes":null},{"family":"PubSub","command":"PSUBSCRIBE","support":"Fully supported","notes":null},{"family":"PubSub","command":"PUBLISH","support":"Fully supported","notes":null},{"family":"PubSub","command":"PUBSUB CHANNELS","support":"Fully supported","notes":null},{"family":"PubSub","command":"PUBSUB NUMPAT","support":"Fully supported","notes":null},{"family":"PubSub","command":"PUBSUB NUMSUB","support":"Fully supported","notes":null},{"family":"PubSub","command":"PUBSUB SHARDCHANNELS","support":"Fully supported","notes":null},{"family":"PubSub","command":"PUBSUB SHARDNUMSUB","support":"Fully supported","notes":null},{"family":"PubSub","command":"PUNSUBSCRIBE","support":"Fully supported","notes":null},{"family":"PubSub","command":"SPUBLISH","support":"Unsupported","notes":"Sharded Pubsub is in Cluster Mode"},{"family":"PubSub","command":"SSUBSCRIBE","support":"Unsupported","notes":"Sharded Pubsub is in Cluster Mode"},{"family":"PubSub","command":"SUNSUBSCRIBE","support":"Unsupported","notes":"Sharded Pubsub is in Cluster Mode"},{"family":"PubSub","command":"SUBSCRIBE","support":"Fully supported","notes":null},{"family":"PubSub","command":"UNSUBSCRIBE","support":"Fully supported","notes":null},{"family":"Scripting","command":"EVAL","support":"Fully supported","notes":null},{"family":"Scripting","command":"EVAL_RO","support":"Unsupported","notes":"since 7.0"},{"family":"Scripting","command":"EVALSHA","support":"Fully supported","notes":null},{"family":"Scripting","command":"EVALSHA_RO","support":"Unsupported","notes":null},{"family":"Scripting","command":"FCALL","support":"Unsupported","notes":null},{"family":"Scripting","command":"FUNCTION FLUSH","support":"Unsupported","notes":"We just reply OK"},{"family":"Scripting","command":"FUNCTION *","support":"Unsupported","notes":"We don't support the new functions feature"},{"family":"Scripting","command":"SCRIPT LOAD","support":"Fully supported","notes":null},{"family":"Scripting","command":"SCRIPT EXISTS","support":"Fully supported","notes":null},{"family":"Scripting","command":"SCRIPT FLUSH","support":"Unsupported","notes":null},{"family":"Scripting","command":"SCRIPT DEBUG","support":"Unsupported","notes":null},{"family":"Scripting","command":"SCRIPT KILL","support":"Unsupported","notes":null},{"family":"Server","command":"ACL CAT","support":"Unsupported","notes":null},{"family":"Server","command":"ACL DELUSER","support":"Unsupported","notes":null},{"family":"Server","command":"ACL DRYRUN","support":"Unsupported","notes":null},{"family":"Server","command":"ACL GENPASS","support":"Unsupported","notes":null},{"family":"Server","command":"ACL GETUSER","support":"Unsupported","notes":null},{"family":"Server","command":"ACL LIST","support":"Unsupported","notes":null},{"family":"Server","command":"ACL LOAD","support":"Unsupported","notes":null},{"family":"Server","command":"ACL LOG","support":"Unsupported","notes":null},{"family":"Server","command":"ACL SAVE","support":"Unsupported","notes":null},{"family":"Server","command":"ACL SETUSER","support":"Unsupported","notes":null},{"family":"Server","command":"ACL USERS","support":"Unsupported","notes":null},{"family":"Server","command":"ACL WHOAMI","support":"Unsupported","notes":null},{"family":"Server","command":"BGREWRITEAOF","support":"Unsupported","notes":null},{"family":"Server","command":"BGSAVE","support":"Fully supported","notes":null},{"family":"Server","command":"COMMAND","support":"Fully supported","notes":"support version 6"},{"family":"Server","command":"COMMAND COUNT","support":"Fully supported","notes":null},{"family":"Server","command":"COMMAND DOCS","support":"Unsupported","notes":null},{"family":"Server","command":"COMMAND GETKEYS","support":"Unsupported","notes":null},{"family":"Server","command":"COMMAND GETKEYSANDFLAGS","support":"Unsupported","notes":null},{"family":"Server","command":"COMMAND INFO","support":"Unsupported","notes":null},{"family":"Server","command":"COMMAND LIST","support":"Unsupported","notes":null},{"family":"Server","command":"CONFIG GET","support":"Unsupported","notes":null},{"family":"Server","command":"CONFIG RESETSTAT","support":"Fully supported","notes":null},{"family":"Server","command":"CONFIG REWRITE","support":"Unsupported","notes":null},{"family":"Server","command":"CONFIG SET","support":"Unsupported","notes":null},{"family":"Server","command":"DBSIZE","support":"Fully supported","notes":null},{"family":"Server","command":"FAILOVER","support":"Unsupported","notes":null},{"family":"Server","command":"FLUSHALL","support":"Fully supported","notes":null},{"family":"Server","command":"FLUSHDB","support":"Fully supported","notes":null},{"family":"Server","command":"INFO","support":"Fully supported","notes":null},{"family":"Server","command":"LASTSAVE","support":"Fully supported","notes":null},{"family":"Server","command":"LATENCY DOCTOR","support":"Unsupported","notes":null},{"family":"Server","command":"LATENCY GRAPH","support":"Unsupported","notes":null},{"family":"Server","command":"LATENCY HISTOGRAM","support":"Unsupported","notes":null},{"family":"Server","command":"LATENCY HISTORY","support":"Unsupported","notes":null},{"family":"Server","command":"LATENCY LATEST","support":"Unsupported","notes":null},{"family":"Server","command":"LATENCY RESET","support":"Unsupported","notes":null},{"family":"Server","command":"LOLWUT","support":"Unsupported","notes":null},{"family":"Server","command":"MEMORY DOCTOR","support":"Unsupported","notes":null},{"family":"Server","command":"MEMORY MALLOC-STATS","support":"Fully supported","notes":null},{"family":"Server","command":"MEMORY PURGE","support":"Unsupported","notes":null},{"family":"Server","command":"MEMORY STATS","support":"Unsupported","notes":null},{"family":"Server","command":"MEMORY USAGE","support":"Unsupported","notes":null},{"family":"Server","command":"MODULE LIST","support":"Unsupported","notes":null},{"family":"Server","command":"MODULE LOAD","support":"Unsupported","notes":null},{"family":"Server","command":"MODULE LOADEX","support":"Unsupported","notes":null},{"family":"Server","command":"MODULE UNLOAD","support":"Unsupported","notes":null},{"family":"Server","command":"MONITOR","support":"Fully supported","notes":null},{"family":"Server","command":"REPLICAOF","support":"Fully supported","notes":null},{"family":"Server","command":"ROLE","support":"Fully supported","notes":null},{"family":"Server","command":"SAVE","support":"Fully supported","notes":null},{"family":"Server","command":"SHUTDOWN","support":"Fully supported","notes":"support version 6"},{"family":"Server","command":"SLAVEOF","support":"Fully supported","notes":null},{"family":"Server","command":"SLOWLOG GET","support":"Unsupported","notes":null},{"family":"Server","command":"SLOWLOG LEN","support":"Unsupported","notes":null},{"family":"Server","command":"SLOWLOG RESET","support":"Unsupported","notes":null},{"family":"Server","command":"SWAPDB","support":"Unsupported","notes":null},{"family":"Server","command":"TIME","support":"Fully supported","notes":null},{"family":"Set","command":"SADD","support":"Fully supported","notes":null},{"family":"Set","command":"SCARD","support":"Fully supported","notes":null},{"family":"Set","command":"SDIFF","support":"Fully supported","notes":null},{"family":"Set","command":"SDIFFSTORE","support":"Fully supported","notes":null},{"family":"Set","command":"SINTER","support":"Fully supported","notes":null},{"family":"Set","command":"SINTERCARD","support":"Unsupported","notes":"API 7.0"},{"family":"Set","command":"SINTERSTORE","support":"Fully supported","notes":null},{"family":"Set","command":"SISMEMBER","support":"Fully supported","notes":null},{"family":"Set","command":"SMEMBERS","support":"Fully supported","notes":null},{"family":"Set","command":"SMISMEMBER","support":"Fully supported","notes":null},{"family":"Set","command":"SMOVE","support":"Fully supported","notes":null},{"family":"Set","command":"SPOP","support":"Fully supported","notes":null},{"family":"Set","command":"SRANDMEMBER","support":"Unsupported","notes":"API 1.0"},{"family":"Set","command":"SREM","support":"Fully supported","notes":null},{"family":"Set","command":"SSCAN","support":"Fully supported","notes":null},{"family":"Set","command":"SUNION","support":"Fully supported","notes":null},{"family":"Set","command":"SUNIONSTORE","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"BZMPOP","support":"Unsupported","notes":"API 7.0"},{"family":"Sorted Set","command":"BZPOPMZX","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"BZPOPMIN","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZADD","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZCARD","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZCOUNT","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZDIFF","support":"Unsupported","notes":"API 6.2.0"},{"family":"Sorted Set","command":"ZDIFFSTORE","support":"Unsupported","notes":"API 6.2.0"},{"family":"Sorted Set","command":"ZINCRBY","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZINTER","support":"Unsupported","notes":"API 6.2.0"},{"family":"Sorted Set","command":"ZINTERCARD","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZINTERSTORE","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZLEXCOUNT","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZMPOP","support":"Unsupported","notes":"API 7.0.0"},{"family":"Sorted Set","command":"ZMSCORE","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZPOPMAX","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZPOPMIN","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZRANDMEMBER","support":"Unsupported","notes":"API 6.2.0"},{"family":"Sorted Set","command":"ZRANGE","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZRANGEBYLEX","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZRANGEBYSCORE","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZRANK","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZREM","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZREMRANGEBYLEX","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZREMRANGEBYRANK","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZREMRANGEBYSCORE","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZREVRANGE","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZREVRANGEBYLEX","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZREVRANGEBYSCORE","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZREVRANK","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZSCAN","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZSCORE","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZUNION","support":"Fully supported","notes":null},{"family":"Sorted Set","command":"ZUNIONSTORE","support":"Fully supported","notes":null},{"family":"Stream","command":"XAUTOCLAIM","support":"Unsupported","notes":null},{"family":"Stream","command":"XCLAIM","support":"TBD","notes":null},{"family":"Stream","command":"XREAD","support":"Fully supported","notes":null},{"family":"Stream","command":"XADD","support":"Fully supported","notes":null},{"family":"Stream","command":"XPENDING","support":"TBD","notes":null},{"family":"Stream","command":"XGROUP","support":"Partially supported","notes":null},{"family":"Stream","command":"XRANGE","support":"Fully supported","notes":null},{"family":"Stream","command":"XSETID","support":"Fully supported","notes":null},{"family":"Stream","command":"XREVRANGE","support":"Fully supported","notes":null},{"family":"Stream","command":"XREADGROUP","support":"Unsupported","notes":null},{"family":"Stream","command":"XDEL","support":"Fully supported","notes":null},{"family":"Stream","command":"XINFO","support":"Partially supported","notes":"does not support CONSUMERS and STREAMS options yet"},{"family":"Stream","command":"XACK","support":"Unsupported","notes":null},{"family":"Stream","command":"XTRIM","support":"Partially supported","notes":null},{"family":"String","command":"APPEND","support":"Fully supported","notes":null},{"family":"String","command":"DECR","support":"Fully supported","notes":null},{"family":"String","command":"DECRBY","support":"Fully supported","notes":null},{"family":"String","command":"GET","support":"Fully supported","notes":null},{"family":"String","command":"GETDEL","support":"Fully supported","notes":null},{"family":"String","command":"GETEX","support":"Fully supported","notes":null},{"family":"String","command":"GETRANGE","support":"Fully supported","notes":null},{"family":"String","command":"GETSET","support":"Fully supported","notes":null},{"family":"String","command":"INCR","support":"Fully supported","notes":null},{"family":"String","command":"INCRBY","support":"Fully supported","notes":null},{"family":"String","command":"INCRBYFLOAT","support":"Fully supported","notes":null},{"family":"String","command":"LCS","support":"Unsupported","notes":"API 7.0.0"},{"family":"String","command":"MGET","support":"Fully supported","notes":null},{"family":"String","command":"MSET","support":"Fully supported","notes":null},{"family":"String","command":"MSETNX","support":"Fully supported","notes":null},{"family":"String","command":"PSETEX","support":"Fully supported","notes":null},{"family":"String","command":"SET","support":"Fully supported","notes":null},{"family":"String","command":"SETEX","support":"Fully supported","notes":null},{"family":"String","command":"SETNX","support":"Fully supported","notes":null},{"family":"String","command":"SETRANGE","support":"Fully supported","notes":null},{"family":"String","command":"STRLEN","support":"Fully supported","notes":null},{"family":"String","command":"SUBSTR","support":"Fully supported","notes":null},{"family":"Transactions","command":"DISCARD","support":"Fully supported","notes":null},{"family":"Transactions","command":"EXEC","support":"Fully supported","notes":null},{"family":"Transactions","command":"MULTI","support":"Fully supported","notes":null},{"family":"Transactions","command":"UNWATCH","support":"Fully supported","notes":null},{"family":"Transactions","command":"WATCH","support":"Fully supported","notes":null},{"family":"Bloom Filter","command":"TBD","support":"Unsupported","notes":null},{"family":"Cuckoo Filter","command":"TBD","support":"Unsupported","notes":null},{"family":"Count-min Sketch","command":"TBD","support":"Unsupported","notes":null},{"family":"Graph","command":"TBD","support":"Unsupported","notes":null},{"family":"JSON","command":"ARRAPPEND","support":"Fully supported","notes":null},{"family":"JSON","command":"ARRINDEX","support":"Fully supported","notes":null},{"family":"JSON","command":"ARRINSERT","support":"Fully supported","notes":null},{"family":"JSON","command":"ARRLEN","support":"Fully supported","notes":null},{"family":"JSON","command":"ARRPOP","support":"Fully supported","notes":null},{"family":"JSON","command":"ARRTRIM","support":"Fully supported","notes":null},{"family":"JSON","command":"CLEAR","support":"Fully supported","notes":null},{"family":"JSON","command":"DEBUG","support":"Fully supported","notes":null},{"family":"JSON","command":"DEBUG MEMORY","support":"Unsupported","notes":"Report a value's memory usage in bytes"},{"family":"JSON","command":"DEL","support":"Fully supported","notes":null},{"family":"JSON","command":"FORGET","support":"Fully supported","notes":null},{"family":"JSON","command":"GET","support":"Fully supported","notes":null},{"family":"JSON","command":"MERGE","support":"Unsupported","notes":null},{"family":"JSON","command":"MGET","support":"Fully supported","notes":null},{"family":"JSON","command":"MSET","support":"Unsupported","notes":null},{"family":"JSON","command":"NUMINCRBY","support":"Fully supported","notes":null},{"family":"JSON","command":"NUMMULTBY","support":"Fully supported","notes":null},{"family":"JSON","command":"OBJKEYS","support":"Fully supported","notes":null},{"family":"JSON","command":"OBJLEN","support":"Fully supported","notes":null},{"family":"JSON","command":"RESP","support":"Fully supported","notes":null},{"family":"JSON","command":"SET","support":"Fully supported","notes":null},{"family":"JSON","command":"STRAPPEND","support":"Fully supported","notes":null},{"family":"JSON","command":"STRLEN","support":"Fully supported","notes":null},{"family":"JSON","command":"TOGGLE","support":"Fully supported","notes":null},{"family":"JSON","command":"TYPE","support":"Fully supported","notes":null},{"family":"Search","command":"FT.CREATE","support":"Unsupported","notes":null},{"family":"Search","command":"FT.SEARCH","support":"Unsupported","notes":null},{"family":"Search","command":"FT.SYNUPDATE","support":"Unsupported","notes":null},{"family":"Search","command":"FT.SYNDUMP","support":"Unsupported","notes":null},{"family":"Auto Suggest","command":"TBD","support":"Unsupported","notes":null},{"family":"T-Digest","command":"TBD","support":"Unsupported","notes":null},{"family":"Time Series","command":"TBD","support":"Unsupported","notes":null},{"family":"Top-K","command":"TBD","support":"Unsupported","notes":null}]
\ No newline at end of file
+[{"family": "Bitmap", "command": "BITCOUNT", "support": "Fully supported", "notes": "We do not have external docs for any of these commands"}, {"family": "Bitmap", "command": "BITFIELD", "support": "Unsupported", "notes": null}, {"family": "Bitmap", "command": "BITFIELD_RO", "support": "Unsupported", "notes": null}, {"family": "Bitmap", "command": "BITOP", "support": "Fully supported", "notes": null}, {"family": "Bitmap", "command": "BITPOS", "support": "Fully supported", "notes": null}, {"family": "Bitmap", "command": "GETBIT", "support": "Fully supported", "notes": null}, {"family": "Bitmap", "command": "SETBIT", "support": "Fully supported", "notes": null}, {"family": "Cluster", "command": "ASKING", "support": "Unsupported", "notes": "All unsupported (with no comments): our cluster management commands are different from those of Redis"}, {"family": "Cluster", "command": "CLUSTER ADDSLOTS", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER ADDSLOTSRANGE", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER BUMPEPOCH", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER COUNT-FAILURE-REPORTS", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER COUNTKEYSINSLOT", "support": "Unsupported", "notes": "We could implement this in the future"}, {"family": "Cluster", "command": "CLUSTER DELSLOTS", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER DELSLOTRANGE", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER FAILOVER", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER FLUSHSLOTS", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER FORGET", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER GETKEYSINSLOT", "support": "Unsupported", "notes": "We could implement this in the future"}, {"family": "Cluster", "command": "CLUSTER INFO", "support": "Fully supported", "notes": null}, {"family": "Cluster", "command": "CLUSTER KEYSLOT", "support": "Unsupported", "notes": "We could implement this in the future"}, {"family": "Cluster", "command": "CLUSTER LINKS", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER MEET", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER MYID", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER MYSHARDID", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER NODES", "support": "Fully supported", "notes": null}, {"family": "Cluster", "command": "CLUSTER REPLICAS", "support": "Unsupported", "notes": "We could implement this in the future"}, {"family": "Cluster", "command": "CLUSTER REPLICATE", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER RESET", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER SAVECONFIG", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER SET-CONFIG-EPOCH", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER SETSLOT", "support": "Unsupported", "notes": null}, {"family": "Cluster", "command": "CLUSTER SHARDS", "support": "Fully supported", "notes": null}, {"family": "Cluster", "command": "CLUSTER SLAVES", "support": "Unsupported", "notes": "Deprecated as of Redis 5.0"}, {"family": "Cluster", "command": "CLUSTER SLOTS", "support": "Fully supported", "notes": null}, {"family": "Cluster", "command": "READONLY", "support": "Unsupported", "notes": "We could implement this in the future"}, {"family": "Cluster", "command": "READWRITE", "support": "Unsupported", "notes": "We could implement this in the future"}, {"family": "Connection", "command": "AUTH", "support": "Partially supported", "notes": "Optional UserName is not allowed"}, {"family": "Connection", "command": "CLIENT CACHING", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT GETNAME", "support": "Fully supported", "notes": null}, {"family": "Connection", "command": "CLIENT GETREDIR", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT ID", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT INFO", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT KILL", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT LIST", "support": "Fully supported", "notes": null}, {"family": "Connection", "command": "CLIENT NO-EVICT", "support": "Unsupported", "notes": "Client Eviction"}, {"family": "Connection", "command": "CLIENT NO-TOUCH", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT PAUSE", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT REPLY", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT SETINFO", "support": "Unsupported", "notes": "INFO/SETINFO are not supported"}, {"family": "Connection", "command": "CLIENT SETNAME", "support": "Fully supported", "notes": null}, {"family": "Connection", "command": "CLIENT TRACKING", "support": "Unsupported", "notes": "Server assisted client side caching"}, {"family": "Connection", "command": "CLIENT TRACKINGINFO", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT UNBLOCK", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "CLIENT UNPAUSE", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "ECHO", "support": "Fully supported", "notes": null}, {"family": "Connection", "command": "HELLO", "support": "Partially supported", "notes": "No support for protocol changeover"}, {"family": "Connection", "command": "PING", "support": "Fully supported", "notes": null}, {"family": "Connection", "command": "QUIT", "support": "Fully supported", "notes": "Redis seems to deprecate it from 7.2.0"}, {"family": "Connection", "command": "RESET", "support": "Unsupported", "notes": null}, {"family": "Connection", "command": "SELECT", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "COPY", "support": "Unsupported", "notes": null}, {"family": "Generic", "command": "DEL", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "DELEX", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "DUMP", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "EXISTS", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "EXPIRE", "support": "Fully supported", "notes": "support version 6"}, {"family": "Generic", "command": "EXPIREAT", "support": "Fully supported", "notes": "support version 6"}, {"family": "Generic", "command": "EXPIRETIME", "support": "Unsupported", "notes": "since 7.0"}, {"family": "Generic", "command": "KEYS", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "MIGRATE", "support": "Unsupported", "notes": null}, {"family": "Generic", "command": "MOVE", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "OBJECT ENCODING", "support": "Unsupported", "notes": null}, {"family": "Generic", "command": "OBJECT FREQ", "support": "Unsupported", "notes": null}, {"family": "Generic", "command": "OBJECT IDLETIME", "support": "Unsupported", "notes": null}, {"family": "Generic", "command": "OBJECT REFCOUNT", "support": "Unsupported", "notes": null}, {"family": "Generic", "command": "PRESIST", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "PEXPIRE", "support": "Fully supported", "notes": "support version 6"}, {"family": "Generic", "command": "PEXPIREAT", "support": "Fully supported", "notes": "support version 6"}, {"family": "Generic", "command": "PEXPIRETIME", "support": "Unsupported", "notes": "since 7.0"}, {"family": "Generic", "command": "PTTL", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "RANDOMKEY", "support": "Unsupported", "notes": null}, {"family": "Generic", "command": "RENAME", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "RENAMENX", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "RESTORE", "support": "Partially supported", "notes": "IDLETIME and FREQ options not supported"}, {"family": "Generic", "command": "SCAN", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "SORT", "support": "Partially supported", "notes": "[BY pattern], [GET pattern], [STORE dest] options not supported"}, {"family": "Generic", "command": "SORT_RO", "support": "Unsupported", "notes": null}, {"family": "Generic", "command": "TOUCH", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "TTL", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "TYPE", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "UNLINK", "support": "Fully supported", "notes": null}, {"family": "Generic", "command": "WAIT", "support": "Unsupported", "notes": null}, {"family": "Generic", "command": "WAITAOF", "support": "Unsupported", "notes": null}, {"family": "Geo", "command": "GEOADD", "support": "Unsupported", "notes": "https://github.com/dragonflydb/dragonfly/issues/1135"}, {"family": "Geo", "command": "GEODIST", "support": "Unsupported", "notes": null}, {"family": "Geo", "command": "GEOHASH", "support": "Unsupported", "notes": null}, {"family": "Geo", "command": "GEOPOS", "support": "Unsupported", "notes": null}, {"family": "Geo", "command": "GEORADIUS", "support": "Unsupported", "notes": null}, {"family": "Geo", "command": "GEORADIUS_RO", "support": "Unsupported", "notes": null}, {"family": "Geo", "command": "GEORADIUSBYMEMBER", "support": "Unsupported", "notes": null}, {"family": "Geo", "command": "GEORADIUSBYMEMBER_RO", "support": "Unsupported", "notes": null}, {"family": "Geo", "command": "GEOSEARCH", "support": "Unsupported", "notes": null}, {"family": "Geo", "command": "GEOSEARCHSTORE", "support": "Unsupported", "notes": null}, {"family": "Hash", "command": "HDEL", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HEXISTS", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HGET", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HGETALL", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HINCRBY", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HINCRBYFLOAT", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HKEYS", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HLEN", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HMGET", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HMSET", "support": "Unsupported", "notes": "Its deprecated since 4.0"}, {"family": "Hash", "command": "HRANDFIELD", "support": "Partially supported", "notes": "Don't support COUNT and WITHVALUES flags"}, {"family": "Hash", "command": "HSCAN", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HSET", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HSETNX", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HSTRLEN", "support": "Fully supported", "notes": null}, {"family": "Hash", "command": "HVALS", "support": "Fully supported", "notes": null}, {"family": "HyperLogLog", "command": "PFADD", "support": "Fully supported", "notes": null}, {"family": "HyperLogLog", "command": "PFMERGE", "support": "Fully supported", "notes": null}, {"family": "HyperLogLog", "command": "PFCOUNT", "support": "Fully supported", "notes": null}, {"family": "HyperLogLog", "command": "PFDEBUG", "support": "Unsupported", "notes": "Debug command"}, {"family": "HyperLogLog", "command": "PFSELFTEST", "support": "Unsupported", "notes": "Debug command"}, {"family": "List", "command": "BRPOPLPUSH", "support": "Fully supported", "notes": null}, {"family": "List", "command": "BRPOP", "support": "Fully supported", "notes": null}, {"family": "List", "command": "BLMPOP", "support": "Unsupported", "notes": null}, {"family": "List", "command": "LINDEX", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LINSERT", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LLEN", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LMOVE", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LPUSH", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LRANGE", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LSET", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LTRIM", "support": "Fully supported", "notes": null}, {"family": "List", "command": "RPOPLPUSH", "support": "Fully supported", "notes": null}, {"family": "List", "command": "RPUSH", "support": "Fully supported", "notes": null}, {"family": "List", "command": "RPUSHX", "support": "Fully supported", "notes": null}, {"family": "List", "command": "RPOP", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LREM", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LPUSHX", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LMPOP", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LPOS", "support": "Fully supported", "notes": null}, {"family": "List", "command": "LPOP", "support": "Fully supported", "notes": null}, {"family": "List", "command": "BLPOP", "support": "Fully supported", "notes": null}, {"family": "List", "command": "BLMOVE", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "PSUBSCRIBE", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "PUBLISH", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "PUBSUB CHANNELS", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "PUBSUB NUMPAT", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "PUBSUB NUMSUB", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "PUBSUB SHARDCHANNELS", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "PUBSUB SHARDNUMSUB", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "PUNSUBSCRIBE", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "SPUBLISH", "support": "Unsupported", "notes": "Sharded Pubsub is in Cluster Mode"}, {"family": "PubSub", "command": "SSUBSCRIBE", "support": "Unsupported", "notes": "Sharded Pubsub is in Cluster Mode"}, {"family": "PubSub", "command": "SUNSUBSCRIBE", "support": "Unsupported", "notes": "Sharded Pubsub is in Cluster Mode"}, {"family": "PubSub", "command": "SUBSCRIBE", "support": "Fully supported", "notes": null}, {"family": "PubSub", "command": "UNSUBSCRIBE", "support": "Fully supported", "notes": null}, {"family": "Scripting", "command": "EVAL", "support": "Fully supported", "notes": null}, {"family": "Scripting", "command": "EVAL_RO", "support": "Unsupported", "notes": "since 7.0"}, {"family": "Scripting", "command": "EVALSHA", "support": "Fully supported", "notes": null}, {"family": "Scripting", "command": "EVALSHA_RO", "support": "Unsupported", "notes": null}, {"family": "Scripting", "command": "FCALL", "support": "Unsupported", "notes": null}, {"family": "Scripting", "command": "FUNCTION FLUSH", "support": "Unsupported", "notes": "We just reply OK"}, {"family": "Scripting", "command": "FUNCTION *", "support": "Unsupported", "notes": "We don't support the new functions feature"}, {"family": "Scripting", "command": "SCRIPT LOAD", "support": "Fully supported", "notes": null}, {"family": "Scripting", "command": "SCRIPT EXISTS", "support": "Fully supported", "notes": null}, {"family": "Scripting", "command": "SCRIPT FLUSH", "support": "Unsupported", "notes": null}, {"family": "Scripting", "command": "SCRIPT DEBUG", "support": "Unsupported", "notes": null}, {"family": "Scripting", "command": "SCRIPT KILL", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL CAT", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL DELUSER", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL DRYRUN", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL GENPASS", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL GETUSER", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL LIST", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL LOAD", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL LOG", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL SAVE", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL SETUSER", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL USERS", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "ACL WHOAMI", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "BGREWRITEAOF", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "BGSAVE", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "COMMAND", "support": "Fully supported", "notes": "support version 6"}, {"family": "Server", "command": "COMMAND COUNT", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "COMMAND DOCS", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "COMMAND GETKEYS", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "COMMAND GETKEYSANDFLAGS", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "COMMAND INFO", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "COMMAND LIST", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "CONFIG GET", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "CONFIG RESETSTAT", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "CONFIG REWRITE", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "CONFIG SET", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "DBSIZE", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "FAILOVER", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "FLUSHALL", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "FLUSHDB", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "INFO", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "LASTSAVE", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "LATENCY DOCTOR", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "LATENCY GRAPH", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "LATENCY HISTOGRAM", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "LATENCY HISTORY", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "LATENCY LATEST", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "LATENCY RESET", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "LOLWUT", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "MEMORY DOCTOR", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "MEMORY MALLOC-STATS", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "MEMORY PURGE", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "MEMORY STATS", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "MEMORY USAGE", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "MODULE LIST", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "MODULE LOAD", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "MODULE LOADEX", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "MODULE UNLOAD", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "MONITOR", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "REPLICAOF", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "ROLE", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "SAVE", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "SHUTDOWN", "support": "Fully supported", "notes": "support version 6"}, {"family": "Server", "command": "SLAVEOF", "support": "Fully supported", "notes": null}, {"family": "Server", "command": "SLOWLOG GET", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "SLOWLOG LEN", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "SLOWLOG RESET", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "SWAPDB", "support": "Unsupported", "notes": null}, {"family": "Server", "command": "TIME", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SADD", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SCARD", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SDIFF", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SDIFFSTORE", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SINTER", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SINTERCARD", "support": "Unsupported", "notes": "API 7.0"}, {"family": "Set", "command": "SINTERSTORE", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SISMEMBER", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SMEMBERS", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SMISMEMBER", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SMOVE", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SPOP", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SRANDMEMBER", "support": "Unsupported", "notes": "API 1.0"}, {"family": "Set", "command": "SREM", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SSCAN", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SUNION", "support": "Fully supported", "notes": null}, {"family": "Set", "command": "SUNIONSTORE", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "BZMPOP", "support": "Unsupported", "notes": "API 7.0"}, {"family": "Sorted Set", "command": "BZPOPMZX", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "BZPOPMIN", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZADD", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZCARD", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZCOUNT", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZDIFF", "support": "Unsupported", "notes": "API 6.2.0"}, {"family": "Sorted Set", "command": "ZDIFFSTORE", "support": "Unsupported", "notes": "API 6.2.0"}, {"family": "Sorted Set", "command": "ZINCRBY", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZINTER", "support": "Unsupported", "notes": "API 6.2.0"}, {"family": "Sorted Set", "command": "ZINTERCARD", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZINTERSTORE", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZLEXCOUNT", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZMPOP", "support": "Unsupported", "notes": "API 7.0.0"}, {"family": "Sorted Set", "command": "ZMSCORE", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZPOPMAX", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZPOPMIN", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZRANDMEMBER", "support": "Unsupported", "notes": "API 6.2.0"}, {"family": "Sorted Set", "command": "ZRANGE", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZRANGEBYLEX", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZRANGEBYSCORE", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZRANK", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZREM", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZREMRANGEBYLEX", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZREMRANGEBYRANK", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZREMRANGEBYSCORE", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZREVRANGE", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZREVRANGEBYLEX", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZREVRANGEBYSCORE", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZREVRANK", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZSCAN", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZSCORE", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZUNION", "support": "Fully supported", "notes": null}, {"family": "Sorted Set", "command": "ZUNIONSTORE", "support": "Fully supported", "notes": null}, {"family": "Stream", "command": "XAUTOCLAIM", "support": "Unsupported", "notes": null}, {"family": "Stream", "command": "XCLAIM", "support": "TBD", "notes": null}, {"family": "Stream", "command": "XREAD", "support": "Fully supported", "notes": null}, {"family": "Stream", "command": "XADD", "support": "Fully supported", "notes": null}, {"family": "Stream", "command": "XPENDING", "support": "TBD", "notes": null}, {"family": "Stream", "command": "XGROUP", "support": "Partially supported", "notes": null}, {"family": "Stream", "command": "XRANGE", "support": "Fully supported", "notes": null}, {"family": "Stream", "command": "XSETID", "support": "Fully supported", "notes": null}, {"family": "Stream", "command": "XREVRANGE", "support": "Fully supported", "notes": null}, {"family": "Stream", "command": "XREADGROUP", "support": "Unsupported", "notes": null}, {"family": "Stream", "command": "XDEL", "support": "Fully supported", "notes": null}, {"family": "Stream", "command": "XINFO", "support": "Partially supported", "notes": "does not support CONSUMERS and STREAMS options yet"}, {"family": "Stream", "command": "XACK", "support": "Unsupported", "notes": null}, {"family": "Stream", "command": "XTRIM", "support": "Partially supported", "notes": null}, {"family": "String", "command": "APPEND", "support": "Fully supported", "notes": null}, {"family": "String", "command": "DECR", "support": "Fully supported", "notes": null}, {"family": "String", "command": "DECRBY", "support": "Fully supported", "notes": null}, {"family": "String", "command": "DIGEST", "support": "Fully supported", "notes": null}, {"family": "String", "command": "GET", "support": "Fully supported", "notes": null}, {"family": "String", "command": "GETDEL", "support": "Fully supported", "notes": null}, {"family": "String", "command": "GETEX", "support": "Fully supported", "notes": null}, {"family": "String", "command": "GETRANGE", "support": "Fully supported", "notes": null}, {"family": "String", "command": "GETSET", "support": "Fully supported", "notes": null}, {"family": "String", "command": "INCR", "support": "Fully supported", "notes": null}, {"family": "String", "command": "INCRBY", "support": "Fully supported", "notes": null}, {"family": "String", "command": "INCRBYFLOAT", "support": "Fully supported", "notes": null}, {"family": "String", "command": "LCS", "support": "Unsupported", "notes": "API 7.0.0"}, {"family": "String", "command": "MGET", "support": "Fully supported", "notes": null}, {"family": "String", "command": "MSET", "support": "Fully supported", "notes": null}, {"family": "String", "command": "MSETNX", "support": "Fully supported", "notes": null}, {"family": "String", "command": "PSETEX", "support": "Fully supported", "notes": null}, {"family": "String", "command": "SET", "support": "Fully supported", "notes": null}, {"family": "String", "command": "SETEX", "support": "Fully supported", "notes": null}, {"family": "String", "command": "SETNX", "support": "Fully supported", "notes": null}, {"family": "String", "command": "SETRANGE", "support": "Fully supported", "notes": null}, {"family": "String", "command": "STRLEN", "support": "Fully supported", "notes": null}, {"family": "String", "command": "SUBSTR", "support": "Fully supported", "notes": null}, {"family": "Transactions", "command": "DISCARD", "support": "Fully supported", "notes": null}, {"family": "Transactions", "command": "EXEC", "support": "Fully supported", "notes": null}, {"family": "Transactions", "command": "MULTI", "support": "Fully supported", "notes": null}, {"family": "Transactions", "command": "UNWATCH", "support": "Fully supported", "notes": null}, {"family": "Transactions", "command": "WATCH", "support": "Fully supported", "notes": null}, {"family": "Bloom Filter", "command": "TBD", "support": "Unsupported", "notes": null}, {"family": "Cuckoo Filter", "command": "TBD", "support": "Unsupported", "notes": null}, {"family": "Count-min Sketch", "command": "TBD", "support": "Unsupported", "notes": null}, {"family": "Graph", "command": "TBD", "support": "Unsupported", "notes": null}, {"family": "JSON", "command": "ARRAPPEND", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "ARRINDEX", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "ARRINSERT", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "ARRLEN", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "ARRPOP", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "ARRTRIM", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "CLEAR", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "DEBUG", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "DEBUG MEMORY", "support": "Unsupported", "notes": "Report a value's memory usage in bytes"}, {"family": "JSON", "command": "DEL", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "FORGET", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "GET", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "MERGE", "support": "Unsupported", "notes": null}, {"family": "JSON", "command": "MGET", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "MSET", "support": "Unsupported", "notes": null}, {"family": "JSON", "command": "NUMINCRBY", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "NUMMULTBY", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "OBJKEYS", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "OBJLEN", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "RESP", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "SET", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "STRAPPEND", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "STRLEN", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "TOGGLE", "support": "Fully supported", "notes": null}, {"family": "JSON", "command": "TYPE", "support": "Fully supported", "notes": null}, {"family": "Search", "command": "FT.CREATE", "support": "Unsupported", "notes": null}, {"family": "Search", "command": "FT.SEARCH", "support": "Unsupported", "notes": null}, {"family": "Search", "command": "FT.SYNUPDATE", "support": "Unsupported", "notes": null}, {"family": "Search", "command": "FT.SYNDUMP", "support": "Unsupported", "notes": null}, {"family": "Auto Suggest", "command": "TBD", "support": "Unsupported", "notes": null}, {"family": "T-Digest", "command": "TBD", "support": "Unsupported", "notes": null}, {"family": "Time Series", "command": "TBD", "support": "Unsupported", "notes": null}, {"family": "Top-K", "command": "TBD", "support": "Unsupported", "notes": null}]
\ No newline at end of file
From dca71803708ed0a2bc9576a8af8f9a728cf920db Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 22 Jan 2026 13:25:31 +0000
Subject: [PATCH 3/4] Update DIGEST and DELEX docs with actual digest values
and version info
Co-authored-by: romange <3674760+romange@users.noreply.github.com>
---
docs/command-reference/generic/delex.md | 18 ++++++++----------
docs/command-reference/strings/digest.md | 16 +++++++---------
2 files changed, 15 insertions(+), 19 deletions(-)
diff --git a/docs/command-reference/generic/delex.md b/docs/command-reference/generic/delex.md
index c62a8d06..fbc1bc87 100644
--- a/docs/command-reference/generic/delex.md
+++ b/docs/command-reference/generic/delex.md
@@ -14,6 +14,8 @@ The `DELEX` command provides conditional key deletion based on value or digest c
It enables atomic conditional operations, allowing you to delete keys only when specific conditions are met.
This is useful for implementing optimistic locking patterns and ensuring data consistency.
+**Availability:** Dragonfly v1.37.0 and later.
+
## Syntax
```shell
@@ -99,8 +101,8 @@ Delete the key only if the digest matches:
dragonfly$> SET mykey "test"
OK
dragonfly$> DIGEST mykey
-"a1b2c3d4e5f67890"
-dragonfly$> DELEX mykey IFDEQ "a1b2c3d4e5f67890"
+"9ec9f7918d7dfc40"
+dragonfly$> DELEX mykey IFDEQ "9ec9f7918d7dfc40"
(integer) 1
dragonfly$> SET mykey "test"
@@ -119,13 +121,13 @@ Delete the key only if the digest differs:
dragonfly$> SET mykey "test"
OK
dragonfly$> DIGEST mykey
-"a1b2c3d4e5f67890"
+"9ec9f7918d7dfc40"
dragonfly$> DELEX mykey IFDNE "0000000000000000"
(integer) 1
dragonfly$> SET mykey "test"
OK
-dragonfly$> DELEX mykey IFDNE "a1b2c3d4e5f67890"
+dragonfly$> DELEX mykey IFDNE "9ec9f7918d7dfc40"
(integer) 0
dragonfly$> GET mykey
"test"
@@ -139,10 +141,10 @@ Use `DELEX` for optimistic locking to ensure data hasn't changed:
dragonfly$> SET counter "100"
OK
dragonfly$> DIGEST counter
-"d4f3c8b2a1e6f7d9"
+"e3cd843a18868415"
# Later, delete only if the value hasn't changed
-dragonfly$> DELEX counter IFDEQ "d4f3c8b2a1e6f7d9"
+dragonfly$> DELEX counter IFDEQ "e3cd843a18868415"
(integer) 1
```
@@ -180,7 +182,3 @@ Yes, `DELEX` operations are journaled and replicated to replicas, ensuring consi
### How is DELEX different from DEL?
`DELEX` extends [`DEL`](./del.md) by adding conditional deletion based on value or digest matching. Without conditions, `DELEX key` behaves identically to `DEL key`.
-
-### Is DELEX compatible with Redis?
-
-Yes, `DELEX` is compatible with Redis 8.4.0 and later versions.
diff --git a/docs/command-reference/strings/digest.md b/docs/command-reference/strings/digest.md
index b50bcfc0..4e43924a 100644
--- a/docs/command-reference/strings/digest.md
+++ b/docs/command-reference/strings/digest.md
@@ -14,6 +14,8 @@ The `DIGEST` command returns a hash digest for the value stored at a specified k
It uses the XXH3 hashing algorithm to compute a 64-bit hash and returns it as a 16-character hexadecimal string.
This command is useful for comparing values without transferring the full content, implementing checksums, or detecting changes.
+**Availability:** Dragonfly v1.37.0 and later.
+
## Syntax
```shell
@@ -44,7 +46,7 @@ Compute digest of a string value:
dragonfly$> SET mykey "Hello, Dragonfly!"
OK
dragonfly$> DIGEST mykey
-"d4f3c8b2a1e6f7d9"
+"063b4909128e92b7"
```
### Non-Existent Key
@@ -66,9 +68,9 @@ OK
dragonfly$> SET key2 "test"
OK
dragonfly$> DIGEST key1
-"a1b2c3d4e5f67890"
+"9ec9f7918d7dfc40"
dragonfly$> DIGEST key2
-"a1b2c3d4e5f67890"
+"9ec9f7918d7dfc40"
```
### Different Values Produce Different Digests
@@ -79,9 +81,9 @@ OK
dragonfly$> SET key2 "world"
OK
dragonfly$> DIGEST key1
-"1234567890abcdef"
+"9555e8555c62dcfd"
dragonfly$> DIGEST key2
-"fedcba0987654321"
+"d6476c25083d69be"
```
### Error on Wrong Type
@@ -117,7 +119,3 @@ No, `DIGEST` uses XXH3 which is not a cryptographic hash function. For cryptogra
### Can DIGEST work with compressed or integer-encoded strings?
Yes, `DIGEST` handles all string encodings including raw strings, integer-encoded strings, and compressed strings.
-
-### Is DIGEST compatible with Redis?
-
-Yes, `DIGEST` is compatible with Redis 8.4.0 and later versions.
From 6e8daf3ac251c9a9b4ea40843e7ed87e2380405b Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 22 Jan 2026 13:40:54 +0000
Subject: [PATCH 4/4] Remove compressed strings mention from DIGEST
documentation
Co-authored-by: romange <3674760+romange@users.noreply.github.com>
---
docs/command-reference/strings/digest.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/command-reference/strings/digest.md b/docs/command-reference/strings/digest.md
index 4e43924a..b9083dd4 100644
--- a/docs/command-reference/strings/digest.md
+++ b/docs/command-reference/strings/digest.md
@@ -116,6 +116,6 @@ dragonfly$> DIGEST mylist
No, `DIGEST` uses XXH3 which is not a cryptographic hash function. For cryptographic purposes, use dedicated cryptographic hash functions.
-### Can DIGEST work with compressed or integer-encoded strings?
+### Can DIGEST work with integer-encoded strings?
-Yes, `DIGEST` handles all string encodings including raw strings, integer-encoded strings, and compressed strings.
+Yes, `DIGEST` handles all string encodings including raw strings and integer-encoded strings.