From d665737c900080dd8d043a116cea016192ca40ac Mon Sep 17 00:00:00 2001 From: "David W. Dougherty" Date: Tue, 13 Oct 2026 09:03:50 -0700 Subject: [PATCH] RS: updates for INCREX and array commands --- content/commands/arcount.md | 2 +- content/commands/ardel.md | 2 +- content/commands/ardelrange.md | 2 +- content/commands/arget.md | 2 +- content/commands/argetrange.md | 2 +- content/commands/argrep.md | 2 +- content/commands/arinfo.md | 2 +- content/commands/arinsert.md | 2 +- content/commands/arlastitems.md | 2 +- content/commands/arlen.md | 2 +- content/commands/armget.md | 2 +- content/commands/armset.md | 2 +- content/commands/arnext.md | 2 +- content/commands/arop.md | 2 +- content/commands/arring.md | 2 +- content/commands/arscan.md | 2 +- content/commands/arseek.md | 2 +- content/commands/arset.md | 2 +- content/commands/increx.md | 16 +++++++- content/develop/data-types/arrays.md | 2 + .../compatibility/commands/data-types.md | 38 +++++++++---------- 21 files changed, 54 insertions(+), 38 deletions(-) diff --git a/content/commands/arcount.md b/content/commands/arcount.md index 7c21ee87b2..94b21d9228 100644 --- a/content/commands/arcount.md +++ b/content/commands/arcount.md @@ -67,7 +67,7 @@ redis> ARCOUNT myarray | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/ardel.md b/content/commands/ardel.md index 6d5457592e..c8fbdf84c5 100644 --- a/content/commands/ardel.md +++ b/content/commands/ardel.md @@ -90,7 +90,7 @@ redis> ARCOUNT myarray | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/ardelrange.md b/content/commands/ardelrange.md index 37a9be1bf1..c062a6bfcd 100644 --- a/content/commands/ardelrange.md +++ b/content/commands/ardelrange.md @@ -91,7 +91,7 @@ redis> ARGET myarray 4 | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arget.md b/content/commands/arget.md index 8ec33d329e..9bf44da298 100644 --- a/content/commands/arget.md +++ b/content/commands/arget.md @@ -84,7 +84,7 @@ redis> ARGET myarray 1 | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/argetrange.md b/content/commands/argetrange.md index 2c0dbb4aaf..e35deb4962 100644 --- a/content/commands/argetrange.md +++ b/content/commands/argetrange.md @@ -97,7 +97,7 @@ redis> ARGETRANGE myarray 3 0 | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/argrep.md b/content/commands/argrep.md index d0d7a61904..8714397d6c 100644 --- a/content/commands/argrep.md +++ b/content/commands/argrep.md @@ -205,7 +205,7 @@ redis> ARGREP log - + MATCH "error" NOCASE LIMIT 1 | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arinfo.md b/content/commands/arinfo.md index f19b8c586e..f9d3af6553 100644 --- a/content/commands/arinfo.md +++ b/content/commands/arinfo.md @@ -134,7 +134,7 @@ redis> ARINFO myarray | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arinsert.md b/content/commands/arinsert.md index 6f762110e6..cc066500dd 100644 --- a/content/commands/arinsert.md +++ b/content/commands/arinsert.md @@ -87,7 +87,7 @@ redis> ARNEXT myarray | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arlastitems.md b/content/commands/arlastitems.md index b06893bd5a..db2a4f62e9 100644 --- a/content/commands/arlastitems.md +++ b/content/commands/arlastitems.md @@ -101,7 +101,7 @@ redis> ARLASTITEMS log 2 REV | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arlen.md b/content/commands/arlen.md index d570b74703..fbcae241ca 100644 --- a/content/commands/arlen.md +++ b/content/commands/arlen.md @@ -75,7 +75,7 @@ redis> ARCOUNT myarray | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/armget.md b/content/commands/armget.md index cbbf0644a5..97e2c59db7 100644 --- a/content/commands/armget.md +++ b/content/commands/armget.md @@ -86,7 +86,7 @@ redis> ARMGET myarray 0 1 5 3 | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/armset.md b/content/commands/armset.md index e618f5097d..db80cc851a 100644 --- a/content/commands/armset.md +++ b/content/commands/armset.md @@ -90,7 +90,7 @@ redis> ARGET myarray 100 | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arnext.md b/content/commands/arnext.md index 549e319d9e..dabc9e07a3 100644 --- a/content/commands/arnext.md +++ b/content/commands/arnext.md @@ -77,7 +77,7 @@ redis> ARNEXT myarray | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arop.md b/content/commands/arop.md index 6bdf0f0e5b..ec530afe23 100644 --- a/content/commands/arop.md +++ b/content/commands/arop.md @@ -157,7 +157,7 @@ redis> AROP flags 0 2 OR | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arring.md b/content/commands/arring.md index 613a3ba1e0..8c7297e8d4 100644 --- a/content/commands/arring.md +++ b/content/commands/arring.md @@ -103,7 +103,7 @@ redis> ARLASTITEMS readings 3 | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arscan.md b/content/commands/arscan.md index c84a186033..dfa3df68b1 100644 --- a/content/commands/arscan.md +++ b/content/commands/arscan.md @@ -123,7 +123,7 @@ redis> ARSCAN myarray 0 10 LIMIT 2 | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arseek.md b/content/commands/arseek.md index 8db50d2937..c83ae062b9 100644 --- a/content/commands/arseek.md +++ b/content/commands/arseek.md @@ -87,7 +87,7 @@ redis> ARNEXT myarray | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/arset.md b/content/commands/arset.md index 3eb4bc7c8a..a52fa246a5 100644 --- a/content/commands/arset.md +++ b/content/commands/arset.md @@ -95,7 +95,7 @@ redis> ARGET myarray 4 | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Return information diff --git a/content/commands/increx.md b/content/commands/increx.md index c68113428f..040a30c1ee 100644 --- a/content/commands/increx.md +++ b/content/commands/increx.md @@ -294,11 +294,25 @@ if actual_incr == 0: reject_request() # rate limit exceeded ``` +### Active-Active databases + +In Active-Active databases, each replica enforces `LBOUND` and `UBOUND` against its own local value. Increments that different replicas accept concurrently can push the merged value above `UBOUND` or below `LBOUND` after the replicas synchronize. While the merged value is out of bounds, every replica rejects further increments until the value returns within bounds or the key expires. + +For example, with two replicas and a key that starts at `0`: + +``` +Replica 1: INCREX k BYINT 6 UBOUND 10 -> 1) 6 2) 6 +Replica 2: INCREX k BYINT 6 UBOUND 10 -> 1) 6 2) 6 +After synchronization, both replicas: k = 12 +``` + +Each replica accepts its increment because its local result, `6`, is within the bound. The merged value, `12`, exceeds `UBOUND`. + ## Redis Software and Redis Cloud compatibility | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| -| ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| ✅ Standard
✅ Active-Active\* | ❌ Standard
❌ Active-Active | \*In Active-Active databases, replicas enforce bounds against their local values, so the merged value can exceed them. See [Active-Active databases](#active-active-databases). | ## Return information diff --git a/content/develop/data-types/arrays.md b/content/develop/data-types/arrays.md index 3de7fbcfaf..d9a6c81321 100644 --- a/content/develop/data-types/arrays.md +++ b/content/develop/data-types/arrays.md @@ -238,3 +238,5 @@ Arrays complement rather than replace the other Redis collection types: ## Limits [`ARGETRANGE`](/content/commands/argetrange.md) enforces a hard limit of 1,000,000 elements per call to guard against accidentally large range reads. + +Arrays aren't supported in [Active-Active databases](/content/operate/rs/databases/active-active/_index.md). diff --git a/content/operate/rs/references/compatibility/commands/data-types.md b/content/operate/rs/references/compatibility/commands/data-types.md index c2f7f800f1..365adc4a2c 100644 --- a/content/operate/rs/references/compatibility/commands/data-types.md +++ b/content/operate/rs/references/compatibility/commands/data-types.md @@ -19,24 +19,24 @@ The following tables show which Redis Open Source data type commands are compati | Command | Redis
Software | Redis
Cloud | Notes | |:--------|:----------------------|:-----------------|:------| -| [ARCOUNT](/content/commands/arcount.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARDEL](/content/commands/ardel.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARDELRANGE](/content/commands/ardelrange.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARGET](/content/commands/arget.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARGETRANGE](/content/commands/argetrange.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARGREP](/content/commands/argrep.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARINFO](/content/commands/arinfo.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARINSERT](/content/commands/arinsert.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARLASTITEMS](/content/commands/arlastitems.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARLEN](/content/commands/arlen.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARMGET](/content/commands/armget.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARMSET](/content/commands/armset.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARNEXT](/content/commands/arnext.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [AROP](/content/commands/arop.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARRING](/content/commands/arring.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARSCAN](/content/commands/arscan.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARSEEK](/content/commands/arseek.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | -| [ARSET](/content/commands/arset.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARCOUNT](/content/commands/arcount.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARDEL](/content/commands/ardel.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARDELRANGE](/content/commands/ardelrange.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARGET](/content/commands/arget.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARGETRANGE](/content/commands/argetrange.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARGREP](/content/commands/argrep.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARINFO](/content/commands/arinfo.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARINSERT](/content/commands/arinsert.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARLASTITEMS](/content/commands/arlastitems.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARLEN](/content/commands/arlen.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARMGET](/content/commands/armget.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARMSET](/content/commands/armset.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARNEXT](/content/commands/arnext.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [AROP](/content/commands/arop.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARRING](/content/commands/arring.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARSCAN](/content/commands/arscan.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARSEEK](/content/commands/arseek.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [ARSET](/content/commands/arset.md) | ✅ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | ## Bitmap commands @@ -251,7 +251,7 @@ The following tables show which Redis Open Source data type commands are compati | [INCR](/content/commands/incr.md) | ✅ Standard
✅ Active-Active | ✅ Standard
✅ Active-Active | | | [INCRBY](/content/commands/incrby.md) | ✅ Standard
✅ Active-Active | ✅ Standard
✅ Active-Active | | | [INCRBYFLOAT](/content/commands/incrbyfloat.md) | ✅ Standard
✅ Active-Active | ✅ Standard
✅ Active-Active | | -| [INCREX](/content/commands/increx.md) | ❌ Standard
❌ Active-Active | ❌ Standard
❌ Active-Active | | +| [INCREX](/content/commands/increx.md) | ✅ Standard
✅ Active-Active\* | ❌ Standard
❌ Active-Active | \*In Active-Active databases, the merged value can exceed `LBOUND` or `UBOUND`. See [INCREX](/content/commands/increx.md#active-active-databases). | | [LCS](/content/commands/lcs.md) | ✅ Standard
✅ Active-Active | ✅ Standard
✅ Active-Active | | | [MGET](/content/commands/mget.md) | ✅ Standard
✅ Active-Active | ✅ Standard
✅ Active-Active | | | [MSET](/content/commands/mset.md) | ✅ Standard
✅ Active-Active | ✅ Standard
✅ Active-Active | |