Added support for Redis 8.6, including new commands and features for streams idempotent production and HOTKEYS.
This release introduces comprehensive support for Redis 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
(#3637) by @ofekshenawa
- 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,IdempotentAutoinXAddArgsand newXCFGSETcommand (#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
DialerRetriesandDialerRetryTimeouttoClusterOptions,RingOptions, andFailoverOptions(#3686) by @naveenchander30 - ConnMaxLifetimeJitter: Added jitter configuration to distribute connection expiration times and prevent thundering herd (#3666) by @cyningsun
- Digest Helper Functions: Added
DigestStringandDigestByteshelper 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
- PubSub nil pointer dereference: Fixed nil pointer dereference in PubSub after
WithTimeout()-pubSubPoolis now properly cloned (#3710) by @Copilot - MaintNotificationsConfig nil check: Guard against nil
MaintNotificationsConfigininitConn(#3707) by @veeceey - wantConnQueue zombie elements: Fixed zombie
wantConnelements accumulation inwantConnQueue(#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
- 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
- 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
- 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
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
Full Changelog: https://github.com/redis/go-redis/compare/v9.17.0...v9.18.0
This release updates the minimum required Go version to 1.21. This is part of a gradual migration strategy where the minimum supported Go version will be three versions behind the latest release. With each new Go version release, we will bump the minimum version by one, ensuring compatibility while staying current with the Go ecosystem.
This release includes several important stability fixes:
- Fixed a critical panic in the handoff worker manager that could occur when handling nil errors
- Improved test reliability for Smart Client Handoff functionality
- Fixed logging format issues that could cause runtime errors
- Fixed panic on nil error in handoffWorkerManager closeConnFromRequest (#3633) by @ccoVeille
- Fixed bad sprintf syntax in logging (#3632) by @ccoVeille
- Updated minimum Go version to 1.21 (#3640) by @ndyakov
- Use Go 1.20 idiomatic string<->byte conversion (#3435) by @justinhwang
- Reduce flakiness of Smart Client Handoff test (#3641) by @kiryazovi-redis
- Revert PR #3634 (Observability metrics phase1) (#3635) by @ofekshenawa
We'd like to thank all the contributors who worked on this release!
@justinhwang, @ndyakov, @kiryazovi-redis, @fengve, @ccoVeille, @ofekshenawa
Full Changelog: https://github.com/redis/go-redis/compare/v9.18.0-beta.1...v9.18.0-beta.2
This beta release introduces comprehensive support for Redis COMMAND-based request and response policy routing for cluster clients. This feature enables intelligent command routing and response aggregation based on Redis command metadata.
Key Features:
- Command Policy Loader: Automatically parses and caches COMMAND metadata with routing/aggregation hints
- Enhanced Routing Engine: Supports all request policies including:
default(keyless)- Commands without keysdefault(hashslot)- Commands with hash slot routingall_shards- Commands that need to run on all shardsall_nodes- Commands that need to run on all nodesmulti_shard- Commands that span multiple shardsspecial- Commands with custom routing logic
- Response Aggregator: Intelligently combines multi-shard replies based on response policies:
all_succeeded- All shards must succeedone_succeeded- At least one shard must succeedagg_sum- Aggregate numeric responsesspecial- Custom aggregation logic (e.g., FT.CURSOR)
- Raw Command Support: Policies are enforced on
Client.Do(ctx, args...)
This feature is particularly useful for Redis Stack commands like RediSearch that need to operate across multiple shards in a cluster.
Fixed a critical defect in the connection pool's turn management mechanism that could lead to connection leaks under certain conditions. The fix ensures proper 1:1 correspondence between turns and connections.
- Request and Response Policy Based Routing in Cluster Mode (#3422) by @ofekshenawa
- Fixed connection pool turn management to prevent connection leaks (#3626) by @cyningsun
- chore(deps): bump rojopolis/spellcheck-github-actions from 0.54.0 to 0.55.0 (#3627)
We'd like to thank all the contributors who worked on this release!
@cyningsun, @ofekshenawa, @ndyakov
Full Changelog: https://github.com/redis/go-redis/compare/v9.17.1...v9.18.0-beta.1
- add wait to keyless commands list (#3615) by @marcoferrer
- fix(time): remove cached time optimization (#3611) by @ndyakov
- chore(deps): bump golangci/golangci-lint-action from 9.0.0 to 9.1.0 (#3609)
- chore(deps): bump actions/checkout from 5 to 6 (#3610)
- chore(script): fix help call in tag.sh (#3606) by @ndyakov
We'd like to thank all the contributors who worked on this release!
@marcoferrer and @ndyakov
Full Changelog: https://github.com/redis/go-redis/compare/v9.17.0...v9.17.1
Added support for Redis 8.4, including new commands and features (#3572)
Introduced typed errors for better error handling using errors.As instead of string checks. Errors can now be wrapped and set to commands in hooks without breaking library functionality (#3602)
- CAS/CAD Commands: Added support for Compare-And-Set/Compare-And-Delete operations with conditional matching (
IFEQ,IFNE,IFDEQ,IFDNE) (#3583, #3595) - MSETEX: Atomically set multiple key-value pairs with expiration options and conditional modes (#3580)
- XReadGroup CLAIM: Consume both incoming and idle pending entries from streams in a single call (#3578)
- ACL Commands: Added
ACLGenPass,ACLUsers, andACLWhoAmI(#3576) - SLOWLOG Commands: Added
SLOWLOG LENandSLOWLOG RESET(#3585) - LATENCY Commands: Added
LATENCY LATESTandLATENCY RESET(#3584)
- Hybrid Search: Added EXPERIMENTAL support for the new
FT.HYBRIDcommand (#3573) - Vector Range: Added
VRANGEcommand for vector sets (#3543) - FT.INFO Enhancements: Added vector-specific attributes in FT.INFO response (#3596)
- Improved Connection Success Rate: Implemented FIFO queue-based fairness and context pattern for connection creation to prevent premature cancellation under high concurrency (#3518)
- Connection State Machine: Resolved race conditions and improved pool performance with proper state tracking (#3559)
- Pool Performance: Significant performance improvements with faster semaphores, lockless hook manager, and reduced allocations (47-67% faster Get/Put operations) (#3565)
- Canceled Metric Attribute: Added 'canceled' metrics attribute to distinguish context cancellation errors from other errors (#3566)
- Typed errors with wrapping support (#3602) by @ndyakov
- CAS/CAD commands (marked as experimental) (#3583, #3595) by @ndyakov, @htemelski-redis
- MSETEX command support (#3580) by @ofekshenawa
- XReadGroup CLAIM argument (#3578) by @ofekshenawa
- ACL commands: GenPass, Users, WhoAmI (#3576) by @destinyoooo
- SLOWLOG commands: LEN, RESET (#3585) by @destinyoooo
- LATENCY commands: LATEST, RESET (#3584) by @destinyoooo
- Hybrid search command (FT.HYBRID) (#3573) by @htemelski-redis
- Vector range command (VRANGE) (#3543) by @cxljs
- Vector-specific attributes in FT.INFO (#3596) by @ndyakov
- Improved connection pool success rate with FIFO queue (#3518) by @cyningsun
- Canceled metrics attribute for context errors (#3566) by @pvragov
- Fixed Failover Client MaintNotificationsConfig (#3600) by @ajax16384
- Fixed ACLGenPass function to use the bit parameter (#3597) by @destinyoooo
- Return error instead of panic from commands (#3568) by @dragneelfps
- Safety harness in
joinErrorsto prevent panic (#3577) by @manisharma
- Connection state machine with race condition fixes (#3559) by @ndyakov
- Pool performance improvements: 47-67% faster Get/Put, 33% less memory, 50% fewer allocations (#3565) by @ndyakov
- Updated to Redis 8.4.0 image (#3603) by @ndyakov
- Added Redis 8.4-RC1-pre to CI (#3572) by @ndyakov
- Refactored tests for idiomatic Go (#3561, #3562, #3563) by @12ya
We'd like to thank all the contributors who worked on this release!
@12ya, @ajax16384, @cxljs, @cyningsun, @destinyoooo, @dragneelfps, @htemelski-redis, @manisharma, @ndyakov, @ofekshenawa, @pvragov
Full Changelog: https://github.com/redis/go-redis/compare/v9.16.0...v9.17.0
This release introduces comprehensive support for Redis maintenance notifications, enabling applications to handle server maintenance events gracefully. The new maintnotifications package provides:
- RESP3 Push Notifications: Full support for Redis RESP3 protocol push notifications
- Connection Handoff: Automatic connection migration during server maintenance with configurable retry policies and circuit breakers
- Graceful Degradation: Configurable timeout relaxation during maintenance windows to prevent false failures
- Event-Driven Architecture: Background workers with on-demand scaling for efficient handoff processing
- Production-Ready: Comprehensive E2E testing framework and monitoring capabilities
For detailed usage examples and configuration options, see the maintenance notifications documentation.
- Trace Filtering: Add support for filtering traces for specific commands, including pipeline operations and dial operations (#3519, #3550)
- New
TraceCmdFilteroption to selectively trace commands - Reduces overhead by excluding high-frequency or low-value commands from traces
- New
- Pipeline Error Handling: Fix issue where pipeline repeatedly sets the same error (#3525)
- Connection Pool: Ensure re-authentication does not interfere with connection handoff operations (#3547)
- Hash Commands: Update hash command implementations (#3523)
- OpenTelemetry: Use
metric.WithAttributeSetto avoid unnecessary attribute copying in redisotel (#3552)
- Cluster Client: Add explanation for why
MaxRetriesis disabled forClusterClient(#3551)
- E2E Testing: Upgrade E2E testing framework with improved reliability and coverage (#3541)
- Release Process: Improved resiliency of the release process (#3530)
- Bump
rojopolis/spellcheck-github-actionsfrom 0.51.0 to 0.52.0 (#3520) - Bump
github/codeql-actionfrom 3 to 4 (#3544)
We'd like to thank all the contributors who worked on this release!
@ndyakov, @htemelski-redis, @Sovietaced, @Udhayarajan, @boekkooi-impossiblecloud, @Pika-Gopher, @cxljs, @huiyifyj, @omid-h70
Full Changelog: https://github.com/redis/go-redis/compare/v9.14.0...v9.16.0
This beta release includes a pre-production version of processing push notifications and hitless upgrades.
- chore: Update hash_commands.go (#3523)
- feat: RESP3 notifications support & Hitless notifications handling (#3418)
- fix: pipeline repeatedly sets the error (#3525)
- chore(deps): bump rojopolis/spellcheck-github-actions from 0.51.0 to 0.52.0 (#3520)
- feat(e2e-testing): maintnotifications e2e and refactor (#3526)
- feat(tag.sh): Improved resiliency of the release process (#3530)
We'd like to thank all the contributors who worked on this release!
@cxljs, @ndyakov, @htemelski-redis, and @omid-h70
This beta release includes a pre-production version of processing push notifications and hitless upgrades.
Hitless upgrades is a major new feature that allows for zero-downtime upgrades in Redis clusters. You can find more information in the Hitless Upgrades documentation.
- [CAE-1088] & [CAE-1072] feat: RESP3 notifications support & Hitless notifications handling (#3418)
We'd like to thank all the contributors who worked on this release!
@ndyakov, @htemelski-redis, @ofekshenawa
- Added batch process method to the pipeline (#3510)
- Added batch process method to the pipeline (#3510)
- fix: SetErr on Cmd if the command cannot be queued correctly in multi/exec (#3509)
- Updates release drafter config to exclude dependabot (#3511)
- chore(deps): bump actions/setup-go from 5 to 6 (#3504)
We'd like to thank all the contributors who worked on this release!
@elena-kolevska, @htemelski-redis and @ndyakov
- Pipeliner expose queued commands (#3496)
- Ensure that JSON.GET returns Nil response (#3470)
- Fixes on Read and Write buffer sizes and UniversalOptions
- Pipeliner expose queued commands (#3496)
- fix(test): fix a timing issue in pubsub test (#3498)
- Allow users to enable read-write splitting in failover mode. (#3482)
- Set the read/write buffer size of the sentinel client to 4KiB (#3476)
- fix(otel): register wait metrics (#3499)
- Support subscriptions against cluster slave nodes (#3480)
- Add wait metrics to otel (#3493)
- Clean failing timeout implementation (#3472)
- Do not assume that all non-IP hosts are loopbacks (#3085)
- Ensure that JSON.GET returns Nil response (#3470)
- fix(otel): register wait metrics (#3499)
- fix(make test): Add default env in makefile (#3491)
- Update the introduction to running tests in README.md (#3495)
- test: Add comprehensive edge case tests for IncrByFloat command (#3477)
- Set the default read/write buffer size of Redis connection to 32KiB (#3483)
- Bumps test image to 8.2.1-pre (#3478)
- fix UniversalOptions miss ReadBufferSize and WriteBufferSize options (#3485)
- chore(deps): bump actions/checkout from 4 to 5 (#3484)
- Removes dry run for stale issues policy (#3471)
- Update otel metrics URL (#3474)
We'd like to thank all the contributors who worked on this release!
@LINKIWI, @cxljs, @cybersmeashish, @elena-kolevska, @htemelski-redis, @mwhooker, @ndyakov, @ofekshenawa, @suever
In the last version (9.12.0) the client introduced bigger write and read buffer sized. The default value we set was 512KiB.
However, users reported that this is too big for most use cases and can lead to high memory usage.
In this version the default value is changed to 256KiB. The README.md was updated to reflect the
correct default value and include a note that the default value can be changed.
- fix(options): Add buffer sizes to failover. Update README (#3468)
- fix(options): Add buffer sizes to failover. Update README (#3468)
- chore: update & fix otel example (#3466)
We'd like to thank all the contributors who worked on this release!
@ndyakov and @vmihailenco
- This release includes support for Redis 8.2.
- Introduces an experimental Query Builders for
FTSearch,FTAggregateand other search commands. - Adds support for
EPSILONoption inFT.VSIM. - Includes bug fixes and improvements contributed by the community related to ring and redisotel.
- Improve stale issue workflow (#3458)
- chore(ci): Add 8.2 rc2 pre build for CI (#3459)
- Added new stream commands (#3450)
- feat: Add "skip_verify" to Sentinel (#3428)
- fix:
errors.Joinrequires Go 1.20 or later (#3442) - DOC-4344 document quickstart examples (#3426)
- feat(bitop): add support for the new bitop operations (#3409)
- feat: recover addIdleConn may occur panic (#2445)
- feat(ring): specify custom health check func via HeartbeatFn option (#2940)
- Add Query Builder for RediSearch commands (#3436)
- add configurable buffer sizes for Redis connections (#3453)
- Add VAMANA vector type to RediSearch (#3449)
- VSIM add
EPSILONoption (#3454) - Add closing support to otel metrics instrumentation (#3444)
- fix(redisotel): fix buggy append in reportPoolStats (#3122)
- fix(search): return results even if doc is empty (#3457)
- [ISSUE-3402]: Ring.Pipelined return dial timeout error (#3403)
- Merges stale issues jobs into one job with two steps (#3463)
- improve code readability (#3446)
- chore(release): 9.12.0-beta.1 (#3460)
- DOC-5472 time series doc examples (#3443)
- Add VAMANA compression algorithm tests (#3461)
- bumped redis 8.2 version used in the CI/CD (#3451)
We'd like to thank all the contributors who worked on this release!
@andy-stark-redis, @cxljs, @elena-kolevska, @htemelski-redis, @jouir, @monkey92t, @ndyakov, @ofekshenawa, @rokn, @smnvdev, @strobil and @wzy9607
- @htemelski-redis made their first contribution in #3409
- @smnvdev made their first contribution in #3403
- @rokn made their first contribution in #3444
Fixes TxPipeline to work correctly in cluster scenarios, allowing execution of commands only in the same slot.
- Set cluster slot for
scancommands, rather than random (#2623) - Add CredentialsProvider field to UniversalOptions (#2927)
- feat(redisotel): add WithCallerEnabled option (#3415)
- fix(txpipeline): keyless commands should take the slot of the keyed (#3411)
- fix(loading): cache the loaded flag for slave nodes (#3410)
- fix(txpipeline): should return error on multi/exec on multiple slots (#3408)
- fix: check if the shard exists to avoid returning nil (#3396)
- feat: optimize connection pool waitTurn (#3412)
- chore(ci): update CI redis builds (#3407)
- chore: remove a redundant method from
Ring,ClientandClusterClient(#3401) - test: refactor TestBasicCredentials using table-driven tests (#3406)
- perf: reduce unnecessary memory allocation operations (#3399)
- fix: insert entry during iterating over a map (#3398)
- DOC-5229 probabilistic data type examples (#3413)
- chore(deps): bump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (#3414)
We'd like to thank all the contributors who worked on this release!
@andy-stark-redis, @boekkooi-impossiblecloud, @cxljs, @dcherubini, @dependabot[bot], @iamamirsalehi, @ndyakov, @pete-woods, @twz915 and dependabot[bot]
go-redis now supports vector sets. This data type is marked
as "in preview" in Redis and its support in go-redis is marked as experimental. You can find examples in the documentation and
in the doctests folder.
- feat: support vectorset (#3375)
We'd like to thank all the contributors who worked on this release!
@AndBobsYourUncle, @andy-stark-redis, @fukua95 and @ndyakov
- Token-based Authentication: Added
StreamingCredentialsProviderfor dynamic credential updates (experimental)- Can be used with go-redis-entraid for Azure AD authentication
- Connection Statistics: Added connection waiting statistics for better monitoring
- Failover Improvements: Added
ParseFailoverURLfor easier failover configuration - Ring Client Enhancements: Added shard access methods for better Pub/Sub management
- Added
StreamingCredentialsProviderfor token-based authentication (#3320)- Supports dynamic credential updates
- Includes connection close hooks
- Note: Currently marked as experimental
- Added
ParseFailoverURLfor parsing failover URLs (#3362) - Added connection waiting statistics (#2804)
- Added new utility functions:
- Added Ring client shard access methods:
GetShardClients()to retrieve all active shard clientsGetShardClientForKey(key string)to get the shard client for a specific key (#3388)
- Fixed routing reads to loading slave nodes (#3370)
- Added support for nil lag in XINFO GROUPS (#3369)
- Fixed pool acquisition timeout issues (#3381)
- Optimized unnecessary copy operations (#3376)
- Updated documentation for XINFO GROUPS with nil lag support (#3369)
- Added package-level comments for new features
- Optimized
ReplaceSpacesfunction (#3383) - Set default value for
Options.Protocolininit()(#3387) - Exported pool errors for public consumption (#3380)
- Updated Redis CI to version 8.0.1 (#3372)
- Updated spellcheck GitHub Actions (#3389)
- Removed unused parameters (#3382, #3384)
- Added unit tests for pool acquisition timeout (#3381)
- Added unit tests for utility functions (#3377)
We would like to thank all the contributors who made this release possible:
@ndyakov, @ofekshenawa, @LINKIWI, @iamamirsalehi, @fukua95, @lzakharov, @DengY11
For a complete list of changes, see the full changelog.
- Redis 8 Support: Full compatibility with Redis 8.0, including testing and CI integration
- Enhanced Hash Operations: Added support for new hash commands (
HGETDEL,HGETEX,HSETEX) andHSTRLENcommand - Search Improvements: Enabled Search DIALECT 2 by default and added
CountOnlyargument forFT.Search
- Added support for new hash commands:
HGETDEL,HGETEX,HSETEX(#3305) - Added
HSTRLENcommand for hash operations (#2843) - Added
Domethod for raw query by single connection frompool.Conn()(#3182) - Prevent false-positive marshaling by treating zero time.Time as empty in isEmptyValue (#3273)
- Added FailoverClusterClient support for Universal client (#2794)
- Added support for cluster mode with
IsClusterModeconfig parameter (#3255) - Added client name support in
HELLORESP handshake (#3294) - Enabled Search DIALECT 2 by default (#3213)
- Added read-only option for failover configurations (#3281)
- Added
CountOnlyargument forFT.Searchto useLIMIT 0 0(#3338) - Added
DBoption support inNewFailoverClusterClient(#3342) - Added
nilcheck for the options when creating a client (#3363)
- Fixed
PubSubconcurrency safety issues (#3360) - Fixed panic caused when argument is
nil(#3353) - Improved error handling when fetching master node from sentinels (#3349)
- Fixed connection pool timeout issues and increased retries (#3298)
- Fixed context cancellation error leading to connection spikes on Primary instances (#3190)
- Fixed RedisCluster client to consider
MASTERDOWNa retriable error (#3164) - Fixed tracing to show complete commands instead of truncated versions (#3290)
- Fixed OpenTelemetry instrumentation to prevent multiple span reporting (#3168)
- Fixed
FT.SearchLimit argument and addedCountOnlyargument for limit 0 0 (#3338) - Fixed missing command in interface (#3344)
- Fixed slot calculation for
COUNTKEYSINSLOTcommand (#3327) - Updated PubSub implementation with correct context (#3329)
- Added hash search examples (#3357)
- Fixed documentation comments (#3351)
- Added
CountOnlysearch example (#3345) - Added examples for list commands:
LLEN,LPOP,LPUSH,LRANGE,RPOP,RPUSH(#3234) - Added
SADDandSMEMBERScommand examples (#3242) - Updated
README.mdto use Redis Discord guild (#3331) - Updated
HExpirecommand documentation (#3355) - Featured OpenTelemetry instrumentation more prominently (#3316)
- Updated
README.mdwith additional information (#310ce55)
- Bound connection pool background dials to configured dial timeout (#3089)
- Ensured context isn't exhausted via concurrent query (#3334)
- Updated testing image to Redis 8.0-RC2 (#3361)
- Enabled CI for Redis CE 8.0 (#3274)
- Updated various dependencies:
- Migrated golangci-lint configuration to v2 format (#3354)
- Enabled Search DIALECT 2 by default (#3213)
- Dropped RedisGears (Triggers and Functions) support (#3321)
- Dropped FT.PROFILE command that was never enabled (#3323)
- Fixed network error handling on SETINFO (CVE-2025-29923) (#3295)
- Added integration tests for Redis 8 behavior changes in Redis Search (#3337)
- Added vector types INT8 and UINT8 tests (#3299)
- Added test codes for search_commands.go (#3285)
- Fixed example test sorting (#3292)
We would like to thank all the contributors who made this release possible:
@alexander-menshchikov, @EXPEbdodla, @afti, @dmaier-redislabs, @four_leaf_clover, @alohaglenn, @gh73962, @justinmir, @LINKIWI, @liushuangbill, @golang88, @gnpaone, @ndyakov, @nikolaydubina, @oleglacto, @andy-stark-redis, @rodneyosodo, @dependabot, @rfyiamcool, @frankxjkuang, @fukua95, @soleymani-milad, @ofekshenawa, @khasanovbi
go-rediswon't skip span creation if the parent spans is not recording. (#2980) Users can use the OpenTelemetry sampler to control the sampling behavior. For instance, you can use theParentBased(NeverSample())sampler fromgo.opentelemetry.io/otel/sdk/traceto keep a similar behavior (drop orphan spans) ofgo-redisas before.
9.0.5 (2023-05-29)
- Add ACL LOG (#2536) (31ba855)
- add field protocol to setupClusterQueryParams (#2600) (840c25c)
- add protocol option (#2598) (3917988)
9.0.4 (2023-05-01)
- add client info command (#2483) (b8c7317)
- no longer verify HELLO error messages (#2515) (7b4f217)
- read the structure to increase the judgment of the omitempty opโฆ (#2529) (37c057b)
9.0.3 (2023-04-02)
- feat(scan): scan time.Time sets the default decoding (#2413)
- Add support for CLUSTER LINKS command (#2504)
- Add support for acl dryrun command (#2502)
- Add support for COMMAND GETKEYS & COMMAND GETKEYSANDFLAGS (#2500)
- Add support for LCS Command (#2480)
- Add support for BZMPOP (#2456)
- Adding support for ZMPOP command (#2408)
- Add support for LMPOP (#2440)
- feat: remove pool unused fields (#2438)
- Expiretime and PExpireTime (#2426)
- Implement
FUNCTIONgroup of commands (#2475) - feat(zadd): add ZAddLT and ZAddGT (#2429)
- Add: Support for COMMAND LIST command (#2491)
- Add support for BLMPOP (#2442)
- feat: check pipeline.Do to prevent confusion with Exec (#2517)
- Function stats, function kill, fcall and fcall_ro (#2486)
- feat: Add support for CLUSTER SHARDS command (#2507)
- feat(cmd): support for adding byte,bit parameters to the bitpos command (#2498)
- fix: eval api cmd.SetFirstKeyPos (#2501)
- fix: limit the number of connections created (#2441)
- fixed #2462 v9 continue support dragonfly, it's Hello command return "NOAUTH Authentication required" error (#2479)
- Fix for internal/hscan/structmap.go:89:23: undefined: reflect.Pointer (#2458)
- fix: group lag can be null (#2448)
- Updating to the latest version of redis (#2508)
- Allowing for running tests on a port other than the fixed 6380 (#2466)
- redis 7.0.8 in tests (#2450)
- docs: Update redisotel example for v9 (#2425)
- chore: update go mod, Upgrade golang.org/x/net version to 0.7.0 (#2476)
- chore: add Chinese translation (#2436)
- chore(deps): bump github.com/bsm/gomega from 1.20.0 to 1.26.0 (#2421)
- chore(deps): bump github.com/bsm/ginkgo/v2 from 2.5.0 to 2.7.0 (#2420)
- chore(deps): bump actions/setup-go from 3 to 4 (#2495)
- docs: add instructions for the HSet api (#2503)
- docs: add reading lag field comment (#2451)
- test: update go mod before testing(go mod tidy) (#2423)
- docs: fix comment typo (#2505)
- test: remove testify (#2463)
- refactor: change ListElementCmd to KeyValuesCmd. (#2443)
- fix(appendArg): appendArg case special type (#2489)
9.0.2 (2023-02-01)
- Changed Pipelines to not be thread-safe any more.
- Added support for RESP3 protocol. It was contributed by @monkey92t who has done the majority of work in this release.
- Added
ContextTimeoutEnabledoption that controls whether the client respects context timeouts and deadlines. See Redis Timeouts for details. - Added
ParseClusterURLto parse URLs intoClusterOptions, for example,redis://user:password@localhost:6789?dial_timeout=3&read_timeout=6s&addr=localhost:6790&addr=localhost:6791. - Added metrics instrumentation using
redisotel.IstrumentMetrics. See documentation - Added
redis.HasErrorPrefixto help working with errors.
- Removed asynchronous cancellation based on the context timeout. It was racy in v8 and is completely gone in v9.
- Reworked hook interface and added
DialHook. - Replaced
redisotel.NewTracingHookwithredisotel.InstrumentTracing. See example and documentation. - Replaced
*redis.Zwithredis.Zsince it is small enough to be passed as value without making an allocation. - Renamed the option
MaxConnAgetoConnMaxLifetime. - Renamed the option
IdleTimeouttoConnMaxIdleTime. - Removed connection reaper in favor of
MaxIdleConns. - Removed
WithContextsincecontext.Contextcan be passed directly as an arg. - Removed
Pipeline.Closesince there is no real need to explicitly manage pipeline resources and it can be safely reused viasync.Pooletc.Pipeline.Discardis still available if you want to reset commands for some reason.
- Improved and fixed pipeline retries.
- As usually, added support for more commands and fixed some bugs.