---
name: redis-py
slug: redis-py
type: github
source_url: https://github.com/redis/redis-py
organization: Redis
organization_slug: redis
total_releases: 100
latest_version: v8.0.0b2
latest_date: 2026-04-17
last_updated: 2026-05-01
tracking_since: 2021-10-26
canonical: https://releases.sh/redis/redis-py
organization_url: https://releases.sh/redis
---

<Release version="v8.0.0b2" date="April 17, 2026" published="2026-04-17T07:38:07.000Z" url="https://github.com/redis/redis-py/releases/tag/v8.0.0b2">
## 8.0.0b2

# Changes
### Unified command response types across RESP2 and RESP3 protocols
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](https://github.com/redis/redis-py/pull/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](https://github.com/redis/redis-py/pull/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`](docs/resp_unification.rst) and the detailed migration guide at [`specs/resp2_resp3_migration_guide.md`](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.


## 🚀 New Features
- Add random load balancing strategy which allows for use of the primary (#4027)


## 🔥 Breaking changes
- RESP2 and RESP3 response unification (#4025)
- Changing the default RESP protocol configurations for Redis clients and connections to 3 (#4031)


## 🧰 Maintenance
- Reorganize unit tests grouping - extracting the tests that define their hardcoded client configuration separately (#4029)


We'd like to thank all the contributors who worked on this release!
@Pack-Yak1  @petyaslavova 
</Release>

<Release version="v8.0.0b1" date="April 8, 2026" published="2026-04-08T12:20:07.000Z" url="https://github.com/redis/redis-py/releases/tag/v8.0.0b1">
## 8.0.0b1

# Changes
### Async Cluster PubSub & Keyspace Notifications

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.

### Type Hints Improvements (breaking changes)

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.


## 🚀 New Features
- Support Cluster PubSub in asyncio (#3736)
- Add Redis Keyspace Notifications Support for Redis Cluster (#3962)


## 🔥 Breaking changes
- Type hints improvements - fixing static code analyses issues related to combined sync and async return types(vectorsets + commands in core.py) (#3991)
- Type hints improvements - fixing static code analyses issues related to combined sync and async return types - modules (#4005)
- Add Redis Keyspace Notifications Support for Redis Cluster (#3962)


## 🐛 Bug Fixes
- fix: guard disconnect() against RuntimeError on Python 3.13+ (#3856) (#4013)
- Fix CacheProxyConnection hang when invalidation arrives on another connection (#3600) (#4014)
- fix: handle scientific notation in score_cast_func for RESP2 (#4016)
- Fix TypeError in CacheProxyConnection when cached response is non-bytes (#4017)


## ⚠️ Deprecations
- Align deprecation of lib_name/lib_version in async cluster (#3995)


## 🧰 Maintenance
- Adding unstable 8.8 build to pipeline test matrix. Updating the lib version in master. (#4004)
- Fix type hints for register_script to support RedisCluster (#3876)
- Updating dependencies to fix reported vulnerabilities (#4012)
- Bump release-drafter/release-drafter from 6 to 7 (#4019)
- Bump rojopolis/spellcheck-github-actions from 0.58.0 to 0.60.0 (#4018)


We'd like to thank all the contributors who worked on this release!
@abersheeran @alisaifee  @majiayu000 @dmaier-redislabs @vladvildanov @petyaslavova 
</Release>

<Release version="v7.4.0" date="March 24, 2026" published="2026-03-24T09:14:09.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.4.0">
## 7.4.0

# Changes

## 🐛 Bug Fixes
- Fix AttributeError in cluster metrics recording when connection is None or ClusterNode object instance is used to extract the connection info (#3999)
- Fixing security concern in __repr__ methods for ConnectionPools - passwords might leak in plain text logs (#3998)
- Refactored connection count and SCH metric collection (#4001)

## 🧪 Experimental Features
-Refactored health check logic for MultiDBClient (#3994)

## 🧰 Maintenance
- Expose basic Otel classes and functions to be importable through redis.observability to match the examples in the readthedocs (#3996)



We'd like to thank all the contributors who worked on this release!
 @vladvildanov @petyaslavova 
</Release>

<Release version="v7.3.0" date="March 6, 2026" published="2026-03-06T18:15:23.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.3.0">
## 7.3.0

# Changes
**OpenTelemetry Native Metrics Support for asynchronous clients**
Added comprehensive OpenTelemetry metrics support for asynchronous clients following the [OpenTelemetry Database Client Semantic Conventions](https://opentelemetry.io/docs/specs/semconv/database/database-metrics/).
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

## 🚀 New Features
- Added OTel instrumentation and metrics export for async client (#3977)

## 🐛 Bug Fixes
- [async] Adding access to cluster client's nodes_manager and set_response_callback in ClusterPipeline objects (#3989)
- fix(connection): Ensure we have an initialized protocol in connection (#3981)

## 🧰 Maintenance
- fix: use KeysT for blpop and brpop keys parameter type annotation (#3987 #3990)
- Bump actions/upload-artifact from 6 to 7 (#3985)
- fix: replace 3 bare except clauses with except Exception (#3980)



We'd like to thank all the contributors who worked on this release!
 @mitre88 @turanalmammadov @haosenwang1018 @Medno @vladvildanov @petyaslavova 
</Release>

<Release version="v7.2.1" date="February 25, 2026" published="2026-02-25T20:04:47.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.2.1">
## 7.2.1

# Changes

## 🐛 Bug Fixes
- Handle connection attributes conditionally for metrics and set connection data on exceptions in cluster error handling (#3964)

## ⚠️ Deprecations
- Removed batch_size and consumer_name attributes from OTel metrics (#3978)

## 🧰 Maintenance
- Fixing error handling of connection buffer purging of closed connections. Enabling troubleshooting logging for maintenance notifications e2e tests. (#3971)
- Fix protocol validation: replace finally with else and store parsed int (#3965)
- Return copies from _get_free/in_use_connections and fix async _mock (#3967)
- Add missing shard channel message types to async PubSub (#3966)
- Fix issues with ClusterPipeline connection management (#3804)
- fix(pubsub): avoid UnicodeDecodeError on reconnect with binary channel names (#3944)
- Hold references to ClusterNode disconnect task (#3826)
- remove remaining imports of typing_extensions (#3873)

We'd like to thank all the contributors who worked on this release!
@dotlambda @rhoboro @skylarkoo7 @praboud @bysiber @vladvildanov @petyaslavova 
</Release>

<Release version="v7.2.0" date="February 16, 2026" published="2026-02-16T17:15:50.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.2.0">
## 7.2.0

# Changes

**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](https://opentelemetry.io/docs/specs/semconv/database/database-metrics/).
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

## 🚀 New Features
- Added OTel instrumentation and metrics export for sync client (#3954)
- Add maintenance notifications support for OSS API cluster clients (#3946)
- Adding hotkeys commands support. (#3924)
- Adds support for the new Idempotent Producers feature in Redis 8.6 (#3926)
- Adding support for vrange command. (#3927)
- Added a local digest command to the client to execute the XXH3 locally… (#3884)
- Add DriverInfo class for upstream driver tracking (#3880)
- Add ssl_password support to async Redis client (#3878)
- Add ssl_ca_path support to async Redis client (#3879)

## ⚠️ Deprecations
- Adding special handling of client_tracking_on and client_tracking_off for cluster clients. Marking those two functions as deprecated for cluster - embedded client-side caching feature should be used instead. (#3858)

## 🐛 Bug Fixes
- Fix handling of circular MOVED redirects in cluster slot mapping (#3899)
- fix(asyncio): prevent deadlock when Lock.release() is cancelled (#3900)
- Fix unrecoverable connection state (#3905)
- Fixed potential race condition between call_later() and run_forever() (#3897)
- Fix RuntimeError in ClusterPubSub sharded message generator (#3889)
- Fix async connection pool lock contention during connection establishment (#3885)
- Fix PubSub client health check handling for sync client implementation (#3870)
- Adding retries for the overall connect - socket connect + handshake. Fix for pubsub reconnect issues. (#3863)
- Adding special handling of client_tracking_on and client_tracking_off for cluster clients. Marking those two functions as deprecated for cluster - embedded client-side caching feature should be used instead. (#3858)
- [#3618] Fix client-side cache invalidation for mixed str and bytes Redis keys (#3766)
- [#3612] Generating unique command cache key (#3765)

## 🧰 Maintenance
- Fix type hints for spop and srandmember methods (#3943)
- Reorganize pipeline actions (#3951)
- Extending the tests to validate more supported scorers for hybrid search. Adding experimental_method annotation to hybrid_search commands. (#3939)
- Bump rojopolis/spellcheck-github-actions from 0.56.0 to 0.58.0 (#3930)
- Adds a new helper that runs linters and fixes issues (#3928)
- Added testing with Timeseries samples with NaN values (#3932)
- Added testing with TLS-based authentication (#3931)
- Added support for calling run-tests from other repositories (#3923)
- Updating hybrid tests to be compatible with 8.4 and 8.6 changes. Adding 8.6 RC1 image to test matrix (#3922)
- Fix ClusterClient behavior when cluster topology is refreshed. Fix several places where connections might leak. (#3917)
- Fix copy-paste error in CacheProxyConnection server version check (#3918)
- Improve NodesManager locking (#3803)
- DOC: README Update relative urls (#3914)
- Bump rojopolis/spellcheck-github-actions from 0.55.0 to 0.56.0 (#3902)
- Bump actions/upload-artifact from 5 to 6 (#3901)
- Fix type hinting of zrange and zrangestore (#3872)
- Remove last vestiges of mock.mock (#3830)
- Improve type hints of from_url method for async Redis client. (#3796)
- Fix type hints for the available 'from_url' methods (#3816)
- Bump rojopolis/spellcheck-github-actions from 0.53.0 to 0.55.0 (#3862)
- Bump actions/checkout from 5 to 6 (#3861)
- Use MaxConnectionsError in the asyncio pool too (#3859)
- Updates PR template order (#3855)
- Changing current version in pipeline test config to 8.4 as it is already GA (#3854)
- Added custom event handler section (#3853)
- Changing log level to be debug for failed maintenance notification enablement when enabled='auto' (#3851)
- Update Type Hints for List Command Parameters from str to KeyT (#3848)
- Expand cluster READ_COMMANDS with additional read-only commands and reorganize the list of commands by category (#3845)


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 
</Release>

<Release version="v7.1.1" date="February 9, 2026" published="2026-02-09T18:39:13.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.1.1">
## 7.1.1

# Changes

## 🧪 Experimental Features
- Added initial health check policies, refactored add_database method (#3906)


## 🧰 Maintenance
- Disabled SCH in MultiDBClient underlying clients by default (#3938)
- Added logging for MultiDBClients (#3865 #3896)



We'd like to thank all the contributors who worked on this release!
@vladvildanov
</Release>

<Release version="v7.1.0" date="November 19, 2025" published="2025-11-19T15:54:06.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.1.0">
## 7.1.0

# Changes

## 🚀 New Features
- Adding MSETEX command support. (#3823)
- Adding CLAIM option to XREADGROUP command + unit tests (#3825)
- Apply routing and response aggregation policies in OSS Cluster mode (#3834)

## 🧪 Experimental Features
- Adding support for CAS/CAD commands. (#3837)
- Adding support for HYBRID search. (#3813 #3843)

## 🔥 Breaking changes (in experimental features)
- Replace default health check and failure detector with custom (#3822)

## 🐛 Bug Fixes
- Add **options to parse functions for sentinel (#3831)
- Generating unique command cache key (#3765)

## 🧰 Maintenance
- Adding Redis 8.4 RC1 image to test matrix. (#3820)
- Remove Python 3.9 support. Add Python 3.14 support. (#3814)
- Sync readme with 7.0.1 and update lib version to latest stable released version - 7.0.1 (#3821)
- Bump rojopolis/spellcheck-github-actions from 0.52.0 to 0.53.0 (#3827)
- Bump actions/upload-artifact from 4 to 5 (#3828)
- Bump github/codeql-action from 3 to 4 (#3829)
- Fixing flaky tests (#3833 #3838)
- Update 8.4 RC image tag to 8.4-RC1-pre.2 for pipeline test matrix (#3832)
- Add missing f-string when returning an error. (#3841)
- Adding latest 8.4 image to test matrix. Updating the Hybrid VSIM query format to be in sync with spec after srv issue was fixed. (#3843)
- Expand cluster READ_COMMANDS with additional read-only commands and reorganize the list of commands by category (#3845)
- Update Type Hints for List Command Parameters from str to KeyT (#3848)
- Changing log level to be debug for failed maintenance notification enablement when enabled='auto' (#3851)
- Added custom event handler section (#3853)
- Changing current version to 8.4 as it is already GA (#3854)


We'd like to thank all the contributors who worked on this release!
@ShubhamKaudewar @matthewwiese @peperon @vladvildanov @petyaslavova 
</Release>

<Release version="v7.0.1" date="October 27, 2025" published="2025-10-27T14:32:24.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.0.1">
## 7.0.1

# Changes
This release adds small fixes related to documentation.


## 🧰 Maintenance
- Add 'multi_database' section to documentation index (313d93f)
- Revised multi-database client documentation(78df745)
- Adding info about Multi-database client in README.md (3f7a55e)


We'd like to thank all the contributors who worked on this release!
@dmaier @petyaslavova 
</Release>

<Release version="v7.0.0" date="October 22, 2025" published="2025-10-22T15:38:01.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.0.0">
## 7.0.0

# Changes

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.

## 🚀 New Features
- Support for maintenance push notifications handling during server upgrade or maintenance procedures. (#3756 #3777 #3778 #3779 #3785)
- Adding WITHATTRIBS option to vector set's vsim command. (#3746)
- Adding ssl_verify_flags_config argument for ssl connection configuration (#3772)
- Adding new ExternalAuthProviderError that will be raised when we receive 'problem with LDAP service' response from server. (#3808)

## 🧪 Experimental Features
- Multi-database client implementation (#3784 #3811)

## 🔥 Breaking changes
- Adding abstract method declaration for cache property setter in EvictionPolicyInterface(#3732)
- Remove unused parse_list_to_dict function from helpers (#3733)
- Removing synchronous context manager handling from async RedisCluster. (#3679)
- Redis Search/Aggregate improved type annotations (#3676)
- Removing the threading.Lock locks and replacing them with RLock objects to avoid deadlocks. (#3677)
- Update ping command docstrings and method return type hint (#3789)
- Fixing several *arg type hints in core.py and json module commands (#3793)
- Fixing errors reported by mypy in search module files - query.py, commands.py and aggregation.py. (#3666)
- Adding score_cast_func argument to zrank, zrevrank and zunion - for consistency with the other sorted sets commands (#3795)
- Changing the timeout typehint in async BlockingConnectionPool from int to float (#3801)

## 🐛 Bug Fixes
- Removing the threading.Lock locks and replacing them with RLock objects to avoid deadlocks. (#3677)

## 🧰 Maintenance
- Bump actions/checkout from 4 to 5 (#3760)
- Fix docstring for ssl_check_hostname (#3761)
- Typos in vectorset commands.py (#3719)
- Fixing typos in query.py (#3718)
- Typos in cluster.py (#3717)
- Fixing typos in core.py (#3720)
- Update Redis image versions for GH pipeline actions. (#3740)
- Support the customization of the timeout parameter when using a blocking connection pool with a redis cluster (#3724)
- Fix async clients safety when used as an async context manager (#3512)
- docs: fix zadd command parameter description (#3727)
- Fault injector boilerplate (#3749)
- Adding e2e scenario tests for maintenance push notifications handling. (#3758)
- Adding more e2e tests related to maintenance notifications. Extracting specific tests that validate notifications are received in new connections (#3770)
- Renaming of classes and configuration arguments related to maintenance push notifications handling during server upgrade or maintenance procedures (#3777 #3778)
- DOC-5743 BITOP examples (#3776)
- Improve stale issue management workflow (#3773)
- [DOC] Add complex chaining example using pipelines with builder pattern (#3774)
- Fix automation scenario maint notification (#3788)
- Add redis 8.4-M01-pre to tested redis versions (#3790)
- Add handling of empty spaces during CLIENT LIST response parsing (#3797)
- DOC-5821 update index/query example for runnable notebook (#3807)
- Fixing SORTABLE, INDEXEMPTY and INDEXMISSING order when using RediSearch fields (#3810)
- Fixing argument type hints for evalsha and similar commands. (#3794)
- Update Python version to 3.14 in hiredis CI workflow (#3798)
- Fixing sync BlockingConnectionPool's disconnect method to follow the definition in ConnectionPoolInterface (#3802)


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 
</Release>

<Release version="v7.0.0b3" date="October 7, 2025" published="2025-10-07T18:17:24.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.0.0b3">
## 7.0.0b3

# Changes

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.

## 🔥 Breaking changes
- Update ping command docstrings and method return type hint (#3789)

## 🧪 Experimental Features
- Multi-database client implementation (#3784)

## 🧰 Maintenance
- [DOC] Add complex chaining example using pipelines with builder pattern (#3774)
- Fix automation scenarion maint notification (#3788)
- Add redis 8.4-M01-pre to tested redis versions (#3790)

We'd like to thank all the contributors who worked on this release!
@zion-off @petyaslavova @kiryazovi-redis @vladvildanov  
</Release>

<Release version="v7.0.0b2" date="September 26, 2025" published="2025-09-26T17:27:12.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.0.0b2">
## 7.0.0b2

# Changes

## 🚀 New Features
- Adding ssl_verify_flags_config argument for ssl connection configuration (#3772)
- Adding 'auto' option to MaintNotificationsConfig.enabled (#3779)

## 🔥 Breaking changes
- _(Breaking compared to previous beta release)_ Renaming of classes and configuration arguments related to maintenance push notifications handling during server upgrade or maintenance procedures (#3777 #3778)

## 🧰 Maintenance
- Adding more e2e tests related to maintenance notifications. Extracting specific tests that validate notifications are received in new connections (#3770)
- Renaming of classes and configuration arguments related to maintenance push notifications handling during server upgrade or maintenance procedures (#3777 #3778)
- DOC-5743 BITOP examples (#3776)
- Improve stale issue management workflow (#3773)

We'd like to thank all the contributors who worked on this release!
@petyaslavova @elena-kolevska @andy-stark-redis 
</Release>

<Release version="v7.0.0b1" date="September 9, 2025" published="2025-09-09T16:20:08.000Z" url="https://github.com/redis/redis-py/releases/tag/v7.0.0b1">
## 7.0.0b1

# Changes

## 🚀 New Features
- Support for maintenance push notifications handling during server upgrade or maintenance procedures. (#3756)
- Adding WITHATTRIBS option to vector set's vsim command. (#3746)

## 🔥 Breaking changes
- Adding abstract method declaration for cache property setter in EvictionPolicyInterface(#3732)
- Remove unused parse_list_to_dict function from helpers (#3733)
- Removing synchronous context manager handling from async RedisCluster. (#3679)
- Redis Search/Aggregate improved type annotations (#3676)
- Removing the threading.Lock locks and replacing them with RLock objects to avoid deadlocks. (#3677)

## 🐛 Bug Fixes
- Removing the threading.Lock locks and replacing them with RLock objects to avoid deadlocks. (#3677)

## 🧰 Maintenance
- Bump actions/checkout from 4 to 5 (#3760)
- Fix docstring for ssl_check_hostname (#3761)
- Typos in vectorset commands.py (#3719)
- Fixing typos in query.py (#3718)
- Typos in cluster.py (#3717)
- Fixing typos in core.py (#3720)
- Update Redis image versions for GH pipeline actions. (#3740)
- Support the customization of the timeout parameter when using a blocking connection pool with a redis cluster (#3724)
- Fix async clients safety when used as an async context manager (#3512)
- docs: fix zadd command parameter description (#3727)
- Fault injector boilerplate (#3749)
- Adding e2e scenario tests for maintenance push notifications handling. (#3758)


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 

</Release>

<Release version="v6.4.0" date="August 7, 2025" published="2025-08-07T08:09:44.000Z" url="https://github.com/redis/redis-py/releases/tag/v6.4.0">
## 6.4.0

# Changes

## 🚀 New Features
- Added epsilon property to the vsim command (#3723)

## 🧰 Maintenance
- Updating the latest Redis image for github pipeline testing (#3726)

## 
We'd like to thank all the contributors who worked on this release!
@htemelski-redis @elena-kolevska @petyaslavova @vladvildanov 
</Release>

<Release version="v6.3.0" date="August 5, 2025" published="2025-08-05T08:12:05.000Z" url="https://github.com/redis/redis-py/releases/tag/v6.3.0">
## 6.3.0

# Changes

## 🚀 New Features
- Add support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE (#3690)
- Support new VAMANA vector index type (#3702)
- Add new stream commands (#3711)
- add async Retry __eq__ and __hash__ & fix ExponentialWithJitterBackoff __eq__ (#3668)

## 🐛 Bug Fixes
- Fixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return_responses' argument. (#3191)
- Annotate deprecated_args decorator to preserve wrapped function type signature (#3701)
- Fix ConnectionPool to raise MaxConnectionsError instead of Connection… (#3698)
- add async Retry __eq__ and __hash__ & fix ExponentialWithJitterBackoff __eq__ (#3668)
- SentinelManagedConnection searches for new master upon connection failure (#3560) (#3601)

## 🧰 Maintenance
- fix: avoid instantiating a connection on _repr__ (#3653)
- Fixing the return type hint for the transaction method in the standalone client. (#3660)
- Bump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 (#3665)
- Dropping integration tests with Redis 6.2 from pipeline actions. (#3659)
- Remove deprecated arg from call to ClusterPipeline (#3670)
- TransactionStrategy reset: UNWATCH only when status is watching (#3671)
- KeyT for set operations (#3190)
- Removing references to old docs site 'https://redis-py.readthedocs.io/' replaced by 'https://redis.readthedocs.io/' (#3674)
- Removing unnecessary check for tests using AsyncMock (#3432)
- Updating test images for github pipeline execution (#3678)
- Updating the latest Redis image for pipeline testing (#3695)
- Bump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 (#3689)
- DOC-5225 testable probabilistic dt examples (#3691)
- Update README.md (#3699)
- Convert the value to int type only if it exists in CLIENT INFO (#3688)
- Fix compatibility with latest pytest-asyncio version(1.1.0) (#3708)
- DOC-5424 time series examples (#3705)
- Adding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections (#3710)


## 
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
</Release>

<Release version="v5.3.1" date="July 25, 2025" published="2025-07-25T08:05:51.000Z" url="https://github.com/redis/redis-py/releases/tag/v5.3.1">
## 5.3.1

# Changes

## 🧰 Maintenance
* Allow newer PyJWT versions for branch 5.3 (#3682)

##
We'd like to thank all the contributors who worked on this release!
@bcmills
</Release>

<Release version="v6.1.1" date="June 2, 2025" published="2025-06-02T11:43:36.000Z" url="https://github.com/redis/redis-py/releases/tag/v6.1.1">
# Changes

## 🐛 Bug Fixes
- Revert wrongly changed default value for `check_hostname` when instantiating `RedisSSLContext` (#3655)
- Fixed potential deadlock from unexpected `__del__` call (#3654)

##
We'd like to thank all the contributors who worked on this release!
@vladvildanov @petyaslavova
</Release>

<Release version="v6.2.0" date="May 28, 2025" published="2025-05-28T05:00:51.000Z" url="https://github.com/redis/redis-py/releases/tag/v6.2.0">
## 6.2.0

# Changes

## 🚀 New Features
- Add `dynamic_startup_nodes` parameter to async RedisCluster (#3646)
- Support RESP3 with `hiredis-py` parser (#3648)
- [Async] Support for transactions in async `RedisCluster` client (#3649)

## 🐛 Bug Fixes
- Revert wrongly changed default value for `check_hostname` when instantiating `RedisSSLContext` (#3655)
- Fixed potential deadlock from unexpected `__del__` call (#3654)

## 🧰 Maintenance
- Update `search_json_examples.ipynb`: Fix the old import `indexDefinition` -> `index_definition` (#3652)
- Remove mandatory update of the CHANGES file for new PRs. Changes file will be kept for history for versions < 4.0.0 (#3645)
- Dropping `Python 3.8` support as it has reached end of life (#3657)
- fix(doc): update Python print output in json doctests (#3658)
- Update redis-entraid dependency (#3661)

## 
We'd like to thank all the contributors who worked on this release!
@JCornat @ShubhamKaudewar @uglide @petyaslavova @vladvildanov
</Release>

<Release version="v6.1.0" date="May 13, 2025" published="2025-05-13T12:16:26.000Z" url="https://github.com/redis/redis-py/releases/tag/v6.1.0">
## 6.1.0

# Changes

## 🚀 New Features
- Support for transactions in `RedisCluster` client (#3611)
- Add equality and hashability to `Retry` and backoff classes (#3628)

## 🐛 Bug Fixes
- Fix RedisCluster `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.0
- Prevent RuntimeError while reinitializing clusters - sync and async (#3633)
- Add equality and hashability to `Retry` and backoff classes (#3628) - fixes integration with Django RQ
- Fix `AttributeError` on `ClusterPipeline` (#3634)

## 🧰 Maintenance
- Updating the readme and lib version to contain the changes from the latest stable release (#3644)
- Export `REDIS_MAJOR_VERSION` correctly in run-tests (#3642)
- Fix matrix in `hiredis-py-integration.yaml` (#3641)
- Test against unstable hiredis-py (#3617)
- Adding return types for the `RedisModuleCommands` class (#3632)
- Updating Redis 8 test image for GH pipeline (#3639)
- Allow newer PyJWT versions (#3636)
- Change type hints with possible `None` args or return types to be annotated with `Optional` - includes commands in `core.py` and json commands (#3610)

## 🙏 Special Thanks
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!

## Contributors
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 
</Release>

<Release version="v6.0.0" date="April 30, 2025" published="2025-04-30T19:08:59.000Z" url="https://github.com/redis/redis-py/releases/tag/v6.0.0">
## 6.0.0

# Changes

## 🚀 New Features
- New hash commands with expiration options support are added - HGETDEL, HGETEX, HSETEX (#3570)
- Adds option not to raise an exception when leaving context manager after lock expiration (#3531)
- Add force_master_ip support to async Sentinel client (#3524)

## 🧪 Experimental Features
- Adding VectorSet commands support. (#3584)

## 🔥 Breaking changes
- Changing the default value for ssl_check_hostname to True, to ensure security validations are not skipped by default (#3626)
**Important**:  When connecting to a Redis master via Sentinel, you may need to set ssl_check_hostname=False if the Sentinel service is not configured to return hostnames.
Refer to [issue #3629](https://github.com/redis/redis-py/releases/edit/v6.0.0#3629) for more details.
- Updated default value of 'require_full_coverage' argument to true for sync Cluster client to match sync/async cluster APIs (#3434)
- Adding default retry configuration changes for cluster clients (#3622)
**Important**:  When instantiating a cluster client `retry` object becomes mandatory.
    - If retry object is not provided a default one is created with ExponentialWithJitterBackoff strategy and number of retries synced with 'cluster_error_retry_attempts'
    - **In case a retry object is provided, its number of retries will be used for cluster operations number of retries and 'cluster_error_retry_attempts' will be ignored**
    - Argument 'cluster_error_retry_attempts' is now deprecated
    - **For Async Cluster Client the argument 'connection_error_retry_attempts' is completely removed**
- Updating default retry strategy for standalone clients. **3 retries with ExponentialWithJitterBackoff become the default config.** (#3614)
- Removing 'charset' and 'errors' inputs from the Redis initialization arguments - deprecated 3 years ago. (#3608)
- Removing support for RedisGears module. (#3553). For more info you can check the [deprecated Redis features](https://redis.io/docs/latest/operate/oss_and_stack/stack-with-enterprise/deprecated-features/)
- Removing support for RedisGraph module. (#3548). For more info you can check the [deprecated Redis features](https://redis.io/docs/latest/operate/oss_and_stack/stack-with-enterprise/deprecated-features/)
- Fixing typing for FCALL commands to match PEP 484 (#3537)
- Moved ClusterParser exceptions to BaseParser class (#3475)
- Changed default dialect to 2 (#3467) - This release introduces a client-side default dialect for Redis’ search and query capabilities. By default, the client now overrides the server-side dialect with version 2, automatically appending DIALECT 2to commands like FT.AGGREGATE and FT.SEARCH.
**Important**: Be aware that the query dialect may impact the results returned. If needed, you can revert to a different dialect version by configuring the client accordingly. You can find further details in the [query dialect documentation](https://redis.io/docs/latest/develop/interact/search-and-query/advanced-concepts/dialects/).

## ⚠️ Deprecations
- Adding default retry configuration changes for cluster clients (#3622)
- Updating default retry strategy for standalone clients. **3 retries with ExponentialWithJitterBackoff become the default config.** (#3614)
- Marks old RediSearch 1.0 commands as deprecated (#3606)
- Adding deprecation messages for the exposed in search module commands:  FT.CONFIG GET and FT.CONFIG SET (#3499 #3500 )
- Deprecating Search module config_set and config_get commands. Adding tests for modules ACL and modules config changes in 8.0 (#3489)

## 🐛 Bug Fixes
- Handling some special values when transforming response data into list (issue #3573) (#3586)
- Fixed infinitely recursive health checks (#3557)
- Fixing search module dropindex function not to send invalid third parameter. Updating pipeline infra (#3564)
- Fixing async cluster pipeline execution when client is created with cluster_error_retry_attempts=0 (#3545)
- Fix client_list with multiple client ids (#3539)
- Add valid Exception type to Except in ClusterPipeline (#3516)
- Fix #3130 TimeoutError during ClusterPipeline makes the client unrecoverable (#3513)
- Fix connection health check for protocol != 2 when auth credentials are provided and health check interval is configured (#3477)
- Fix AttributeError when client.get_default_node() returns None (#3458)
- fix: add TimeoutError handling in get_connection() (#1485)
- Avoid stacktrace on process exit in Client.__del__() (#3397)

## 🧰 Maintenance
- Updating pipeline tests to use test libs image with RC2. Updating timeseries tests. (#3623)
- Fixing flaky tests - part 2 (#3592)
- DOC-5107 added hash examples for index/query intro page (#3609)
- DOC-5073 vector set quantization and dimension reduction examples (#3597)
- Fixing some sporadically failing tests - part 1 (#3589)
- DOC-5073 added examples for vector sets intro page (#3590)
- Fix incorrect link to docs for fcall_ro command (#3576)
- Improvement: Use shutdown() Before close() in connection.py (#3567)
- Truncate pipeline exception message to a sane size (#3530)
- Docs/raae 724/remove redis ventures (#3579)
- Adding info for sentinel handling failover when Redis client is acquired with master_for() method. (#3578)
- Type hints improvements (#3420 #3480 #3522 #3526)
- Increasing the operations-per-run for stale issues GH action (#3556)
- Got rid of time.time() everywhere (#3551)
- Removing deprecated usage of forbid_global_loop=True in pytest.mark.asyncio decorator (#3542)
- allow more recent pyopenssl (#3541)
- Bump rojopolis/spellcheck-github-actions from 0.38.0 to 0.47.0 (#3538)
- Fix LockError message when releasing a lock. (#3534)
- Fix readthedocs.yml integration(#3527 #3528 #3529)
- Adding vector search tests for types int8/uint8 (#3525)
- Adding requested resources into sdist. Fix for issue #3057 (#3511)
- maintenance: Python 3.13 compatibility (#3510)
- Adding unit test for core info command related to modules info (#3507)
- Update connection_examples.ipynb (#3504)
- Update Python imports in doc examples (index_definition => indexDefinition) (#3490)
- DOC-4736 added geo indexing examples (#3485)
- Updated test infrastructure with latest versions (#3484)
- fix: update redis university url, the old link doesn't work (#3481)
- Fix #3464: Correct misleading exception_handler example in docs (#3474)
- Added Redis 8.0 to test matrix (#3469)
- Added workflow_dispatch for pypi release workflow (#3465)
- Avoid the multiprocessing forkserver method in Python 3.14 (#3442)
- Fix inaccurate docstring for unwatch() (#3424)
- Update README.md - Fix 'Note' - bold (#3413)
- skip ssl import if not available (#3078)
- Replace flake8+isort+black with ruff (#3147)
- Fixes minor grammar nit in documentation. (#3354)

## Contributors
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

</Release>

<Pagination page="1" total-pages="5" total-items="100" next="https://releases.sh/redis/redis-py.md?page=2" />
