Added support for Redis 8.6, including new commands and features for streams idempotent production and HOTKEYS.
Smart Client Handoff (Maintenance Notifications) for Cluster
note: Pending RS version release
This release introduces comprehensive support for Redis Enterprise Cluster maintenance notifications via SMIGRATING/SMIGRATED push notifications. The client now automatically handles slot migrations by:
Relaxing timeouts during migration (SMIGRATING) to prevent false failures
Triggering lazy cluster state reloads upon completion (SMIGRATED)
Enabling seamless operations during Redis Enterprise maintenance windows
Added comprehensive OpenTelemetry metrics support following the OpenTelemetry Database Client Semantic Conventions. The implementation uses a Bridge Pattern to keep the core library dependency-free while providing optional metrics instrumentation through the new extra/redisotel-native package.
Metric groups include:
Command metrics: Operation duration with retry tracking
Connection basic: Connection count and creation time
Resiliency: Errors, handoffs, timeout relaxation
Connection advanced: Wait time and use time
Pubsub metrics: Published and received messages
Stream metrics: Processing duration and maintenance notifications
HOTKEYS Commands: Added support for Redis HOTKEYS feature for identifying hot keys based on CPU consumption and network utilization (#3695) by @ofekshenawa
Streams Idempotent Production: Added support for Redis 8.6+ Streams Idempotent Production with ProducerID, IdempotentID, IdempotentAuto in XAddArgs and new XCFGSET command (#3693) by @ofekshenawa
NaN Values for TimeSeries: Added support for NaN (Not a Number) values in Redis time series commands (#3687) by @ofekshenawa
DialerRetries Options: Added DialerRetries and DialerRetryTimeout to ClusterOptions, RingOptions, and FailoverOptions (#3686) by @naveenchander30
ConnMaxLifetimeJitter: Added jitter configuration to distribute connection expiration times and prevent thundering herd (#3666) by @cyningsun
Digest Helper Functions: Added DigestString and DigestBytes helper functions for client-side xxh3 hashing compatible with Redis DIGEST command (#3679) by @ofekshenawa
SMIGRATED New Format: Updated SMIGRATED parser to support new format and remember original host:port (#3697) by @ndyakov
Cluster State Reload Interval: Added cluster state reload interval option for maintenance notifications (#3663) by @ndyakov
🐛 Bug Fixes
PubSub nil pointer dereference: Fixed nil pointer dereference in PubSub after WithTimeout() - pubSubPool is now properly cloned (#3710) by @Copilot
MaintNotificationsConfig nil check: Guard against nil MaintNotificationsConfig in initConn (#3707) by @veeceey
wantConnQueue zombie elements: Fixed zombie wantConn elements accumulation in wantConnQueue (#3680) by @cyningsun
XADD/XTRIM approx flag: Fixed XADD and XTRIM to use = when approx is false (#3684) by @ndyakov
Sentinel timeout retry: When connection to a sentinel times out, attempt to connect to other sentinels (#3654) by @cxljs
⚡ Performance
Fuzz test optimization: Eliminated repeated string conversions, used functional approach for cleaner operation selection (#3692) by @feiguoL
Pre-allocate capacity: Pre-allocate slice capacity to prevent multiple capacity expansions (#3689) by @feelshu
🧪 Testing
Comprehensive TLS tests: Added comprehensive TLS tests and example for standalone, cluster, and certificate authentication (#3681) by @ndyakov
Redis 8.6: Updated CI to use Redis 8.6-pre (#3685) by @ndyakov
🧰 Maintenance
Deprecation warnings: Added deprecation warnings for commands based on Redis documentation (#3673) by @ndyakov
Use errors.Join(): Replaced custom error join function with standard library errors.Join() (#3653) by @cxljs
Use Go 1.21 min/max: Use Go 1.21's built-in min/max functions (#3656) by @cxljs
Proper formatting: Code formatting improvements (#3670) by @12ya
Set commands documentation: Added comprehensive documentation to all set command methods (#3642) by @iamamirsalehi
MaxActiveConns docs: Added default value documentation for MaxActiveConns (#3674) by @codykaup
README example update: Updated README example (#3657) by @cxljs
Cluster maintnotif example: Added example application for cluster maintenance notifications (#3651) by @ndyakov
👥 Contributors
We'd like to thank all the contributors who worked on this release!
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.17.3` → `v9.18.0` |  |  |
---
### Release Notes
<details>
<summary>redis/go-redis (github.com/redis/go-redis/v9)</summary>
### [`v9.18.0`](https://github.com/redis/go-redis/releases/tag/v9.18.0): 9.18.0
[Compare Source](https://github.com/redis/go-redis/compare/v9.17.3...v9.18.0)
##### Redis 8.6 Support
Added support for Redis 8.6, including new commands and features for streams idempotent production and HOTKEYS.
##### Smart Client Handoff (Maintenance Notifications) for Cluster
**note: Pending RS version release**
This release introduces comprehensive support for Redis Enterprise Cluster maintenance notifications via SMIGRATING/SMIGRATED push notifications. The client now automatically handles slot migrations by:
- **Relaxing timeouts during migration** (SMIGRATING) to prevent false failures
- **Triggering lazy cluster state reloads** upon completion (SMIGRATED)
- Enabling seamless operations during Redis Enterprise maintenance windows
([#​3643](https://github.com/redis/go-redis/pull/3643)) by [@​ndyakov](https://github.com/ndyakov)
##### OpenTelemetry Native Metrics Support
Added comprehensive OpenTelemetry metrics support following the [OpenTelemetry Database Client Semantic Conventions](https://opentelemetry.io/docs/specs/semconv/database/database-metrics/). The implementation uses a Bridge Pattern to keep the core library dependency-free while providing optional metrics instrumentation through the new `extra/redisotel-native` package.
**Metric groups include:**
- Command metrics: Operation duration with retry tracking
- Connection basic: Connection count and creation time
- Resiliency: Errors, handoffs, timeout relaxation
- Connection advanced: Wait time and use time
- Pubsub metrics: Published and received messages
- Stream metrics: Processing duration and maintenance notifications
([#​3637](https://github.com/redis/go-redis/pull/3637)) by [@​ofekshenawa](https://github.com/ofekshenawa)
#### ✨ New Features
- **HOTKEYS Commands**: Added support for Redis HOTKEYS feature for identifying hot keys based on CPU consumption and network utilization ([#​3695](https://github.com/redis/go-redis/pull/3695)) by [@​ofekshenawa](https://github.com/ofekshenawa)
- **Streams Idempotent Production**: Added support for Redis 8.6+ Streams Idempotent Production with `ProducerID`, `IdempotentID`, `IdempotentAuto` in `XAddArgs` and new `XCFGSET` command ([#​3693](https://github.com/redis/go-redis/pull/3693)) by [@​ofekshenawa](https://github.com/ofekshenawa)
- **NaN Values for TimeSeries**: Added support for NaN (Not a Number) values in Redis time series commands ([#​3687](https://github.com/redis/go-redis/pull/3687)) by [@​ofekshenawa](https://github.com/ofekshenawa)
- **DialerRetries Options**: Added `DialerRetries` and `DialerRetryTimeout` to `ClusterOptions`, `RingOptions`, and `FailoverOptions` ([#​3686](https://github.com/redis/go-redis/pull/3686)) by [@​naveenchander30](https://github.com/naveenchander30)
- **ConnMaxLifetimeJitter**: Added jitter configuration to distribute connection expiration times and prevent thundering herd ([#​3666](https://github.com/redis/go-redis/pull/3666)) by [@​cyningsun](https://github.com/cyningsun)
- **Digest Helper Functions**: Added `DigestString` and `DigestBytes` helper functions for client-side xxh3 hashing compatible with Redis DIGEST command ([#​3679](https://github.com/redis/go-redis/pull/3679)) by [@​ofekshenawa](https://github.com/ofekshenawa)
- **SMIGRATED New Format**: Updated SMIGRATED parser to support new format and remember original host:port ([#​3697](https://github.com/redis/go-redis/pull/3697)) by [@​ndyakov](https://github.com/ndyakov)
- **Cluster State Reload Interval**: Added cluster state reload interval option for maintenance notifications ([#​3663](https://github.com/redis/go-redis/pull/3663)) by [@​ndyakov](https://github.com/ndyakov)
#### 🐛 Bug Fixes
- **PubSub nil pointer dereference**: Fixed nil pointer dereference in PubSub after `WithTimeout()` - `pubSubPool` is now properly cloned ([#​3710](https://github.com/redis/go-redis/pull/3710)) by [@​Copilot](https://github.com/apps/copilot-swe-agent)
- **MaintNotificationsConfig nil check**: Guard against nil `MaintNotificationsConfig` in `initConn` ([#​3707](https://github.com/redis/go-redis/pull/3707)) by [@​veeceey](https://github.com/veeceey)
- **wantConnQueue zombie elements**: Fixed zombie `wantConn` elements accumulation in `wantConnQueue` ([#​3680](https://github.com/redis/go-redis/pull/3680)) by [@​cyningsun](https://github.com/cyningsun)
- **XADD/XTRIM approx flag**: Fixed XADD and XTRIM to use `=` when approx is false ([#​3684](https://github.com/redis/go-redis/pull/3684)) by [@​ndyakov](https://github.com/ndyakov)
- **Sentinel timeout retry**: When connection to a sentinel times out, attempt to connect to other sentinels ([#​3654](https://github.com/redis/go-redis/pull/3654)) by [@​cxljs](https://github.com/cxljs)
#### ⚡ Performance
- **Fuzz test optimization**: Eliminated repeated string conversions, used functional approach for cleaner operation selection ([#​3692](https://github.com/redis/go-redis/pull/3692)) by [@​feiguoL](https://github.com/feiguoL)
- **Pre-allocate capacity**: Pre-allocate slice capacity to prevent multiple capacity expansions ([#​3689](https://github.com/redis/go-redis/pull/3689)) by [@​feelshu](https://github.com/feelshu)
#### 🧪 Testing
- **Comprehensive TLS tests**: Added comprehensive TLS tests and example for standalone, cluster, and certificate authentication ([#​3681](https://github.com/redis/go-redis/pull/3681)) by [@​ndyakov](https://github.com/ndyakov)
- **Redis 8.6**: Updated CI to use Redis 8.6-pre ([#​3685](https://github.com/redis/go-redis/pull/3685)) by [@​ndyakov](https://github.com/ndyakov)
#### 🧰 Maintenance
- **Deprecation warnings**: Added deprecation warnings for commands based on Redis documentation ([#​3673](https://github.com/redis/go-redis/pull/3673)) by [@​ndyakov](https://github.com/ndyakov)
- **Use errors.Join()**: Replaced custom error join function with standard library `errors.Join()` ([#​3653](https://github.com/redis/go-redis/pull/3653)) by [@​cxljs](https://github.com/cxljs)
- **Use Go 1.21 min/max**: Use Go 1.21's built-in min/max functions ([#​3656](https://github.com/redis/go-redis/pull/3656)) by [@​cxljs](https://github.com/cxljs)
- **Proper formatting**: Code formatting improvements ([#​3670](https://github.com/redis/go-redis/pull/3670)) by [@​12ya](https://github.com/12ya)
- **Set commands documentation**: Added comprehensive documentation to all set command methods ([#​3642](https://github.com/redis/go-redis/pull/3642)) by [@​iamamirsalehi](https://github.com/iamamirsalehi)
- **MaxActiveConns docs**: Added default value documentation for `MaxActiveConns` ([#​3674](https://github.com/redis/go-redis/pull/3674)) by [@​codykaup](https://github.com/codykaup)
- **README example update**: Updated README example ([#​3657](https://github.com/redis/go-redis/pull/3657)) by [@​cxljs](https://github.com/cxljs)
- **Cluster maintnotif example**: Added example application for cluster maintenance notifications ([#​3651](https://github.com/redis/go-redis/pull/3651)) by [@​ndyakov](https://github.com/ndyakov)
#### 👥 Contributors
We'd like to thank all the contributors who worked on this release!
[@​12ya](https://github.com/12ya), [@​Copilot](https://github.com/apps/copilot-swe-agent), [@​codykaup](https://github.com/codykaup), [@​cxljs](https://github.com/cxljs), [@​cyningsun](https://github.com/cyningsun), [@​feelshu](https://github.com/feelshu), [@​feiguoL](https://github.com/feiguoL), [@​iamamirsalehi](https://github.com/iamamirsalehi), [@​naveenchander30](https://github.com/naveenchander30), [@​ndyakov](https://github.com/ndyakov), [@​ofekshenawa](https://github.com/ofekshenawa), [@​veeceey](https://github.com/veeceey)
</details>
---
### Configuration
📅 **Schedule**: 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xNy4xIiwidXBkYXRlZEluVmVyIjoiNDMuMTcuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
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.17.3→v9.18.0Release Notes
redis/go-redis (github.com/redis/go-redis/v9)
v9.18.0: 9.18.0Compare Source
Redis 8.6 Support
Added support for Redis 8.6, including new commands and features for streams idempotent production and HOTKEYS.
Smart Client Handoff (Maintenance Notifications) for Cluster
note: Pending RS version release
This release introduces comprehensive support for Redis Enterprise Cluster maintenance notifications via SMIGRATING/SMIGRATED push notifications. The client now automatically handles slot migrations by:
(#3643) by @ndyakov
OpenTelemetry Native Metrics Support
Added comprehensive OpenTelemetry metrics support following the OpenTelemetry Database Client Semantic Conventions. The implementation uses a Bridge Pattern to keep the core library dependency-free while providing optional metrics instrumentation through the new
extra/redisotel-nativepackage.Metric groups include:
(#3637) by @ofekshenawa
✨ New Features
ProducerID,IdempotentID,IdempotentAutoinXAddArgsand newXCFGSETcommand (#3693) by @ofekshenawaDialerRetriesandDialerRetryTimeouttoClusterOptions,RingOptions, andFailoverOptions(#3686) by @naveenchander30DigestStringandDigestByteshelper functions for client-side xxh3 hashing compatible with Redis DIGEST command (#3679) by @ofekshenawa🐛 Bug Fixes
WithTimeout()-pubSubPoolis now properly cloned (#3710) by @CopilotMaintNotificationsConfigininitConn(#3707) by @veeceeywantConnelements accumulation inwantConnQueue(#3680) by @cyningsun=when approx is false (#3684) by @ndyakov⚡ Performance
🧪 Testing
🧰 Maintenance
errors.Join()(#3653) by @cxljsMaxActiveConns(#3674) by @codykaup👥 Contributors
We'd like to thank all the contributors who worked on this release!
@12ya, @Copilot, @codykaup, @cxljs, @cyningsun, @feelshu, @feiguoL, @iamamirsalehi, @naveenchander30, @ndyakov, @ofekshenawa, @veeceey
Configuration
📅 Schedule: 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.
This PR has been generated by Renovate Bot.