Script now supports a FIPS-safe execution mode that avoids client-side SHA-1 computation, which is blocked in strict FIPS environments. A new NewScriptServerSHA constructor uses SCRIPT LOAD to obtain and cache the digest from the server, then runs commands via EVALSHA/EVALSHA_RO. Falls back to EVAL/EVALRO if loading fails, and transparently retries once on NOSCRIPT. The default behavior is unchanged for existing users.
Added a new step-based FT.AGGREGATE pipeline API via FTAggregateOptions.Steps, allowing LOAD, APPLY, GROUPBY, and SORTBY (with per-step MAX) to be repeated and interleaved in arbitrary order — matching Redis's native multi-stage aggregation semantics. The legacy Load/Apply/GroupBy/SortBy/SortByMax fields are now deprecated.
Added DoRaw and DoRawWriteTo methods for executing arbitrary commands and reading the raw RESP response. Useful for proxying, custom protocol inspection, and working with commands not yet wrapped by go-redis.
Added DialerRetryBackoff option (plumbed through Options, ClusterOptions, RingOptions, FailoverOptions) to let callers customize the delay between failed dial attempts. Helpers DialRetryBackoffConstant and DialRetryBackoffExponential (with jitter and cap) are provided out of the box. Dial timeout is now also applied per attempt rather than across all retries.
FT.AGGREGATE Steps: Step-based pipeline builder for FT.AGGREGATE with support for repeated/interleaved LOAD, APPLY, GROUPBY, and SORTBY stages (#3782) by @ndyakov
VectorSet commands: Added VISMEMBER and WITHATTRIBS support (#3753) by @romanpovol
FIPS-safe Script: NewScriptServerSHA uses SCRIPT LOAD to obtain the digest from the server, avoiding client-side SHA-1 (#3700) by @chaitanyabodlapati
Raw RESP access: DoRaw and DoRawWriteTo for raw RESP protocol access (#3713) by @ofekshenawa
Dial retry backoff: DialerRetryBackoff function option with constant and exponential helpers (#3706) by @mwhooker
Typed NOSCRIPT error: Redis NOSCRIPT replies are now surfaced as a typed error for easier handling (#3738) by @LINKIWI
PubSub ClientSetName: Added ClientSetName method to PubSub (#3727) by @Flack74
ReplicaOf: New ReplicaOf method replaces the deprecated SlaveOf (#3720) by @Copilot
HSCAN BinaryUnmarshaler: HScan now supports types implementing encoding.BinaryUnmarshaler (#3768) by @Aaditya-dubey1
🐛 Bug Fixes
Auto hostname type detection: Improved endpoint type detection for maintenance notifications using DNS-based classification; handles empty hosts and expanded private-IP ranges (#3789) by @ndyakov
HELLO fallback: Don't send CLIENT MAINT_NOTIFICATIONS handshake when HELLO fails and connection falls back to RESP2; fail fast when explicitly enabled with RESP3 (#3788) by @ndyakov
Dial TCP retry: ShouldRetry now treats net.OpError with Op == "dial" timeout errors as safe to retry since no command was sent (#3787) by @vladisa88
wrappedOnClose leak: Fixed resource leak caused by repeatedly wrapping baseClient close logic; replaced with a bounded, concurrency-safe named-hook registry (#3785) by @ndyakov
Pool Close() on stale connections: Suppress close errors (e.g., TLS closeNotify timeouts) for connections already dropped by the server due to idle timeout (#3778) by @ofekshenawa
FIFO waiter ordering: Fixed race in ConnStateMachine.notifyWaiters that could wake multiple waiters under a single mutex hold and violate FIFO ordering (#3777) by @0x48core
Lua READONLY detection: Detect READONLY errors embedded in Lua script error messages on read-only replicas so commands are correctly retried (#3769) by @zhengjilei
VectorScoreSliceCmd RESP2: Fixed VSimWithScores, VSimWithArgsWithScores, and VLinksWithScores which were broken on RESP2 connections returning flat arrays instead of maps (#3767) by @Copilot
Closed connection handling: Two fixes for closed connection handling in the pool (#3764) by @cxljs
ZRangeArgs Rev: Fixed ZRangeArgs with Rev + ByScore/ByLex incorrectly swapping Start/Stop, breaking ZRANGESTORE (#3751) by @Copilot
OTel metric instrument types: Fixed metric instrument types in redisotel-native (#3743) by @ofekshenawa
Options.clone() data race: Fixed data race when cloning Options (#3739) by @rubensayshi
Connection closure metrics: Fixed connection closure metrics and enabled all metric groups by default in redisotel-native (#3735) by @ofekshenawa
OTel semconv v1.38.0: Use metric definition from otel/semconv/v1.38.0 in redisotel-native (#3731) by @wzy9607
SETNX semantics: Use SET ... NX instead of the deprecated SETNX command (#3723) by @ndyakov
TIME keyless routing: Mark TIME as a keyless command for correct cluster routing (#3722) by @fatal10110
Dial timeout per retry: Dial timeout now applies per attempt instead of across all retry attempts combined (#3705) by @mwhooker
Cluster metrics attributes: Fixed pool.name being appended per node, which corrupted and dropped user-provided custom attributes (#3699) by @Jesse-Bonfire
initConn nil dereference: Fixed nil pointer dereference and potential deadlock in *baseClient.initConn(); added explicit nil option guards to client constructors (#3676) by @olde-ducke
⚡ Performance
RESP reader: Optimized RESP reader by eliminating intermediate string allocations (#3774) by @Aaditya-dubey1
Inline rendezvous hashing: Replaced github.com/dgryski/go-rendezvous dependency with an in-repo implementation in internal/hashtag, reducing the dependency graph while preserving algorithm parity (#3762) by @bigsk05
🧪 Testing & Infrastructure
Release automation: Added repository, ref, and client-libs-test-image-tag inputs to the run-tests composite action; redis-version is now optional so unstable builds use REDIS_VERSION from the Makefile (#3749) by @dariaguy
Go 1.24: Updated minimum Go version to 1.24 and use -compat=1.24 in release scripts (#3714, #3754) by @ndyakov, @cxljs
🧰 Maintenance
Pool state machine: Removed redundant Conn.closed atomic field in favor of the state machine's StateClosed (#3783) by @cxljs
OTel SDK: Updated OpenTelemetry SDK dependencies in redisotel/redisotel-native (#3770) by @ndyakov
Go 1.21+ built-ins: Use maps.Keys, slices.Collect, slices.Contains, clear(), and slices.SortFunc instead of custom helpers (#3758, #3746) by @cxljs
HGetAll docs: Added Go doc comment to HGetAll describing behavior and complexity (#3776) by @0x48core
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [github.com/redis/go-redis/v9](https://github.com/redis/go-redis) | `v9.18.0` → `v9.19.0` |  |  |
---
### Release Notes
<details>
<summary>redis/go-redis (github.com/redis/go-redis/v9)</summary>
### [`v9.19.0`](https://github.com/redis/go-redis/releases/tag/v9.19.0): 9.19.0
[Compare Source](https://github.com/redis/go-redis/compare/v9.18.0...v9.19.0)
#### 🚀 Highlights
##### FIPS-Compatible Script Helper
`Script` now supports a FIPS-safe execution mode that avoids client-side SHA-1 computation, which is blocked in strict FIPS environments. A new `NewScriptServerSHA` constructor uses `SCRIPT LOAD` to obtain and cache the digest from the server, then runs commands via `EVALSHA`/`EVALSHA_RO`. Falls back to `EVAL`/`EVALRO` if loading fails, and transparently retries once on `NOSCRIPT`. The default behavior is unchanged for existing users.
([#​3700](https://github.com/redis/go-redis/pull/3700)) by [@​chaitanyabodlapati](https://github.com/chaitanyabodlapati)
##### FT.AGGREGATE Step-Based Pipeline Builder
Added a new step-based `FT.AGGREGATE` pipeline API via `FTAggregateOptions.Steps`, allowing `LOAD`, `APPLY`, `GROUPBY`, and `SORTBY` (with per-step `MAX`) to be repeated and interleaved in arbitrary order — matching Redis's native multi-stage aggregation semantics. The legacy `Load`/`Apply`/`GroupBy`/`SortBy`/`SortByMax` fields are now deprecated.
([#​3782](https://github.com/redis/go-redis/pull/3782)) by [@​ndyakov](https://github.com/ndyakov)
##### Raw RESP Protocol Access
Added `DoRaw` and `DoRawWriteTo` methods for executing arbitrary commands and reading the raw RESP response. Useful for proxying, custom protocol inspection, and working with commands not yet wrapped by go-redis.
([#​3713](https://github.com/redis/go-redis/pull/3713)) by [@​ofekshenawa](https://github.com/ofekshenawa)
##### Configurable Dial Retry Backoff
Added `DialerRetryBackoff` option (plumbed through `Options`, `ClusterOptions`, `RingOptions`, `FailoverOptions`) to let callers customize the delay between failed dial attempts. Helpers `DialRetryBackoffConstant` and `DialRetryBackoffExponential` (with jitter and cap) are provided out of the box. Dial timeout is now also applied **per attempt** rather than across all retries.
([#​3706](https://github.com/redis/go-redis/pull/3706), [#​3705](https://github.com/redis/go-redis/pull/3705)) by [@​mwhooker](https://github.com/mwhooker)
#### ✨ New Features
- **FT.AGGREGATE Steps**: Step-based pipeline builder for `FT.AGGREGATE` with support for repeated/interleaved `LOAD`, `APPLY`, `GROUPBY`, and `SORTBY` stages ([#​3782](https://github.com/redis/go-redis/pull/3782)) by [@​ndyakov](https://github.com/ndyakov)
- **VectorSet commands**: Added `VISMEMBER` and `WITHATTRIBS` support ([#​3753](https://github.com/redis/go-redis/pull/3753)) by [@​romanpovol](https://github.com/romanpovol)
- **FIPS-safe Script**: `NewScriptServerSHA` uses `SCRIPT LOAD` to obtain the digest from the server, avoiding client-side SHA-1 ([#​3700](https://github.com/redis/go-redis/pull/3700)) by [@​chaitanyabodlapati](https://github.com/chaitanyabodlapati)
- **Raw RESP access**: `DoRaw` and `DoRawWriteTo` for raw RESP protocol access ([#​3713](https://github.com/redis/go-redis/pull/3713)) by [@​ofekshenawa](https://github.com/ofekshenawa)
- **Dial retry backoff**: `DialerRetryBackoff` function option with constant and exponential helpers ([#​3706](https://github.com/redis/go-redis/pull/3706)) by [@​mwhooker](https://github.com/mwhooker)
- **Typed NOSCRIPT error**: Redis `NOSCRIPT` replies are now surfaced as a typed error for easier handling ([#​3738](https://github.com/redis/go-redis/pull/3738)) by [@​LINKIWI](https://github.com/LINKIWI)
- **PubSub ClientSetName**: Added `ClientSetName` method to `PubSub` ([#​3727](https://github.com/redis/go-redis/pull/3727)) by [@​Flack74](https://github.com/Flack74)
- **ReplicaOf**: New `ReplicaOf` method replaces the deprecated `SlaveOf` ([#​3720](https://github.com/redis/go-redis/pull/3720)) by [@​Copilot](https://github.com/apps/copilot-swe-agent)
- **HSCAN BinaryUnmarshaler**: `HScan` now supports types implementing `encoding.BinaryUnmarshaler` ([#​3768](https://github.com/redis/go-redis/pull/3768)) by [@​Aaditya-dubey1](https://github.com/Aaditya-dubey1)
#### 🐛 Bug Fixes
- **Auto hostname type detection**: Improved endpoint type detection for maintenance notifications using DNS-based classification; handles empty hosts and expanded private-IP ranges ([#​3789](https://github.com/redis/go-redis/pull/3789)) by [@​ndyakov](https://github.com/ndyakov)
- **HELLO fallback**: Don't send `CLIENT MAINT_NOTIFICATIONS` handshake when `HELLO` fails and connection falls back to RESP2; fail fast when explicitly enabled with RESP3 ([#​3788](https://github.com/redis/go-redis/pull/3788)) by [@​ndyakov](https://github.com/ndyakov)
- **Dial TCP retry**: `ShouldRetry` now treats `net.OpError` with `Op == "dial"` timeout errors as safe to retry since no command was sent ([#​3787](https://github.com/redis/go-redis/pull/3787)) by [@​vladisa88](https://github.com/vladisa88)
- **wrappedOnClose leak**: Fixed resource leak caused by repeatedly wrapping `baseClient` close logic; replaced with a bounded, concurrency-safe named-hook registry ([#​3785](https://github.com/redis/go-redis/pull/3785)) by [@​ndyakov](https://github.com/ndyakov)
- **Pool Close() on stale connections**: Suppress close errors (e.g., TLS `closeNotify` timeouts) for connections already dropped by the server due to idle timeout ([#​3778](https://github.com/redis/go-redis/pull/3778)) by [@​ofekshenawa](https://github.com/ofekshenawa)
- **FIFO waiter ordering**: Fixed race in `ConnStateMachine.notifyWaiters` that could wake multiple waiters under a single mutex hold and violate FIFO ordering ([#​3777](https://github.com/redis/go-redis/pull/3777)) by [@​0x48core](https://github.com/0x48core)
- **Lua READONLY detection**: Detect `READONLY` errors embedded in Lua script error messages on read-only replicas so commands are correctly retried ([#​3769](https://github.com/redis/go-redis/pull/3769)) by [@​zhengjilei](https://github.com/zhengjilei)
- **VectorScoreSliceCmd RESP2**: Fixed `VSimWithScores`, `VSimWithArgsWithScores`, and `VLinksWithScores` which were broken on RESP2 connections returning flat arrays instead of maps ([#​3767](https://github.com/redis/go-redis/pull/3767)) by [@​Copilot](https://github.com/apps/copilot-swe-agent)
- **Closed connection handling**: Two fixes for closed connection handling in the pool ([#​3764](https://github.com/redis/go-redis/pull/3764)) by [@​cxljs](https://github.com/cxljs)
- **ZRangeArgs Rev**: Fixed `ZRangeArgs` with `Rev` + `ByScore`/`ByLex` incorrectly swapping `Start`/`Stop`, breaking `ZRANGESTORE` ([#​3751](https://github.com/redis/go-redis/pull/3751)) by [@​Copilot](https://github.com/apps/copilot-swe-agent)
- **OTel metric instrument types**: Fixed metric instrument types in `redisotel-native` ([#​3743](https://github.com/redis/go-redis/pull/3743)) by [@​ofekshenawa](https://github.com/ofekshenawa)
- **Options.clone() data race**: Fixed data race when cloning `Options` ([#​3739](https://github.com/redis/go-redis/pull/3739)) by [@​rubensayshi](https://github.com/rubensayshi)
- **Connection closure metrics**: Fixed connection closure metrics and enabled all metric groups by default in `redisotel-native` ([#​3735](https://github.com/redis/go-redis/pull/3735)) by [@​ofekshenawa](https://github.com/ofekshenawa)
- **OTel semconv v1.38.0**: Use metric definition from `otel/semconv/v1.38.0` in `redisotel-native` ([#​3731](https://github.com/redis/go-redis/pull/3731)) by [@​wzy9607](https://github.com/wzy9607)
- **SETNX semantics**: Use `SET ... NX` instead of the deprecated `SETNX` command ([#​3723](https://github.com/redis/go-redis/pull/3723)) by [@​ndyakov](https://github.com/ndyakov)
- **TIME keyless routing**: Mark `TIME` as a keyless command for correct cluster routing ([#​3722](https://github.com/redis/go-redis/pull/3722)) by [@​fatal10110](https://github.com/fatal10110)
- **Dial timeout per retry**: Dial timeout now applies per attempt instead of across all retry attempts combined ([#​3705](https://github.com/redis/go-redis/pull/3705)) by [@​mwhooker](https://github.com/mwhooker)
- **Cluster metrics attributes**: Fixed `pool.name` being appended per node, which corrupted and dropped user-provided custom attributes ([#​3699](https://github.com/redis/go-redis/pull/3699)) by [@​Jesse-Bonfire](https://github.com/Jesse-Bonfire)
- **initConn nil dereference**: Fixed nil pointer dereference and potential deadlock in `*baseClient.initConn()`; added explicit nil option guards to client constructors ([#​3676](https://github.com/redis/go-redis/pull/3676)) by [@​olde-ducke](https://github.com/olde-ducke)
#### ⚡ Performance
- **RESP reader**: Optimized RESP reader by eliminating intermediate string allocations ([#​3774](https://github.com/redis/go-redis/pull/3774)) by [@​Aaditya-dubey1](https://github.com/Aaditya-dubey1)
- **Inline rendezvous hashing**: Replaced `github.com/dgryski/go-rendezvous` dependency with an in-repo implementation in `internal/hashtag`, reducing the dependency graph while preserving algorithm parity ([#​3762](https://github.com/redis/go-redis/pull/3762)) by [@​bigsk05](https://github.com/bigsk05)
#### 🧪 Testing & Infrastructure
- **Release automation**: Added `repository`, `ref`, and `client-libs-test-image-tag` inputs to the `run-tests` composite action; `redis-version` is now optional so unstable builds use `REDIS_VERSION` from the Makefile ([#​3749](https://github.com/redis/go-redis/pull/3749)) by [@​dariaguy](https://github.com/dariaguy)
- **Go 1.24**: Updated minimum Go version to 1.24 and use `-compat=1.24` in release scripts ([#​3714](https://github.com/redis/go-redis/pull/3714), [#​3754](https://github.com/redis/go-redis/pull/3754)) by [@​ndyakov](https://github.com/ndyakov), [@​cxljs](https://github.com/cxljs)
#### 🧰 Maintenance
- **Pool state machine**: Removed redundant `Conn.closed` atomic field in favor of the state machine's `StateClosed` ([#​3783](https://github.com/redis/go-redis/pull/3783)) by [@​cxljs](https://github.com/cxljs)
- **OTel SDK**: Updated OpenTelemetry SDK dependencies in `redisotel`/`redisotel-native` ([#​3770](https://github.com/redis/go-redis/pull/3770)) by [@​ndyakov](https://github.com/ndyakov)
- **Go 1.21+ built-ins**: Use `maps.Keys`, `slices.Collect`, `slices.Contains`, `clear()`, and `slices.SortFunc` instead of custom helpers ([#​3758](https://github.com/redis/go-redis/pull/3758), [#​3746](https://github.com/redis/go-redis/pull/3746)) by [@​cxljs](https://github.com/cxljs)
- **HGetAll docs**: Added Go doc comment to `HGetAll` describing behavior and complexity ([#​3776](https://github.com/redis/go-redis/pull/3776)) by [@​0x48core](https://github.com/0x48core)
- **Docs links**: Fixed irrelevant docs links ([#​3724](https://github.com/redis/go-redis/pull/3724)) by [@​olzhas-sabiyev](https://github.com/olzhas-sabiyev)
- **Examples cleanup**: Removed throughput binary from examples ([#​3733](https://github.com/redis/go-redis/pull/3733)) by [@​ndyakov](https://github.com/ndyakov)
#### 👥 Contributors
We'd like to thank all the contributors who worked on this release!
[@​0x48core](https://github.com/0x48core), [@​Aaditya-dubey1](https://github.com/Aaditya-dubey1), [@​Copilot](https://github.com/apps/copilot-swe-agent), [@​Flack74](https://github.com/Flack74), [@​Jesse-Bonfire](https://github.com/Jesse-Bonfire), [@​LINKIWI](https://github.com/LINKIWI), [@​bigsk05](https://github.com/bigsk05), [@​chaitanyabodlapati](https://github.com/chaitanyabodlapati), [@​cxljs](https://github.com/cxljs), [@​dariaguy](https://github.com/dariaguy), [@​fatal10110](https://github.com/fatal10110), [@​mwhooker](https://github.com/mwhooker), [@​ndyakov](https://github.com/ndyakov), [@​ofekshenawa](https://github.com/ofekshenawa), [@​olde-ducke](https://github.com/olde-ducke), [@​olzhas-sabiyev](https://github.com/olzhas-sabiyev), [@​romanpovol](https://github.com/romanpovol), [@​rubensayshi](https://github.com/rubensayshi), [@​vladisa88](https://github.com/vladisa88), [@​wzy9607](https://github.com/wzy9607), [@​zhengjilei](https://github.com/zhengjilei)
***
**Full Changelog**: <https://github.com/redis/go-redis/compare/v9.18.0...v9.19.0>
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMjAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjEyMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
v9.18.0→v9.19.0Release Notes
redis/go-redis (github.com/redis/go-redis/v9)
v9.19.0: 9.19.0Compare Source
🚀 Highlights
FIPS-Compatible Script Helper
Scriptnow supports a FIPS-safe execution mode that avoids client-side SHA-1 computation, which is blocked in strict FIPS environments. A newNewScriptServerSHAconstructor usesSCRIPT LOADto obtain and cache the digest from the server, then runs commands viaEVALSHA/EVALSHA_RO. Falls back toEVAL/EVALROif loading fails, and transparently retries once onNOSCRIPT. The default behavior is unchanged for existing users.(#3700) by @chaitanyabodlapati
FT.AGGREGATE Step-Based Pipeline Builder
Added a new step-based
FT.AGGREGATEpipeline API viaFTAggregateOptions.Steps, allowingLOAD,APPLY,GROUPBY, andSORTBY(with per-stepMAX) to be repeated and interleaved in arbitrary order — matching Redis's native multi-stage aggregation semantics. The legacyLoad/Apply/GroupBy/SortBy/SortByMaxfields are now deprecated.(#3782) by @ndyakov
Raw RESP Protocol Access
Added
DoRawandDoRawWriteTomethods for executing arbitrary commands and reading the raw RESP response. Useful for proxying, custom protocol inspection, and working with commands not yet wrapped by go-redis.(#3713) by @ofekshenawa
Configurable Dial Retry Backoff
Added
DialerRetryBackoffoption (plumbed throughOptions,ClusterOptions,RingOptions,FailoverOptions) to let callers customize the delay between failed dial attempts. HelpersDialRetryBackoffConstantandDialRetryBackoffExponential(with jitter and cap) are provided out of the box. Dial timeout is now also applied per attempt rather than across all retries.(#3706, #3705) by @mwhooker
✨ New Features
FT.AGGREGATEwith support for repeated/interleavedLOAD,APPLY,GROUPBY, andSORTBYstages (#3782) by @ndyakovVISMEMBERandWITHATTRIBSsupport (#3753) by @romanpovolNewScriptServerSHAusesSCRIPT LOADto obtain the digest from the server, avoiding client-side SHA-1 (#3700) by @chaitanyabodlapatiDoRawandDoRawWriteTofor raw RESP protocol access (#3713) by @ofekshenawaDialerRetryBackofffunction option with constant and exponential helpers (#3706) by @mwhookerNOSCRIPTreplies are now surfaced as a typed error for easier handling (#3738) by @LINKIWIClientSetNamemethod toPubSub(#3727) by @Flack74ReplicaOfmethod replaces the deprecatedSlaveOf(#3720) by @CopilotHScannow supports types implementingencoding.BinaryUnmarshaler(#3768) by @Aaditya-dubey1🐛 Bug Fixes
CLIENT MAINT_NOTIFICATIONShandshake whenHELLOfails and connection falls back to RESP2; fail fast when explicitly enabled with RESP3 (#3788) by @ndyakovShouldRetrynow treatsnet.OpErrorwithOp == "dial"timeout errors as safe to retry since no command was sent (#3787) by @vladisa88baseClientclose logic; replaced with a bounded, concurrency-safe named-hook registry (#3785) by @ndyakovcloseNotifytimeouts) for connections already dropped by the server due to idle timeout (#3778) by @ofekshenawaConnStateMachine.notifyWaitersthat could wake multiple waiters under a single mutex hold and violate FIFO ordering (#3777) by @0x48coreREADONLYerrors embedded in Lua script error messages on read-only replicas so commands are correctly retried (#3769) by @zhengjileiVSimWithScores,VSimWithArgsWithScores, andVLinksWithScoreswhich were broken on RESP2 connections returning flat arrays instead of maps (#3767) by @CopilotZRangeArgswithRev+ByScore/ByLexincorrectly swappingStart/Stop, breakingZRANGESTORE(#3751) by @Copilotredisotel-native(#3743) by @ofekshenawaOptions(#3739) by @rubensayshiredisotel-native(#3735) by @ofekshenawaotel/semconv/v1.38.0inredisotel-native(#3731) by @wzy9607SET ... NXinstead of the deprecatedSETNXcommand (#3723) by @ndyakovTIMEas a keyless command for correct cluster routing (#3722) by @fatal10110pool.namebeing appended per node, which corrupted and dropped user-provided custom attributes (#3699) by @Jesse-Bonfire*baseClient.initConn(); added explicit nil option guards to client constructors (#3676) by @olde-ducke⚡ Performance
github.com/dgryski/go-rendezvousdependency with an in-repo implementation ininternal/hashtag, reducing the dependency graph while preserving algorithm parity (#3762) by @bigsk05🧪 Testing & Infrastructure
repository,ref, andclient-libs-test-image-taginputs to therun-testscomposite action;redis-versionis now optional so unstable builds useREDIS_VERSIONfrom the Makefile (#3749) by @dariaguy-compat=1.24in release scripts (#3714, #3754) by @ndyakov, @cxljs🧰 Maintenance
Conn.closedatomic field in favor of the state machine'sStateClosed(#3783) by @cxljsredisotel/redisotel-native(#3770) by @ndyakovmaps.Keys,slices.Collect,slices.Contains,clear(), andslices.SortFuncinstead of custom helpers (#3758, #3746) by @cxljsHGetAlldescribing behavior and complexity (#3776) by @0x48core👥 Contributors
We'd like to thank all the contributors who worked on this release!
@0x48core, @Aaditya-dubey1, @Copilot, @Flack74, @Jesse-Bonfire, @LINKIWI, @bigsk05, @chaitanyabodlapati, @cxljs, @dariaguy, @fatal10110, @mwhooker, @ndyakov, @ofekshenawa, @olde-ducke, @olzhas-sabiyev, @romanpovol, @rubensayshi, @vladisa88, @wzy9607, @zhengjilei
Full Changelog: https://github.com/redis/go-redis/compare/v9.18.0...v9.19.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Renovate Bot.