In this release, the command response types across RESP2 and RESP3 protocols are unified, ensuring that the same command returns the same Python type and structure regardless of which protocol version is in use — eliminating the need for protocol-specific branching in application code (#4025). Approximately 84 commands are affected across core Redis, Search, JSON, TimeSeries, and Probabilistic modules. Additionally, the default protocol has been changed from RESP2 to RESP3 for all Redis clients and connections, enabling richer native types (maps, sets, doubles, booleans) and improved performance out of the box (#4031).
These changes are breaking relative to redis-py 7.x and earlier, so users upgrading should carefully review the migration guide. For a complete list of affected commands and updated response formats, see docs/resp_unification.rst and the detailed migration guide at specs/resp2_resp3_migration_guide.md.
Users who need to retain the previous default protocol configuration can explicitly set protocol=2 when creating their client or connection.
We'd like to thank all the contributors who worked on this release! @Pack-Yak1 @petyaslavova
This release introduces full asyncio Cluster PubSub support, bringing shard-channel capabilities (SSUBSCRIBE, SUNSUBSCRIBE, SPUBLISH) to the async RedisCluster client. The new ClusterPubSub class in redis.asyncio.cluster automatically routes shard-channel subscriptions to the correct cluster node based on key-slot hashing, manages per-node PubSub connections, and supports round-robin message retrieval across nodes. Users can create a cluster pubsub instance via RedisCluster.pubsub() and use ssubscribe(), sunsubscribe(), and get_sharded_message() just as they would with the sync cluster client.
Alongside this, Redis Keyspace Notifications are now supported for both standalone and cluster deployments, in both sync and async modes. New classes—KeyspaceNotifications, ClusterKeyspaceNotifications, AsyncKeyspaceNotifications, and AsyncClusterKeyspaceNotifications—provide a high-level API for subscribing to keyspace and keyevent channels. In cluster mode, notifications are automatically subscribed across all primary nodes (since each node only emits notifications for keys it owns), with built-in topology-change handling. Convenience methods like subscribe_keyspace(), subscribe_keyevent(), and channel classes (KeyspaceChannel, KeyeventChannel) simplify common subscription patterns. Both sync run_in_thread() and async listen() workflows are supported.
The @overload pattern has been applied systematically across core commands (core.py), VectorSet commands, and module commands (Search, JSON, TimeSeries, Bloom filters) to provide distinct return types for sync and async clients. Previously, methods returned a combined ResponseT (i.e., Union[Awaitable[Any], Any]), which caused static analysis tools like mypy and Pyright to flag false positives. Now, sync clients see concrete return types (e.g., int, bool, list[str]) while async clients see Awaitable[...] wrappers. This is a breaking change for type-checking only—runtime behavior is unchanged, but code relying on the old union return types in type annotations may need updates. Two new protocol types, SyncClientProtocol and AsyncClientProtocol, are used in overload signatures to enable this distinction.
We'd like to thank all the contributors who worked on this release! @abersheeran @alisaifee @majiayu000 @dmaier-redislabs @vladvildanov @petyaslavova
-Refactored health check logic for MultiDBClient (#3994)
We'd like to thank all the contributors who worked on this release! @vladvildanov @petyaslavova
OpenTelemetry Native Metrics Support for asynchronous clients Added comprehensive OpenTelemetry metrics support for asynchronous clients following the OpenTelemetry Database Client Semantic Conventions. Metric groups include:
We'd like to thank all the contributors who worked on this release! @mitre88 @turanalmammadov @haosenwang1018 @Medno @vladvildanov @petyaslavova
We'd like to thank all the contributors who worked on this release! @dotlambda @rhoboro @skylarkoo7 @praboud @bysiber @vladvildanov @petyaslavova
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 a Redis Enterprise 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 cluster state reloads upon completion (SMIGRATED) Enabling seamless operations during Redis Enterprise maintenance windows
OpenTelemetry Native Metrics Support Added comprehensive OpenTelemetry metrics support following the OpenTelemetry Database Client Semantic Conventions. Metric groups include:
We'd like to thank all the contributors who worked on this release! @veeceey @dariaguy @Nepomuk5665 @praboud @Timour-Ilyas @barshaul @devbyteai @itssimon @majiayu000 @aveao @s-t-e-v-e-n-k @cheizdo2-art @Jonathan-Landeed @PeterJCLaw @ShubhamKaudewar @vchomakov @dmaier-redislabs @elena-kolevska @vladvildanov @petyaslavova
We'd like to thank all the contributors who worked on this release! @vladvildanov
We'd like to thank all the contributors who worked on this release! @ShubhamKaudewar @matthewwiese @peperon @vladvildanov @petyaslavova
This release adds small fixes related to documentation.
We'd like to thank all the contributors who worked on this release! @dmaier @petyaslavova
One of the main features introduced in this release is a new type of client MultiDBClient. The purpose of this client is a communication with multiple databases that are eventually consistent (Active-Active setup) and handling failures by failover across databases.
More information could be found in docs.
We'd like to thank all the contributors who worked on this release! @scovetta @mengxunQAQ @abrookins @VincentHokie @sobolevn @hunterhogan @luka-mikec @zion-off @peperon @andy-stark-redis @uglide @elena-kolevska @kiryazovi-redis @vladvildanov @petyaslavova
Main feature introduced in this beta release is a new type of client MultiDBClient. The purpose of this client is a communication with multiple databases that are eventually consistent (Active-Active setup) and handling failures by failover across databases.
More information could be found in docs.
We'd like to thank all the contributors who worked on this release! @zion-off @petyaslavova @kiryazovi-redis @vladvildanov
We'd like to thank all the contributors who worked on this release! @petyaslavova @elena-kolevska @andy-stark-redis
We'd like to thank all the contributors who worked on this release! @scovetta @mengxunQAQ @abrookins @VincentHokie @sobolevn @hunterhogan @luka-mikec @elena-kolevska @kiryazovi-redis @petyaslavova
We'd like to thank all the contributors who worked on this release! @htemelski-redis @elena-kolevska @petyaslavova @vladvildanov
We'd like to thank all the contributors who worked on this release! @robertosantamaria-scopely @mahigupta @alisaifee @tzongw @earonesty @IlianIliev @ofekshenawa @andy-stark-redis @AmirHossein81Gholami @mharding-hpe @git-hulk @ngabhanenetskope @terencehonles @ManelCoutinhoSensei @petyaslavova @vladvildanov
We'd like to thank all the contributors who worked on this release! @bcmills
check_hostname when instantiating RedisSSLContext (#3655)__del__ call (#3654)We'd like to thank all the contributors who worked on this release! @vladvildanov @petyaslavova
dynamic_startup_nodes parameter to async RedisCluster (#3646)hiredis-py parser (#3648)RedisCluster client (#3649)check_hostname when instantiating RedisSSLContext (#3655)__del__ call (#3654)search_json_examples.ipynb: Fix the old import indexDefinition -> index_definition (#3652)Python 3.8 support as it has reached end of life (#3657)We'd like to thank all the contributors who worked on this release! @JCornat @ShubhamKaudewar @uglide @petyaslavova @vladvildanov
RedisCluster client (#3611)Retry and backoff classes (#3628)ssl_check_hostname not set to connections. For SSL verification with ssl_cert_reqs="none", check_hostname is set to False (#3637)
Important: The default value for the check_hostname field of RedisSSLContext has been changed as part of this PR - this is a breaking change and should not be introduced in minor versions - unfortunately, it is part of the current release.
The breaking change is reverted in the next release to fix the behavior --> 6.2.0Retry and backoff classes (#3628) - fixes integration with Django RQAttributeError on ClusterPipeline (#3634)REDIS_MAJOR_VERSION correctly in run-tests (#3642)hiredis-py-integration.yaml (#3641)RedisModuleCommands class (#3632)None args or return types to be annotated with Optional - includes commands in core.py and json commands (#3610)A big thank you to our collaborators at Scopely for their valuable contributions to this release! Your support and improvements help move the project forward — we appreciate it!
We'd like to thank all the contributors who worked on this release! @robertosantamaria-scopely @sentrivana @terencehonles @kesha1225 @aberres @uglide @omerfeyzioglu @petyaslavova @vladvildanov @andy-stark-redis
retry object becomes mandatory.
We'd like to thank all the contributors who worked on this release! @elena-kolevska @petyaslavova @vladvildanov @andy-stark-redis @JimNero009 @donbowman @julianolm @666romeo @three-kinds @bssyousefi @mbilski @Yard1 @bacchuswng @noirbee @nbertram @birthdaysgift @Perlence @excitoon @dimbleby @shenxiangzhuang @paololazzari @dwdougherty @niklasbec @byeongjulee222 @befeleme @djroze @BaseMax @dicej @akx @cavemanpi @lattwood @rbs333 @rohansingh @allrob23