Skip to content

Support for 'Array' commands (Redis 8.8) - #4532

Merged
ggivo merged 22 commits into
redis:masterfrom
atakavci:ali/arrayCommands
May 22, 2026
Merged

ggivo merged 22 commits into
redis:masterfrom
atakavci:ali/arrayCommands

Conversation

@atakavci

@atakavci atakavci commented May 18, 2026 •

Copy link
Copy Markdown
Contributor

Note

Medium Risk
Moderate risk because it adds a new command surface across Protocol, CommandObjects, Jedis/UnifiedJedis, and pipelining, so mistakes could affect command encoding/response parsing for new operations (though changes are largely additive).

Overview
Adds end-to-end support for Redis Array commands (ARCOUNT, ARDEL, ARDELRANGE, ARGET*, ARGREP, ARINFO, ARINSERT, ARLASTITEMS, ARLEN, ARMGET/ARMSET, ARNEXT, AROP, ARRING, ARSCAN, ARSEEK, ARSET) across CommandObjects, Jedis, UnifiedJedis, and PipeliningBase (string + binary variants).

Introduces new API types for this feature: ArrayCommands/ArrayBinaryCommands (+ pipeline equivalents), ArgrepParams, LongRange, ArrayAggregate/ArrayBitwise, and typed responses ArrayInfo/ArrayFullInfo, with new BuilderFactory builders to parse ARINFO and indexed value replies.

Updates Protocol to register the new commands/keywords, extends aggregate command interfaces (JedisCommands, PipelineCommands, etc.) to include array support, and adds unit/integration tests plus pom.xml surefire includes to run the new test suites.

Reviewed by Cursor Bugbot for commit d95684d. Bugbot is set up for automated code reviews on this repo. Configure here.

@atakavci atakavci self-assigned this May 18, 2026
@atakavci
atakavci marked this pull request as ready for review May 20, 2026 09:11
- revisit arrayinfo and arrayinfofull
- replace longrange with primitves where longrange is single item
@atakavci
atakavci requested review from a-TODO-rov, ggivo and uglide May 20, 2026 13:32

@uglide uglide left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@ggivo ggivo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM from api perspective, have two questions

  • I believe we should mark all Array API related public interfcae as experimental to match server in preview
  • Second not sure what is the benfit of Inroducing Builder/output of type OptionalLong

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Reviewed by Cursor Bugbot for commit 0dc453b. Configure here.


import java.util.List;
import java.util.Map;
import java.util.OptionalLong;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused OptionalLong import left from prior implementation

Low Severity

The java.util.OptionalLong import was added but is never used anywhere in the file. Based on the PR discussion, OptionalLong was originally considered for the arnext return type but was changed to Long per reviewer feedback. The import was left behind from that earlier implementation.

Fix in CursorΒ Fix in Web

Reviewed by Cursor Bugbot for commit 0dc453b. Configure here.

@ggivo ggivo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@ggivo
ggivo merged commit c06bc2c into redis:master May 22, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants