chore(deps): update module github.com/redis/go-redis/v9 to v9.20.0#102
Open
renovate[bot] wants to merge 1 commit into
Open
chore(deps): update module github.com/redis/go-redis/v9 to v9.20.0#102renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
32bff62 to
eda76d3
Compare
eda76d3 to
bb3ff0f
Compare
bb3ff0f to
c4aa96f
Compare
c4aa96f to
28f6947
Compare
28f6947 to
abcb529
Compare
abcb529 to
0c46d8d
Compare
0c46d8d to
ce530cd
Compare
eab5687 to
3603c05
Compare
3603c05 to
884b24d
Compare
884b24d to
215d29f
Compare
215d29f to
61ed2ac
Compare
61ed2ac to
f568049
Compare
f568049 to
7f7815b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v9.17.2→v9.20.0Release Notes
redis/go-redis (github.com/redis/go-redis/v9)
v9.20.0: 9.20.0Compare Source
🚀 Highlights
Redis 8.8 Support
This release adds support for Redis 8.8. The README's supported-versions list now includes Redis 8.8 alongside 8.0/8.2/8.4, and CI exercises the
8.8client-libs-test image across the full suite (Makefile, build workflow, doctests, run-tests action, and docker-compose).Coverage for the new commands that ship in the 8.x line, rounded out in this release:
AR*array data type (#3813) — new array data structure, exposed via theArrayCmdableinterface (see the experimental-features highlight below).INCREX(#3816) — atomic increment with expiration in a single round-trip.XNACK(#3790) — explicit negative-acknowledge of pending stream entries.XAUTOCLAIMPEL deletes (#3798) —XAUTOCLAIM/XAUTOCLAIMJUSTIDnow return the list of deleted message IDs from the pending entries list.TS.RANGEmultiple aggregators (#3791) —TS.RANGE/TS.REVRANGE/TS.MRANGE/TS.MREVRANGEaccept multiple aggregators in a single call.Z(UNION|INTER|DIFF)COUNTaggregator (#3802) —COUNTreducer for sorted-set set operations.JSON.SET FPHA(#3797) — newFPHAargument that specifies the floating-point type for homogeneous FP arrays.CI image bump (#3814) by @ofekshenawa. Command coverage contributions by @cxljs, @elena-kolevska, @Khukharr, @ndyakov, and @ofekshenawa.
Stable RESP3 for RediSearch (
UnstableResp3deprecated)FT.SEARCH,FT.AGGREGATE,FT.INFO,FT.SPELLCHECK, andFT.SYNDUMPnow parse RESP3 (map) responses into the same typed result objects as RESP2 —Val()andResult()work uniformly on both protocols, no flag required. Previously, RESP3 search responses requiredUnstableResp3: trueand were returned as opaque maps accessible only viaRawResult()/RawVal().As a result, the
UnstableResp3option is now a no-op across every options struct (Options,ClusterOptions,UniversalOptions,FailoverOptions,RingOptions) and has been marked// Deprecated:. The field is retained for backwards compatibility — existing code that setsUnstableResp3: truewill continue to compile and behave identically — but it will be removed in a future release and new code should not set it.RawResult()/RawVal()continue to work for callers that prefer the raw RESP payload.(#3741) by @ndyakov
Experimental Array Data Structure Commands
Adds an experimental
ArrayCmdableinterface with theAR*command family (ARSet,ARGet,ARGetRange,ARMSet,ARMGet,ARDel,ARDelRange,ARScan,ARSeek,ARNext,ARLastItems,ARGrep,ARGrepWithValues,ARInfo/ARInfoFull, and typed reducersAROpSum/AROpMin/AROpMax/AROpAnd/AROpOr/AROpXor/AROpMatch/AROpUsed) for working with Redis 8.8's new array data type. API is experimental and may change in a future release.(#3813) by @cxljs
✨ New Features
FT.SEARCH/FT.AGGREGATE/FT.INFO/FT.SPELLCHECK/FT.SYNDUMPresponses with backwards compatibility for RESP2 (#3741) by @ndyakovINCREXcommand support — atomic increment with expiration (#3816) by @ndyakovXNACKstream command for explicitly negative-acknowledging pending entries (#3790) by @elena-kolevskaTS.RANGE/TS.REVRANGE/TS.MRANGE/TS.MREVRANGEnow accept multiple aggregators in a single call (#3791) by @elena-kolevskaXAutoClaimdeleted IDs:XAUTOCLAIM/XAUTOCLAIMJUSTIDnow return the list of deleted message IDs from the PEL (#3798) by @KhukharrJSON.SET FPHA:JSON.SETaccepts a newFPHAargument that specifies the floating-point type for homogeneous floating-point arrays (#3797) by @ndyakovZUNION/ZINTER/ZDIFFaggregator now supportsCOUNT(#3802) by @ofekshenawaFT.HYBRIDvector validation: Validates hybrid-search vector input types and adds proper typed vector parameters (#3756) by @DengY11ClusterClient.PoolStats()now accumulatesWaitCountandWaitDurationNsacross all node pools (previously always zero) (#3809) by @LINKIWI🐛 Bug Fixes
CLUSTER SLOTSport-0 entries now fall back to the origin endpoint's port, fixingdial tcp <ip>:0: connection refusedon TLS-only clusters started with--port 0 --tls-port <port>(fixes #3726) (#3828) by @ndyakovPubSub.conn()now passes both regular (c.channels) and sharded (c.schannels) channels into the per-PubSubnewConnclosure. Previously,ClusterClient.SSubscribe-only PubSubs reconnected to a random node (because the routing closure saw an empty channel list), theSSUBSCRIBEwas sent to the wrong shard, and the resultingMOVEDreply was silently dropped (#3829) by @ndyakovWatchretry: User errors returned from aWatchcallback are no longer subjected to cluster-retry classification; transient cluster errors still retry, but a callback returning e.g.net.ErrClosedshort-circuits immediately (#3821) by @obiyangMasterAddr's concurrent sentinel probe now closes the non-winning sentinel clients instead of leaking them (#3827) by @cxljsreplicaAddrsno longer tears down the cached sentinel client when the replica list is empty, eliminating a continuous rediscovery loop on master-only Sentinel deployments that flooded logs and added per-operation latency (#3795) by @shahyash2609CloseConnhooks:Pool.CloseConnnow triggers registered hooks, fixing a memory leak when connections are closed explicitly rather than via the normal removal path (#3818) by @ndyakovdial tcperrors are now correctly classified as redirectable so cluster routing can recover from a single unreachable node (#3810) by @vladisa88Closehealth checks:ConnPool.Closenow only runs health checks against idle connections, avoiding spurious activity on connections still in use (#3805) by @ndyakovVLINKS/VLINKSWITHSCORESvector-set replies (#3820) by @romanpovol🧪 Testing & Infrastructure
waitForSentinelClusterStablepost-conditions: The sentinel test harness now waits for replicas to be fully connected (not just present in the count) and is robust to randomized spec ordering after failover specs, eliminating an intermittentExpected master to equal slaveflake (#3830) by @ndyakovgovulncheckworkflow: New scheduled GitHub Actions workflow runsgovulncheckon every push, PR, and weekly, surfacing newly disclosed Go vulnerabilities even when no code changes (#3779) by @solardome🧰 Maintenance
Cmd.Slot()lookup refactor: Caches the per-commandCommandInfoand short-circuits keyless commands before the switch dispatch, removing redundantPeekcalls (#3804) by @retr0-kernelmath/rand: Replacedinternal/randwithmath/randfrom the standard library now that the minimum Go version is 1.24 (#3823) by @cxljsConnPool, trimming the pool's footprint (#3826) by @cxljsextra/*package (#3817) by @ndyakov👥 Contributors
We'd like to thank all the contributors who worked on this release!
@cxljs, @DengY11, @elena-kolevska, @Khukharr, @LINKIWI, @ndyakov, @obiyang, @ofekshenawa, @retr0-kernel, @romanpovol, @shahyash2609, @solardome, @vladisa88
Full Changelog: redis/go-redis@v9.19.0...v9.20.0
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: redis/go-redis@v9.18.0...v9.19.0
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
v9.17.3: 9.17.3Compare Source
🐛 Bug Fixes
wantConnelements accumulation inwantConnQueuethat could cause resource leaks in high concurrency scenarios with dial failures (#3680) by @cyningsunXADDandXTRIMcommands to use exact threshold (=) whenApproxis false, ensuring precise stream trimming behavior (#3684) by @ndyakovConnMaxLifetimeJitterconfiguration to distribute connection expiration times and prevent the thundering herd problem when many connections expire simultaneously (#3666) by @cyningsunDialerRetriesandDialerRetryTimeoutfields toClusterOptions,RingOptions, andFailoverOptionsto allow configuring connection retry behavior for cluster, ring, and sentinel clients (#3686) by @naveenchander30Contributors
We'd like to thank all the contributors who worked on this release!
@cyningsun, @naveenchander30, and @ndyakov
Full Changelog: redis/go-redis@v9.17.2...v9.17.3
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ 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 was generated by Mend Renovate. View the repository job log.