chore(deps): update dependency redis to v8 #622

Closed
renovate-bot wants to merge 1 commit from renovate/redis-8.x into main
Contributor

This PR contains the following updates:

Package Change Age Confidence Update
redis (changelog) ==5.3.1 → ==8.1.0 age confidence major
redis (source) 7-alpine → 8-alpine age confidence major

Release Notes

redis/redis-py (redis)

v8.1.0: 8.1.0

Compare Source

Changes

✨ Highlights

Async maintenance notifications

redis-py now supports server-pushed maintenance notifications in the asyncio stack for both
standalone and cluster clients, bringing the async client to parity with the sync implementation.
When a Redis deployment signals maintenance events (such as node migration or failover windows), the
async client reacts through the maintenance-notifications handler (redis/maint_notifications.py and
its async integration under redis/asyncio/), allowing applications to adapt connection handling
during maintenance without downtime. (#​4177)

Expanded command coverage

This release adds a batch of new command surfaces across core data types and modules:

  • Lists — LMOVEM / BLMOVEM for moving multiple elements between lists (#​4174).
  • Sets — SDIFFCARD and SUNIONCARD cardinality commands (#​4171).
  • Streams — MAXCOUNT / MAXSIZE options for XREAD and XREADGROUP (#​4173).
  • Time Series — TS.READ (#​4170), TS.QUERYLABELS (#​4197), TS.NRANGE / TS.NREVRANGE (#​4163),
    and an exclude_empty (EXCLUDEEMPTY) option for TS.MRANGE / TS.MREVRANGE (#​4188).
  • Search — FT.ALIASLIST (#​4198) and a COLLECT reducer for aggregations (#​4179).
  • Sentinel — replica sentinel aliases (#​4127).

🚀 New Features

  • Add replica sentinel aliases (#​4127)
  • Add TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (#​4163)
  • feat: add TS.READ command support to the timeseries module (#​4170)
  • feat: add SDIFFCARD and SUNIONCARD command support (#​4171)
  • feat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (#​4173)
  • feat: add LMOVEM and BLMOVEM commands for moving multiple list elements (#​4174)
  • feat: add async maintenance-notifications support for standalone and cluster clients (#​4177)
  • feat: add COLLECT reducer support to search aggregations (#​4179)
  • feat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (#​4188)
  • feat: add TS.QUERYLABELS support to the timeseries command surface (#​4197)
  • feat: add FT.ALIASLIST support (#​4198)

⚠️ Experimental

  • feat: add client-side HIMPORT fieldset support for standalone and cluster clients (#​4205)

The feature considered unstable and public API might be changed in the future minor version

🐛 Bug Fixes

  • fix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (#​4156)
  • Fix Sentinel pool capacity loss after failover (#​4193)
  • fix: Restore NEVER_DECODE option for FT.SEARCH with protocol=3 (#​4196)
  • Decode ACL LOG string values on the default RESP3 legacy callback (#​4201)
  • fix: Fixed double decoding issue with unquote() (#​4222)
  • Fix lat/lon swap in search querystring geo() helper (#​4223)
  • Fix FIELDNAME alias dropping first character of un-prefixed fields (#​4224)

🧰 Maintenance

  • ci: report test duration metrics to Grafana Cloud (PAWS) (#​4132)
  • fix(hiredis): raise ConnectionError instead of AttributeError on concurrent disconnect (#​4136)
  • docs: consolidate AI-agent guidance into root AGENTS.md and portable agents/skills (#​4159)
  • Bump actions/checkout from 6 to 7 (#​4160)
  • Bump rojopolis/spellcheck-github-actions from 0.60.0 to 0.62.0 (#​4161)
  • test(search): add multi-language RediSearch coverage, re-enable search module pipeline tests, add 8.10 to CI matrix (#​4162)
  • Remove stale "connection" arg from get_resolved_ip docstring (#​4164)
  • Add context manager support to ConnectionPool (#​4167)
  • test: add unit tests for cluster key_slot hash-tag logic (#​4168)
  • Add unit tests for string helper utilities (#​4180)
  • test: add unit tests for decode_field_value (#​4181)
  • Add unit tests for extract_expire_flags and truncate_text (#​4183)
  • fix: add close()/aclose() to Sentinel to release sentinel client pools (#​4184)
  • test: add FT.SEARCH server-timeout coverage for return and fail policies (#​4186)
  • test: run the standard suite against an external Redis Enterprise database (#​4189)
  • build: bump Read the Docs build.os from ubuntu-20.04 to ubuntu-24.04 (#​4190)
  • fix: add missing type annotations to LockError and RedisClusterException (#​4194)
  • test: add VectorField RERANK serialization tests for sync and async search (#​4202)

We'd like to thank all the contributors who worked on this release!
@​LOGESHWAR123 @​kiryazovi-redis @​Stunned1 @​eeshsaxena @​sean-kim05 @​Brumbelow @​Sanjays2402 @​nazarli-shabnam @​chuenchen309 @​petyaslavova

v8.0.1: 8.0.1

Compare Source

Changes

🐛 Bug Fixes

  • Fix Unix socket maintenance notification handling and tests (#​4097)
  • Fix async cluster node connection release on write errors (#​4111)
  • Fixed async MultiDBClient with underlying RedisCluster (#​4108)
  • Fix hiredis readiness checks for high file descriptors (#​4115)
  • fix(search): parse RESP3 FT.SEARCH responses with bytes-typed keys (#​4109)
  • Fixing pubsub's listen method to be blocking. (#​4119)
  • fix(asyncio): release pooled connection when Pipeline.reset() is cancelled (#​4123)
  • Avoid per-check fd allocation in hiredis _socket_can_read() — use poll() instead of a per-call selector (#​4118)

🧰 Maintenance

  • Updating PyJWT dependency. (#​4100)
  • Update CI badge in README.md (#​4099)
  • Add missing url query argument parser for ssl_min_version (#​4047)
  • ci: least-privilege permissions on spellcheck (read) and stale-issues (job-level write for actions/stale) (#​4080)
  • Bumping github-versions actions (#​4102)
  • Updating lib version + supported Redis versions in README.md + updating the Redis versions in CI test matrix (#​4092)

We'd like to thank all the contributors who worked on this release!
@​violuke @​mokashang @​arpitjain099 @​coredumperror @​elena-kolevska @​vladvildanov @​petyaslavova

v8.0.0: 8.0.0

Compare Source

Changes

🚀 Highlights

Async Cluster PubSub

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.

Keyspace and subkey notifications

Redis Keyspace Notifications are now supported for standalone and cluster deployments in both sync and async modes. New classes — KeyspaceNotifications, ClusterKeyspaceNotifications, AsyncKeyspaceNotifications, and AsyncClusterKeyspaceNotifications — provide a high-level API for keyspace/keyevent subscriptions and subkey notification families: subkeyspace, subkeyevent, subkeyspaceitem, and subkeyspaceevent. Convenience methods like subscribe_keyspace(), subscribe_keyevent(), subscribe_subkeyspace(), subscribe_subkeyevent(), subscribe_subkeyspaceitem(), and subscribe_subkeyspaceevent() simplify common patterns, with channel classes for both key and subkey channels.

In cluster mode, subscriptions are managed across primary nodes because each node emits notifications only for keys it owns, with built-in topology-change handling. Sync run_in_thread() and async listen() workflows are supported.

Redis Array commands(https://redis.io/docs/latest/develop/data-types/arrays/)

redis-py now supports Redis Arrays, a preview Redis data type for sparse, index-addressable sequences of strings. New AR* command helpers cover indexed reads/writes, range scans, deletion, cursor-based insertion, ring-buffer writes, metadata, text search, and aggregation, including ARGET, ARSET, ARMGET, ARMSET, ARSCAN, ARGREP, ARRING, and AROP.

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.

RESP3 by default with opt-in unified responses

redis-py 8.0.0 now uses RESP3 on the wire by default while preserving legacy RESP2-compatible Python response shapes for existing applications (#​4052). Protocol-independent unified response shapes are available by setting legacy_responses=False, so affected commands return the same Python structure with RESP2 or RESP3.

Use protocol=2 to force RESP2 on the wire, protocol=3 to opt into native RESP3 response shapes, or legacy_responses=False to migrate to unified responses. See docs/unified_responses.rst and specs/unified_responses_migration_guide.md for the affected commands and migration details.

Connection and retry defaults

Default connection settings were updated: socket_timeout and socket_connect_timeout now default to 5 seconds, TCP keepalive is enabled by default, socket reads use a 32 KB buffer, connection pools default to max_connections=100, and retry defaults now use 10 attempts with exponential jitter backoff.

Note: socket_timeout can affect blocking commands such as BLPOP/BRPOP; if a command blocks longer than the client socket timeout, it may raise TimeoutError before the command timeout elapses (#​2807).

🧪 Experimental Features

  • Added support for new array commands (#​4055)

🚀 New Features

  • Support Cluster PubSub in asyncio (#​3736)
  • Add Redis Keyspace Notifications Support for Redis Cluster (#​3962)
  • Add random load balancing strategy which allows for use of the primary (#​4027)
  • Add FPHA (floating-point homogeneous array) arg support to JSON.SET (#​4011)
  • Added custom Claude command + XNACK command support (#​4030)
  • Adding Time Series Multiple Aggregators support (#​4035)
  • Adding support for new COUNT aggregator for some sorted set commands - ZINTER, ZINTERSTORE, ZUNION, ZUNIONSTORE (#​4034)
  • Adding support for new INCREX command (#​4067 #​4077)
  • Add support for PubSub subscriptions with binary channel names and handlers (#​4068)

🔥 Breaking changes

  • Type hints improvements - fixing static code analysis issues related to combined sync and async return types(vectorsets + commands in core.py) (#​3991)
  • Type hints improvements - fixing static code analysis issues related to combined sync and async return types - modules (#​4005)
  • Add Redis Keyspace Notifications Support for Redis Cluster (#​3962)
  • Added support for subkey notifications (#​4040)
  • Changing the default protocol used to RESP3, keeping the responses for the default config compatible with the current RESP2 shape. Adding the possibility to opt-in for unified responses for both protocols. (#​4025 #​4031 #​4052 #​4046)
  • Type Lock.extend and Lock.reacquire as Literal[True] (#​4045)
  • Handle cluster slot migration in ClusterPubSub (shard subscription reconciliation) (#​4044)
  • Avoid zero-timeout async reads in hiredis connections readiness checks and replace async's can_read_destructive with non-destructive can_read. (#​4063)
  • Updates in default connection and retry settings (#​4082)

🐛 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)
  • Fix async cluster connection cleanup on topology refresh (#​4057)
  • Normalize scalar prefixes in IndexDefinition (#​3983)
  • Avoid zero-timeout async reads in hiredis connections readiness checks and replace async's can_read_destructive with non-destructive can_read. (#​4063)
  • Preserve explicit None for client metadata config (#​4081)

⚠️ Deprecations

  • Align deprecation of lib_name/lib_version in async cluster (#​3995)
  • Add deprecation notice to setex() method documentation (#​4051)
  • Avoid zero-timeout async reads in hiredis connections readiness checks and replace async's can_read_destructive with non-destructive can_read. (#​4063)

🧰 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)
  • Reorganize unit tests grouping - extracting the tests that define their hardcoded client configuration separately (#​4029)
  • Update home_json.py - this will make the docs examples interactive (#​4020)
  • Fix Sync ClusterPubSub.disconnect() — Potential AttributeError (#​4036)
  • Refactor ClusterPubSub to reuse NodesManager-managed connections. (#​4037)
  • Fix CROSSSLOT on sharded pubsub resubscription by grouping channels per slot (#​4038)
  • fix(cluster): enable health check in ClusterNode command execution (#​4043)
  • Add Python version '3.14t' to CI matrix (#​4058)
  • docs: fix typos in messages, docstrings, and comments (#​4062)
  • Updating hash commands type hints and jsonget return type hints (#​4054)
  • Fix flaky tests (#​4071)
  • Add CLAUDE.md and /sync-claude-md skill for managing (#​4066)
  • Randomize cluster startup node order during topology refresh (#​4060)

We'd like to thank all the contributors who worked on this release!
@​hydroblaze @​Br1an67 @​mokashang @​swoutch @​armorbreak001 @​Brumbelow @​paoloredis @​Pack-Yak1 @​abersheeran @​alisaifee @​majiayu000 @​uglide @​dmaier-redislabs @​vladvildanov @​petyaslavova

v7.4.1: 7.4.1

Compare Source

Changes

🐛 Bug Fixes

  • Preserve explicit None for client metadata config (#​4081)

🧰 Maintenance

  • Updating PyJWT dependency. (#​4100)
  • Addressing dependency vulnerabilities and flaky test fixes (source diff)

We'd like to thank all the contributors who worked on this release!
@​elena-kolevska @​vladvildanov @​petyaslavova

v7.4.0: 7.4.0

Compare Source

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

v7.3.1: 7.3.1

Compare Source

Changes

🐛 Bug Fixes

  • Preserve explicit None for client metadata config (#​4081)

🧰 Maintenance

  • Updating PyJWT dependency. (#​4100)
  • Addressing dependency vulnerabilities and flaky test fixes (source diff)

We'd like to thank all the contributors who worked on this release!
@​elena-kolevska @​vladvildanov @​petyaslavova

v7.3.0: 7.3.0

Compare Source

Changes

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:

  • 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

v7.2.2: 7.2.2

Compare Source

Changes

🐛 Bug Fixes

  • Preserve explicit None for client metadata config (#​4081)

🧰 Maintenance

  • Updating PyJWT dependency. (#​4100)
  • Addressing dependency vulnerabilities and flaky test fixes (source diff)

We'd like to thank all the contributors who worked on this release!
@​elena-kolevska @​vladvildanov @​petyaslavova

v7.2.1: 7.2.1

Compare Source

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

v7.2.0: 7.2.0

Compare Source

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.
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

v7.1.1: 7.1.1

Compare Source

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

v7.1.0: 7.1.0

Compare Source

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

🔥 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

v7.0.1: 7.0.1

Compare Source

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

v7.0.0: 7.0.0

Compare Source

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

🔥 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

v6.4.0: 6.4.0

Compare Source

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

v6.3.0: 6.3.0

Compare Source

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

v6.2.0: 6.2.0

Compare Source

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

v6.1.1

Compare Source

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

v6.1.0: 6.1.0

Compare Source

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

v6.0.0: 6.0.0

Compare Source

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 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
  • Removing support for RedisGraph module. (#​3548). For more info you can check the deprecated Redis 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.

⚠️ 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


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • "before 9am on monday"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Update | |---|---|---|---|---| | [redis](https://github.com/redis/redis-py) ([changelog](https://github.com/redis/redis-py/releases)) | `==5.3.1` → `==8.1.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/redis/8.1.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/redis/5.3.1/8.1.0?slim=true) | major | | [redis](https://hub.docker.com/_/redis) ([source](https://github.com/redis/docker-library-redis)) | `7-alpine` → `8-alpine` | ![age](https://developer.mend.io/api/mc/badges/age/docker/redis/8?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/redis/7/8?slim=true) | major | --- ### Release Notes <details> <summary>redis/redis-py (redis)</summary> ### [`v8.1.0`](https://github.com/redis/redis-py/releases/tag/v8.1.0): 8.1.0 [Compare Source](https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0) ### Changes #### ✨ Highlights ##### Async maintenance notifications redis-py now supports server-pushed **maintenance notifications** in the asyncio stack for both standalone and cluster clients, bringing the async client to parity with the sync implementation. When a Redis deployment signals maintenance events (such as node migration or failover windows), the async client reacts through the maintenance-notifications handler (`redis/maint_notifications.py` and its async integration under `redis/asyncio/`), allowing applications to adapt connection handling during maintenance without downtime. ([#&#8203;4177](https://github.com/redis/redis-py/issues/4177)) ##### Expanded command coverage This release adds a batch of new command surfaces across core data types and modules: - **Lists** — `LMOVEM` / `BLMOVEM` for moving multiple elements between lists ([#&#8203;4174](https://github.com/redis/redis-py/issues/4174)). - **Sets** — `SDIFFCARD` and `SUNIONCARD` cardinality commands ([#&#8203;4171](https://github.com/redis/redis-py/issues/4171)). - **Streams** — `MAXCOUNT` / `MAXSIZE` options for `XREAD` and `XREADGROUP` ([#&#8203;4173](https://github.com/redis/redis-py/issues/4173)). - **Time Series** — `TS.READ` ([#&#8203;4170](https://github.com/redis/redis-py/issues/4170)), `TS.QUERYLABELS` ([#&#8203;4197](https://github.com/redis/redis-py/issues/4197)), `TS.NRANGE` / `TS.NREVRANGE` ([#&#8203;4163](https://github.com/redis/redis-py/issues/4163)), and an `exclude_empty` (`EXCLUDEEMPTY`) option for `TS.MRANGE` / `TS.MREVRANGE` ([#&#8203;4188](https://github.com/redis/redis-py/issues/4188)). - **Search** — `FT.ALIASLIST` ([#&#8203;4198](https://github.com/redis/redis-py/issues/4198)) and a `COLLECT` reducer for aggregations ([#&#8203;4179](https://github.com/redis/redis-py/issues/4179)). - **Sentinel** — replica sentinel aliases ([#&#8203;4127](https://github.com/redis/redis-py/issues/4127)). #### 🚀 New Features - Add replica sentinel aliases ([#&#8203;4127](https://github.com/redis/redis-py/issues/4127)) - Add TS.NRANGE and TS.NREVRANGE support to the timeseries command surface ([#&#8203;4163](https://github.com/redis/redis-py/issues/4163)) - feat: add TS.READ command support to the timeseries module ([#&#8203;4170](https://github.com/redis/redis-py/issues/4170)) - feat: add SDIFFCARD and SUNIONCARD command support ([#&#8203;4171](https://github.com/redis/redis-py/issues/4171)) - feat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP ([#&#8203;4173](https://github.com/redis/redis-py/issues/4173)) - feat: add LMOVEM and BLMOVEM commands for moving multiple list elements ([#&#8203;4174](https://github.com/redis/redis-py/issues/4174)) - feat: add async maintenance-notifications support for standalone and cluster clients ([#&#8203;4177](https://github.com/redis/redis-py/issues/4177)) - feat: add COLLECT reducer support to search aggregations ([#&#8203;4179](https://github.com/redis/redis-py/issues/4179)) - feat: add exclude\_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE ([#&#8203;4188](https://github.com/redis/redis-py/issues/4188)) - feat: add TS.QUERYLABELS support to the timeseries command surface ([#&#8203;4197](https://github.com/redis/redis-py/issues/4197)) - feat: add FT.ALIASLIST support ([#&#8203;4198](https://github.com/redis/redis-py/issues/4198)) #### ⚠️ Experimental - feat: add client-side HIMPORT fieldset support for standalone and cluster clients ([#&#8203;4205](https://github.com/redis/redis-py/issues/4205)) The feature considered unstable and **public API might be changed in the future minor version** #### 🐛 Bug Fixes - fix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) ([#&#8203;4156](https://github.com/redis/redis-py/issues/4156)) - Fix Sentinel pool capacity loss after failover ([#&#8203;4193](https://github.com/redis/redis-py/issues/4193)) - fix: Restore NEVER\_DECODE option for FT.SEARCH with protocol=3 ([#&#8203;4196](https://github.com/redis/redis-py/issues/4196)) - Decode ACL LOG string values on the default RESP3 legacy callback ([#&#8203;4201](https://github.com/redis/redis-py/issues/4201)) - fix: Fixed double decoding issue with unquote() ([#&#8203;4222](https://github.com/redis/redis-py/issues/4222)) - Fix lat/lon swap in search querystring geo() helper ([#&#8203;4223](https://github.com/redis/redis-py/issues/4223)) - Fix FIELDNAME alias dropping first character of un-prefixed fields ([#&#8203;4224](https://github.com/redis/redis-py/issues/4224)) #### 🧰 Maintenance - ci: report test duration metrics to Grafana Cloud (PAWS) ([#&#8203;4132](https://github.com/redis/redis-py/issues/4132)) - fix(hiredis): raise ConnectionError instead of AttributeError on concurrent disconnect ([#&#8203;4136](https://github.com/redis/redis-py/issues/4136)) - docs: consolidate AI-agent guidance into root AGENTS.md and portable agents/skills ([#&#8203;4159](https://github.com/redis/redis-py/issues/4159)) - Bump actions/checkout from 6 to 7 ([#&#8203;4160](https://github.com/redis/redis-py/issues/4160)) - Bump rojopolis/spellcheck-github-actions from 0.60.0 to 0.62.0 ([#&#8203;4161](https://github.com/redis/redis-py/issues/4161)) - test(search): add multi-language RediSearch coverage, re-enable search module pipeline tests, add 8.10 to CI matrix ([#&#8203;4162](https://github.com/redis/redis-py/issues/4162)) - Remove stale "connection" arg from get\_resolved\_ip docstring ([#&#8203;4164](https://github.com/redis/redis-py/issues/4164)) - Add context manager support to ConnectionPool ([#&#8203;4167](https://github.com/redis/redis-py/issues/4167)) - test: add unit tests for cluster key\_slot hash-tag logic ([#&#8203;4168](https://github.com/redis/redis-py/issues/4168)) - Add unit tests for string helper utilities ([#&#8203;4180](https://github.com/redis/redis-py/issues/4180)) - test: add unit tests for decode\_field\_value ([#&#8203;4181](https://github.com/redis/redis-py/issues/4181)) - Add unit tests for extract\_expire\_flags and truncate\_text ([#&#8203;4183](https://github.com/redis/redis-py/issues/4183)) - fix: add close()/aclose() to Sentinel to release sentinel client pools ([#&#8203;4184](https://github.com/redis/redis-py/issues/4184)) - test: add FT.SEARCH server-timeout coverage for return and fail policies ([#&#8203;4186](https://github.com/redis/redis-py/issues/4186)) - test: run the standard suite against an external Redis Enterprise database ([#&#8203;4189](https://github.com/redis/redis-py/issues/4189)) - build: bump Read the Docs build.os from ubuntu-20.04 to ubuntu-24.04 ([#&#8203;4190](https://github.com/redis/redis-py/issues/4190)) - fix: add missing type annotations to LockError and RedisClusterException ([#&#8203;4194](https://github.com/redis/redis-py/issues/4194)) - test: add VectorField RERANK serialization tests for sync and async search ([#&#8203;4202](https://github.com/redis/redis-py/issues/4202)) We'd like to thank all the contributors who worked on this release! [@&#8203;LOGESHWAR123](https://github.com/LOGESHWAR123) [@&#8203;kiryazovi-redis](https://github.com/kiryazovi-redis) [@&#8203;Stunned1](https://github.com/Stunned1) [@&#8203;eeshsaxena](https://github.com/eeshsaxena) [@&#8203;sean-kim05](https://github.com/sean-kim05) [@&#8203;Brumbelow](https://github.com/Brumbelow) [@&#8203;Sanjays2402](https://github.com/Sanjays2402) [@&#8203;nazarli-shabnam](https://github.com/nazarli-shabnam) [@&#8203;chuenchen309](https://github.com/chuenchen309) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v8.0.1`](https://github.com/redis/redis-py/releases/tag/v8.0.1): 8.0.1 [Compare Source](https://github.com/redis/redis-py/compare/v8.0.0...v8.0.1) ### Changes #### 🐛 Bug Fixes - Fix Unix socket maintenance notification handling and tests ([#&#8203;4097](https://github.com/redis/redis-py/issues/4097)) - Fix async cluster node connection release on write errors ([#&#8203;4111](https://github.com/redis/redis-py/issues/4111)) - Fixed async MultiDBClient with underlying RedisCluster ([#&#8203;4108](https://github.com/redis/redis-py/issues/4108)) - Fix hiredis readiness checks for high file descriptors ([#&#8203;4115](https://github.com/redis/redis-py/issues/4115)) - fix(search): parse RESP3 FT.SEARCH responses with bytes-typed keys ([#&#8203;4109](https://github.com/redis/redis-py/issues/4109)) - Fixing pubsub's listen method to be blocking. ([#&#8203;4119](https://github.com/redis/redis-py/issues/4119)) - fix(asyncio): release pooled connection when Pipeline.reset() is cancelled ([#&#8203;4123](https://github.com/redis/redis-py/issues/4123)) - Avoid per-check fd allocation in hiredis \_socket\_can\_read() — use poll() instead of a per-call selector ([#&#8203;4118](https://github.com/redis/redis-py/issues/4118)) #### 🧰 Maintenance - Updating PyJWT dependency. ([#&#8203;4100](https://github.com/redis/redis-py/issues/4100)) - Update CI badge in README.md ([#&#8203;4099](https://github.com/redis/redis-py/issues/4099)) - Add missing url query argument parser for ssl\_min\_version ([#&#8203;4047](https://github.com/redis/redis-py/issues/4047)) - ci: least-privilege permissions on spellcheck (read) and stale-issues (job-level write for actions/stale) ([#&#8203;4080](https://github.com/redis/redis-py/issues/4080)) - Bumping github-versions actions ([#&#8203;4102](https://github.com/redis/redis-py/issues/4102)) - Updating lib version + supported Redis versions in README.md + updating the Redis versions in CI test matrix ([#&#8203;4092](https://github.com/redis/redis-py/issues/4092)) We'd like to thank all the contributors who worked on this release! [@&#8203;violuke](https://github.com/violuke) [@&#8203;mokashang](https://github.com/mokashang) [@&#8203;arpitjain099](https://github.com/arpitjain099) [@&#8203;coredumperror](https://github.com/coredumperror) [@&#8203;elena-kolevska](https://github.com/elena-kolevska) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v8.0.0`](https://github.com/redis/redis-py/releases/tag/v8.0.0): 8.0.0 [Compare Source](https://github.com/redis/redis-py/compare/v7.4.1...v8.0.0) ### Changes #### 🚀 Highlights ##### Async Cluster PubSub 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. ##### Keyspace and subkey notifications Redis Keyspace Notifications are now supported for standalone and cluster deployments in both sync and async modes. New classes — `KeyspaceNotifications`, `ClusterKeyspaceNotifications`, `AsyncKeyspaceNotifications`, and `AsyncClusterKeyspaceNotifications` — provide a high-level API for keyspace/keyevent subscriptions and subkey notification families: `subkeyspace`, `subkeyevent`, `subkeyspaceitem`, and `subkeyspaceevent`. Convenience methods like `subscribe_keyspace()`, `subscribe_keyevent()`, `subscribe_subkeyspace()`, `subscribe_subkeyevent()`, `subscribe_subkeyspaceitem()`, and `subscribe_subkeyspaceevent()` simplify common patterns, with channel classes for both key and subkey channels. In cluster mode, subscriptions are managed across primary nodes because each node emits notifications only for keys it owns, with built-in topology-change handling. Sync `run_in_thread()` and async `listen()` workflows are supported. ##### Redis Array commands(<https://redis.io/docs/latest/develop/data-types/arrays/>) redis-py now supports [Redis Arrays](https://redis.io/docs/latest/develop/data-types/arrays/), a preview Redis data type for sparse, index-addressable sequences of strings. New `AR*` command helpers cover indexed reads/writes, range scans, deletion, cursor-based insertion, ring-buffer writes, metadata, text search, and aggregation, including `ARGET`, `ARSET`, `ARMGET`, `ARMSET`, `ARSCAN`, `ARGREP`, `ARRING`, and `AROP`. ##### 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. ##### RESP3 by default with opt-in unified responses redis-py 8.0.0 now uses RESP3 on the wire by default while preserving legacy RESP2-compatible Python response shapes for existing applications ([#&#8203;4052](https://github.com/redis/redis-py/issues/4052)). Protocol-independent unified response shapes are available by setting `legacy_responses=False`, so affected commands return the same Python structure with RESP2 or RESP3. Use `protocol=2` to force RESP2 on the wire, `protocol=3` to opt into native RESP3 response shapes, or `legacy_responses=False` to migrate to unified responses. See [`docs/unified_responses.rst`](docs/unified_responses.rst) and [`specs/unified_responses_migration_guide.md`](specs/unified_responses_migration_guide.md) for the affected commands and migration details. ##### Connection and retry defaults Default connection settings were updated: `socket_timeout` and `socket_connect_timeout` now default to 5 seconds, TCP keepalive is enabled by default, socket reads use a 32 KB buffer, connection pools default to `max_connections=100`, and retry defaults now use 10 attempts with exponential jitter backoff. Note: `socket_timeout` can affect blocking commands such as `BLPOP`/`BRPOP`; if a command blocks longer than the client socket timeout, it may raise `TimeoutError` before the command timeout elapses ([#&#8203;2807](https://github.com/redis/redis-py/issues/2807)). #### 🧪 Experimental Features - Added support for new array commands ([#&#8203;4055](https://github.com/redis/redis-py/issues/4055)) #### 🚀 New Features - Support Cluster PubSub in asyncio ([#&#8203;3736](https://github.com/redis/redis-py/issues/3736)) - Add Redis Keyspace Notifications Support for Redis Cluster ([#&#8203;3962](https://github.com/redis/redis-py/issues/3962)) - Add random load balancing strategy which allows for use of the primary ([#&#8203;4027](https://github.com/redis/redis-py/issues/4027)) - Add FPHA (floating-point homogeneous array) arg support to JSON.SET ([#&#8203;4011](https://github.com/redis/redis-py/issues/4011)) - Added custom Claude command + XNACK command support ([#&#8203;4030](https://github.com/redis/redis-py/issues/4030)) - Adding Time Series Multiple Aggregators support ([#&#8203;4035](https://github.com/redis/redis-py/issues/4035)) - Adding support for new COUNT aggregator for some sorted set commands - ZINTER, ZINTERSTORE, ZUNION, ZUNIONSTORE ([#&#8203;4034](https://github.com/redis/redis-py/issues/4034)) - Adding support for new INCREX command ([#&#8203;4067](https://github.com/redis/redis-py/issues/4067) [#&#8203;4077](https://github.com/redis/redis-py/issues/4077)) - Add support for PubSub subscriptions with binary channel names and handlers ([#&#8203;4068](https://github.com/redis/redis-py/issues/4068)) #### 🔥 Breaking changes - Type hints improvements - fixing static code analysis issues related to combined sync and async return types(vectorsets + commands in core.py) ([#&#8203;3991](https://github.com/redis/redis-py/issues/3991)) - Type hints improvements - fixing static code analysis issues related to combined sync and async return types - modules ([#&#8203;4005](https://github.com/redis/redis-py/issues/4005)) - Add Redis Keyspace Notifications Support for Redis Cluster ([#&#8203;3962](https://github.com/redis/redis-py/issues/3962)) - Added support for subkey notifications ([#&#8203;4040](https://github.com/redis/redis-py/issues/4040)) - Changing the default protocol used to RESP3, keeping the responses for the default config compatible with the current RESP2 shape. Adding the possibility to opt-in for unified responses for both protocols. ([#&#8203;4025](https://github.com/redis/redis-py/issues/4025) [#&#8203;4031](https://github.com/redis/redis-py/issues/4031) [#&#8203;4052](https://github.com/redis/redis-py/issues/4052) [#&#8203;4046](https://github.com/redis/redis-py/issues/4046)) - Type Lock.extend and Lock.reacquire as Literal\[True] ([#&#8203;4045](https://github.com/redis/redis-py/issues/4045)) - Handle cluster slot migration in ClusterPubSub (shard subscription reconciliation) ([#&#8203;4044](https://github.com/redis/redis-py/issues/4044)) - Avoid zero-timeout async reads in hiredis connections readiness checks and replace async's can\_read\_destructive with non-destructive can\_read. ([#&#8203;4063](https://github.com/redis/redis-py/issues/4063)) - Updates in default connection and retry settings ([#&#8203;4082](https://github.com/redis/redis-py/issues/4082)) #### 🐛 Bug Fixes - fix: guard disconnect() against RuntimeError on Python 3.13+ ([#&#8203;3856](https://github.com/redis/redis-py/issues/3856)) ([#&#8203;4013](https://github.com/redis/redis-py/issues/4013)) - Fix CacheProxyConnection hang when invalidation arrives on another connection ([#&#8203;3600](https://github.com/redis/redis-py/issues/3600)) ([#&#8203;4014](https://github.com/redis/redis-py/issues/4014)) - fix: handle scientific notation in score\_cast\_func for RESP2 ([#&#8203;4016](https://github.com/redis/redis-py/issues/4016)) - Fix TypeError in CacheProxyConnection when cached response is non-bytes ([#&#8203;4017](https://github.com/redis/redis-py/issues/4017)) - Fix async cluster connection cleanup on topology refresh ([#&#8203;4057](https://github.com/redis/redis-py/issues/4057)) - Normalize scalar prefixes in IndexDefinition ([#&#8203;3983](https://github.com/redis/redis-py/issues/3983)) - Avoid zero-timeout async reads in hiredis connections readiness checks and replace async's can\_read\_destructive with non-destructive can\_read. ([#&#8203;4063](https://github.com/redis/redis-py/issues/4063)) - Preserve explicit None for client metadata config ([#&#8203;4081](https://github.com/redis/redis-py/issues/4081)) #### ⚠️ Deprecations - Align deprecation of lib\_name/lib\_version in async cluster ([#&#8203;3995](https://github.com/redis/redis-py/issues/3995)) - Add deprecation notice to setex() method documentation ([#&#8203;4051](https://github.com/redis/redis-py/issues/4051)) - Avoid zero-timeout async reads in hiredis connections readiness checks and replace async's can\_read\_destructive with non-destructive can\_read. ([#&#8203;4063](https://github.com/redis/redis-py/issues/4063)) #### 🧰 Maintenance - Adding unstable 8.8 build to pipeline test matrix. Updating the lib version in master. ([#&#8203;4004](https://github.com/redis/redis-py/issues/4004)) - Fix type hints for register\_script to support RedisCluster ([#&#8203;3876](https://github.com/redis/redis-py/issues/3876)) - Updating dependencies to fix reported vulnerabilities ([#&#8203;4012](https://github.com/redis/redis-py/issues/4012)) - Bump release-drafter/release-drafter from 6 to 7 ([#&#8203;4019](https://github.com/redis/redis-py/issues/4019)) - Bump rojopolis/spellcheck-github-actions from 0.58.0 to 0.60.0 ([#&#8203;4018](https://github.com/redis/redis-py/issues/4018)) - Reorganize unit tests grouping - extracting the tests that define their hardcoded client configuration separately ([#&#8203;4029](https://github.com/redis/redis-py/issues/4029)) - Update home\_json.py - this will make the docs examples interactive ([#&#8203;4020](https://github.com/redis/redis-py/issues/4020)) - Fix Sync ClusterPubSub.disconnect() — Potential AttributeError ([#&#8203;4036](https://github.com/redis/redis-py/issues/4036)) - Refactor ClusterPubSub to reuse NodesManager-managed connections. ([#&#8203;4037](https://github.com/redis/redis-py/issues/4037)) - Fix CROSSSLOT on sharded pubsub resubscription by grouping channels per slot ([#&#8203;4038](https://github.com/redis/redis-py/issues/4038)) - fix(cluster): enable health check in ClusterNode command execution ([#&#8203;4043](https://github.com/redis/redis-py/issues/4043)) - Add Python version '3.14t' to CI matrix ([#&#8203;4058](https://github.com/redis/redis-py/issues/4058)) - docs: fix typos in messages, docstrings, and comments ([#&#8203;4062](https://github.com/redis/redis-py/issues/4062)) - Updating hash commands type hints and jsonget return type hints ([#&#8203;4054](https://github.com/redis/redis-py/issues/4054)) - Fix flaky tests ([#&#8203;4071](https://github.com/redis/redis-py/issues/4071)) - Add CLAUDE.md and /sync-claude-md skill for managing ([#&#8203;4066](https://github.com/redis/redis-py/issues/4066)) - Randomize cluster startup node order during topology refresh ([#&#8203;4060](https://github.com/redis/redis-py/issues/4060)) We'd like to thank all the contributors who worked on this release! [@&#8203;hydroblaze](https://github.com/hydroblaze) [@&#8203;Br1an67](https://github.com/Br1an67) [@&#8203;mokashang](https://github.com/mokashang) [@&#8203;swoutch](https://github.com/swoutch) [@&#8203;armorbreak001](https://github.com/armorbreak001) [@&#8203;Brumbelow](https://github.com/Brumbelow) [@&#8203;paoloredis](https://github.com/paoloredis) [@&#8203;Pack-Yak1](https://github.com/Pack-Yak1) [@&#8203;abersheeran](https://github.com/abersheeran) [@&#8203;alisaifee](https://github.com/alisaifee) [@&#8203;majiayu000](https://github.com/majiayu000) [@&#8203;uglide](https://github.com/uglide) [@&#8203;dmaier-redislabs](https://github.com/dmaier-redislabs) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.4.1`](https://github.com/redis/redis-py/releases/tag/v7.4.1): 7.4.1 [Compare Source](https://github.com/redis/redis-py/compare/v7.4.0...v7.4.1) ### Changes #### 🐛 Bug Fixes - Preserve explicit None for client metadata config ([#&#8203;4081](https://github.com/redis/redis-py/issues/4081)) #### 🧰 Maintenance - Updating PyJWT dependency. ([#&#8203;4100](https://github.com/redis/redis-py/issues/4100)) - Addressing dependency vulnerabilities and flaky test fixes ([source diff](https://github.com/redis/redis-py/compare/582cc3510f431e3c339d1cd8e78c978fff8f74da%5E...582cc3510f431e3c339d1cd8e78c978fff8f74da)) We'd like to thank all the contributors who worked on this release! [@&#8203;elena-kolevska](https://github.com/elena-kolevska) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.4.0`](https://github.com/redis/redis-py/releases/tag/v7.4.0): 7.4.0 [Compare Source](https://github.com/redis/redis-py/compare/v7.3.1...v7.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 ([#&#8203;3999](https://github.com/redis/redis-py/issues/3999)) - Fixing security concern in **repr** methods for ConnectionPools - passwords might leak in plain text logs ([#&#8203;3998](https://github.com/redis/redis-py/issues/3998)) - Refactored connection count and SCH metric collection ([#&#8203;4001](https://github.com/redis/redis-py/issues/4001)) #### 🧪 Experimental Features - Refactored health check logic for MultiDBClient ([#&#8203;3994](https://github.com/redis/redis-py/issues/3994)) #### 🧰 Maintenance - Expose basic Otel classes and functions to be importable through redis.observability to match the examples in the readthedocs ([#&#8203;3996](https://github.com/redis/redis-py/issues/3996)) We'd like to thank all the contributors who worked on this release! [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.3.1`](https://github.com/redis/redis-py/releases/tag/v7.3.1): 7.3.1 [Compare Source](https://github.com/redis/redis-py/compare/v7.3.0...v7.3.1) ### Changes #### 🐛 Bug Fixes - Preserve explicit None for client metadata config ([#&#8203;4081](https://github.com/redis/redis-py/issues/4081)) #### 🧰 Maintenance - Updating PyJWT dependency. ([#&#8203;4100](https://github.com/redis/redis-py/issues/4100)) - Addressing dependency vulnerabilities and flaky test fixes ([source diff](https://github.com/redis/redis-py/compare/c4a2a390d76506cc8b2c7d6730ff78c01c780657%5E...8636fa7716d00fc69c17ee55914eda88a9c335ba)) We'd like to thank all the contributors who worked on this release! [@&#8203;elena-kolevska](https://github.com/elena-kolevska) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.3.0`](https://github.com/redis/redis-py/releases/tag/v7.3.0): 7.3.0 [Compare Source](https://github.com/redis/redis-py/compare/v7.2.2...v7.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 ([#&#8203;3977](https://github.com/redis/redis-py/issues/3977)) #### 🐛 Bug Fixes - \[async] Adding access to cluster client's nodes\_manager and set\_response\_callback in ClusterPipeline objects ([#&#8203;3989](https://github.com/redis/redis-py/issues/3989)) - fix(connection): Ensure we have an initialized protocol in connection ([#&#8203;3981](https://github.com/redis/redis-py/issues/3981)) #### 🧰 Maintenance - fix: use KeysT for blpop and brpop keys parameter type annotation ([#&#8203;3987](https://github.com/redis/redis-py/issues/3987) [#&#8203;3990](https://github.com/redis/redis-py/issues/3990)) - Bump actions/upload-artifact from 6 to 7 ([#&#8203;3985](https://github.com/redis/redis-py/issues/3985)) - fix: replace 3 bare except clauses with except Exception ([#&#8203;3980](https://github.com/redis/redis-py/issues/3980)) We'd like to thank all the contributors who worked on this release! [@&#8203;mitre88](https://github.com/mitre88) [@&#8203;turanalmammadov](https://github.com/turanalmammadov) [@&#8203;haosenwang1018](https://github.com/haosenwang1018) [@&#8203;Medno](https://github.com/Medno) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.2.2`](https://github.com/redis/redis-py/releases/tag/v7.2.2): 7.2.2 [Compare Source](https://github.com/redis/redis-py/compare/v7.2.1...v7.2.2) ### Changes #### 🐛 Bug Fixes - Preserve explicit None for client metadata config ([#&#8203;4081](https://github.com/redis/redis-py/issues/4081)) #### 🧰 Maintenance - Updating PyJWT dependency. ([#&#8203;4100](https://github.com/redis/redis-py/issues/4100)) - Addressing dependency vulnerabilities and flaky test fixes ([source diff](https://github.com/redis/redis-py/compare/38b28c62b0f912a5a9263310649030a8bbb7af8c%5E...a3a8d6cbcb609d9fc0010e9bd2c87b340d2d3dd)) We'd like to thank all the contributors who worked on this release! [@&#8203;elena-kolevska](https://github.com/elena-kolevska) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.2.1`](https://github.com/redis/redis-py/releases/tag/v7.2.1): 7.2.1 [Compare Source](https://github.com/redis/redis-py/compare/v7.2.0...v7.2.1) ### Changes #### 🐛 Bug Fixes - Handle connection attributes conditionally for metrics and set connection data on exceptions in cluster error handling ([#&#8203;3964](https://github.com/redis/redis-py/issues/3964)) #### ⚠️ Deprecations - Removed batch\_size and consumer\_name attributes from OTel metrics ([#&#8203;3978](https://github.com/redis/redis-py/issues/3978)) #### 🧰 Maintenance - Fixing error handling of connection buffer purging of closed connections. Enabling troubleshooting logging for maintenance notifications e2e tests. ([#&#8203;3971](https://github.com/redis/redis-py/issues/3971)) - Fix protocol validation: replace finally with else and store parsed int ([#&#8203;3965](https://github.com/redis/redis-py/issues/3965)) - Return copies from \_get\_free/in\_use\_connections and fix async \_mock ([#&#8203;3967](https://github.com/redis/redis-py/issues/3967)) - Add missing shard channel message types to async PubSub ([#&#8203;3966](https://github.com/redis/redis-py/issues/3966)) - Fix issues with ClusterPipeline connection management ([#&#8203;3804](https://github.com/redis/redis-py/issues/3804)) - fix(pubsub): avoid UnicodeDecodeError on reconnect with binary channel names ([#&#8203;3944](https://github.com/redis/redis-py/issues/3944)) - Hold references to ClusterNode disconnect task ([#&#8203;3826](https://github.com/redis/redis-py/issues/3826)) - remove remaining imports of typing\_extensions ([#&#8203;3873](https://github.com/redis/redis-py/issues/3873)) We'd like to thank all the contributors who worked on this release! [@&#8203;dotlambda](https://github.com/dotlambda) [@&#8203;rhoboro](https://github.com/rhoboro) [@&#8203;skylarkoo7](https://github.com/skylarkoo7) [@&#8203;praboud](https://github.com/praboud) [@&#8203;bysiber](https://github.com/bysiber) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.2.0`](https://github.com/redis/redis-py/releases/tag/v7.2.0): 7.2.0 [Compare Source](https://github.com/redis/redis-py/compare/v7.1.1...v7.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 ([#&#8203;3954](https://github.com/redis/redis-py/issues/3954)) - Add maintenance notifications support for OSS API cluster clients ([#&#8203;3946](https://github.com/redis/redis-py/issues/3946)) - Adding hotkeys commands support. ([#&#8203;3924](https://github.com/redis/redis-py/issues/3924)) - Adds support for the new Idempotent Producers feature in Redis 8.6 ([#&#8203;3926](https://github.com/redis/redis-py/issues/3926)) - Adding support for vrange command. ([#&#8203;3927](https://github.com/redis/redis-py/issues/3927)) - Added a local digest command to the client to execute the XXH3 locally… ([#&#8203;3884](https://github.com/redis/redis-py/issues/3884)) - Add DriverInfo class for upstream driver tracking ([#&#8203;3880](https://github.com/redis/redis-py/issues/3880)) - Add ssl\_password support to async Redis client ([#&#8203;3878](https://github.com/redis/redis-py/issues/3878)) - Add ssl\_ca\_path support to async Redis client ([#&#8203;3879](https://github.com/redis/redis-py/issues/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. ([#&#8203;3858](https://github.com/redis/redis-py/issues/3858)) #### 🐛 Bug Fixes - Fix handling of circular MOVED redirects in cluster slot mapping ([#&#8203;3899](https://github.com/redis/redis-py/issues/3899)) - fix(asyncio): prevent deadlock when Lock.release() is cancelled ([#&#8203;3900](https://github.com/redis/redis-py/issues/3900)) - Fix unrecoverable connection state ([#&#8203;3905](https://github.com/redis/redis-py/issues/3905)) - Fixed potential race condition between call\_later() and run\_forever() ([#&#8203;3897](https://github.com/redis/redis-py/issues/3897)) - Fix RuntimeError in ClusterPubSub sharded message generator ([#&#8203;3889](https://github.com/redis/redis-py/issues/3889)) - Fix async connection pool lock contention during connection establishment ([#&#8203;3885](https://github.com/redis/redis-py/issues/3885)) - Fix PubSub client health check handling for sync client implementation ([#&#8203;3870](https://github.com/redis/redis-py/issues/3870)) - Adding retries for the overall connect - socket connect + handshake. Fix for pubsub reconnect issues. ([#&#8203;3863](https://github.com/redis/redis-py/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. ([#&#8203;3858](https://github.com/redis/redis-py/issues/3858)) - \[[#&#8203;3618](https://github.com/redis/redis-py/issues/3618)] Fix client-side cache invalidation for mixed str and bytes Redis keys ([#&#8203;3766](https://github.com/redis/redis-py/issues/3766)) - \[[#&#8203;3612](https://github.com/redis/redis-py/issues/3612)] Generating unique command cache key ([#&#8203;3765](https://github.com/redis/redis-py/issues/3765)) #### 🧰 Maintenance - Fix type hints for spop and srandmember methods ([#&#8203;3943](https://github.com/redis/redis-py/issues/3943)) - Reorganize pipeline actions ([#&#8203;3951](https://github.com/redis/redis-py/issues/3951)) - Extending the tests to validate more supported scorers for hybrid search. Adding experimental\_method annotation to hybrid\_search commands. ([#&#8203;3939](https://github.com/redis/redis-py/issues/3939)) - Bump rojopolis/spellcheck-github-actions from 0.56.0 to 0.58.0 ([#&#8203;3930](https://github.com/redis/redis-py/issues/3930)) - Adds a new helper that runs linters and fixes issues ([#&#8203;3928](https://github.com/redis/redis-py/issues/3928)) - Added testing with Timeseries samples with NaN values ([#&#8203;3932](https://github.com/redis/redis-py/issues/3932)) - Added testing with TLS-based authentication ([#&#8203;3931](https://github.com/redis/redis-py/issues/3931)) - Added support for calling run-tests from other repositories ([#&#8203;3923](https://github.com/redis/redis-py/issues/3923)) - Updating hybrid tests to be compatible with 8.4 and 8.6 changes. Adding 8.6 RC1 image to test matrix ([#&#8203;3922](https://github.com/redis/redis-py/issues/3922)) - Fix ClusterClient behavior when cluster topology is refreshed. Fix several places where connections might leak. ([#&#8203;3917](https://github.com/redis/redis-py/issues/3917)) - Fix copy-paste error in CacheProxyConnection server version check ([#&#8203;3918](https://github.com/redis/redis-py/issues/3918)) - Improve NodesManager locking ([#&#8203;3803](https://github.com/redis/redis-py/issues/3803)) - DOC: README Update relative urls ([#&#8203;3914](https://github.com/redis/redis-py/issues/3914)) - Bump rojopolis/spellcheck-github-actions from 0.55.0 to 0.56.0 ([#&#8203;3902](https://github.com/redis/redis-py/issues/3902)) - Bump actions/upload-artifact from 5 to 6 ([#&#8203;3901](https://github.com/redis/redis-py/issues/3901)) - Fix type hinting of zrange and zrangestore ([#&#8203;3872](https://github.com/redis/redis-py/issues/3872)) - Remove last vestiges of mock.mock ([#&#8203;3830](https://github.com/redis/redis-py/issues/3830)) - Improve type hints of from\_url method for async Redis client. ([#&#8203;3796](https://github.com/redis/redis-py/issues/3796)) - Fix type hints for the available 'from\_url' methods ([#&#8203;3816](https://github.com/redis/redis-py/issues/3816)) - Bump rojopolis/spellcheck-github-actions from 0.53.0 to 0.55.0 ([#&#8203;3862](https://github.com/redis/redis-py/issues/3862)) - Bump actions/checkout from 5 to 6 ([#&#8203;3861](https://github.com/redis/redis-py/issues/3861)) - Use MaxConnectionsError in the asyncio pool too ([#&#8203;3859](https://github.com/redis/redis-py/issues/3859)) - Updates PR template order ([#&#8203;3855](https://github.com/redis/redis-py/issues/3855)) - Changing current version in pipeline test config to 8.4 as it is already GA ([#&#8203;3854](https://github.com/redis/redis-py/issues/3854)) - Added custom event handler section ([#&#8203;3853](https://github.com/redis/redis-py/issues/3853)) - Changing log level to be debug for failed maintenance notification enablement when enabled='auto' ([#&#8203;3851](https://github.com/redis/redis-py/issues/3851)) - Update Type Hints for List Command Parameters from str to KeyT ([#&#8203;3848](https://github.com/redis/redis-py/issues/3848)) - Expand cluster READ\_COMMANDS with additional read-only commands and reorganize the list of commands by category ([#&#8203;3845](https://github.com/redis/redis-py/issues/3845)) We'd like to thank all the contributors who worked on this release! [@&#8203;veeceey](https://github.com/veeceey) [@&#8203;dariaguy](https://github.com/dariaguy) [@&#8203;Nepomuk5665](https://github.com/Nepomuk5665) [@&#8203;praboud](https://github.com/praboud) [@&#8203;Timour-Ilyas](https://github.com/Timour-Ilyas) [@&#8203;barshaul](https://github.com/barshaul) [@&#8203;devbyteai](https://github.com/devbyteai) [@&#8203;itssimon](https://github.com/itssimon) [@&#8203;majiayu000](https://github.com/majiayu000) [@&#8203;aveao](https://github.com/aveao) [@&#8203;s-t-e-v-e-n-k](https://github.com/s-t-e-v-e-n-k) [@&#8203;cheizdo2-art](https://github.com/cheizdo2-art) [@&#8203;Jonathan-Landeed](https://github.com/Jonathan-Landeed) [@&#8203;PeterJCLaw](https://github.com/PeterJCLaw) [@&#8203;ShubhamKaudewar](https://github.com/ShubhamKaudewar) [@&#8203;vchomakov](https://github.com/vchomakov) [@&#8203;dmaier-redislabs](https://github.com/dmaier-redislabs) [@&#8203;elena-kolevska](https://github.com/elena-kolevska) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.1.1`](https://github.com/redis/redis-py/releases/tag/v7.1.1): 7.1.1 [Compare Source](https://github.com/redis/redis-py/compare/v7.1.0...v7.1.1) ### Changes #### 🧪 Experimental Features - Added initial health check policies, refactored add\_database method ([#&#8203;3906](https://github.com/redis/redis-py/issues/3906)) #### 🧰 Maintenance - Disabled SCH in MultiDBClient underlying clients by default ([#&#8203;3938](https://github.com/redis/redis-py/issues/3938)) - Added logging for MultiDBClients ([#&#8203;3865](https://github.com/redis/redis-py/issues/3865) [#&#8203;3896](https://github.com/redis/redis-py/issues/3896)) We'd like to thank all the contributors who worked on this release! [@&#8203;vladvildanov](https://github.com/vladvildanov) ### [`v7.1.0`](https://github.com/redis/redis-py/releases/tag/v7.1.0): 7.1.0 [Compare Source](https://github.com/redis/redis-py/compare/v7.0.1...v7.1.0) ### Changes #### 🚀 New Features - Adding MSETEX command support. ([#&#8203;3823](https://github.com/redis/redis-py/issues/3823)) - Adding CLAIM option to XREADGROUP command + unit tests ([#&#8203;3825](https://github.com/redis/redis-py/issues/3825)) - Apply routing and response aggregation policies in OSS Cluster mode ([#&#8203;3834](https://github.com/redis/redis-py/issues/3834)) #### 🧪 Experimental Features - Adding support for CAS/CAD commands. ([#&#8203;3837](https://github.com/redis/redis-py/issues/3837)) - Adding support for HYBRID search. ([#&#8203;3813](https://github.com/redis/redis-py/issues/3813) [#&#8203;3843](https://github.com/redis/redis-py/issues/3843)) #### 🔥 Breaking changes (in experimental features) - Replace default health check and failure detector with custom ([#&#8203;3822](https://github.com/redis/redis-py/issues/3822)) #### 🐛 Bug Fixes - Add \*\*options to parse functions for sentinel ([#&#8203;3831](https://github.com/redis/redis-py/issues/3831)) - Generating unique command cache key ([#&#8203;3765](https://github.com/redis/redis-py/issues/3765)) #### 🧰 Maintenance - Adding Redis 8.4 RC1 image to test matrix. ([#&#8203;3820](https://github.com/redis/redis-py/issues/3820)) - Remove Python 3.9 support. Add Python 3.14 support. ([#&#8203;3814](https://github.com/redis/redis-py/issues/3814)) - Sync readme with 7.0.1 and update lib version to latest stable released version - 7.0.1 ([#&#8203;3821](https://github.com/redis/redis-py/issues/3821)) - Bump rojopolis/spellcheck-github-actions from 0.52.0 to 0.53.0 ([#&#8203;3827](https://github.com/redis/redis-py/issues/3827)) - Bump actions/upload-artifact from 4 to 5 ([#&#8203;3828](https://github.com/redis/redis-py/issues/3828)) - Bump github/codeql-action from 3 to 4 ([#&#8203;3829](https://github.com/redis/redis-py/issues/3829)) - Fixing flaky tests ([#&#8203;3833](https://github.com/redis/redis-py/issues/3833) [#&#8203;3838](https://github.com/redis/redis-py/issues/3838)) - Update 8.4 RC image tag to 8.4-RC1-pre.2 for pipeline test matrix ([#&#8203;3832](https://github.com/redis/redis-py/issues/3832)) - Add missing f-string when returning an error. ([#&#8203;3841](https://github.com/redis/redis-py/issues/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. ([#&#8203;3843](https://github.com/redis/redis-py/issues/3843)) - Expand cluster READ\_COMMANDS with additional read-only commands and reorganize the list of commands by category ([#&#8203;3845](https://github.com/redis/redis-py/issues/3845)) - Update Type Hints for List Command Parameters from str to KeyT ([#&#8203;3848](https://github.com/redis/redis-py/issues/3848)) - Changing log level to be debug for failed maintenance notification enablement when enabled='auto' ([#&#8203;3851](https://github.com/redis/redis-py/issues/3851)) - Added custom event handler section ([#&#8203;3853](https://github.com/redis/redis-py/issues/3853)) - Changing current version to 8.4 as it is already GA ([#&#8203;3854](https://github.com/redis/redis-py/issues/3854)) We'd like to thank all the contributors who worked on this release! [@&#8203;ShubhamKaudewar](https://github.com/ShubhamKaudewar) [@&#8203;matthewwiese](https://github.com/matthewwiese) [@&#8203;peperon](https://github.com/peperon) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.0.1`](https://github.com/redis/redis-py/releases/tag/v7.0.1): 7.0.1 [Compare Source](https://github.com/redis/redis-py/compare/v7.0.0...v7.0.1) ### Changes This release adds small fixes related to documentation. #### 🧰 Maintenance - Add 'multi\_database' section to documentation index ([`313d93f`](https://github.com/redis/redis-py/commit/313d93f)) - Revised multi-database client documentation([`78df745`](https://github.com/redis/redis-py/commit/78df745)) - Adding info about Multi-database client in README.md ([`3f7a55e`](https://github.com/redis/redis-py/commit/3f7a55e)) We'd like to thank all the contributors who worked on this release! [@&#8203;dmaier](https://github.com/dmaier) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v7.0.0`](https://github.com/redis/redis-py/releases/tag/v7.0.0): 7.0.0 [Compare Source](https://github.com/redis/redis-py/compare/v6.4.0...v7.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. ([#&#8203;3756](https://github.com/redis/redis-py/issues/3756) [#&#8203;3777](https://github.com/redis/redis-py/issues/3777) [#&#8203;3778](https://github.com/redis/redis-py/issues/3778) [#&#8203;3779](https://github.com/redis/redis-py/issues/3779) [#&#8203;3785](https://github.com/redis/redis-py/issues/3785)) - Adding WITHATTRIBS option to vector set's vsim command. ([#&#8203;3746](https://github.com/redis/redis-py/issues/3746)) - Adding ssl\_verify\_flags\_config argument for ssl connection configuration ([#&#8203;3772](https://github.com/redis/redis-py/issues/3772)) - Adding new ExternalAuthProviderError that will be raised when we receive 'problem with LDAP service' response from server. ([#&#8203;3808](https://github.com/redis/redis-py/issues/3808)) #### 🧪 Experimental Features - Multi-database client implementation ([#&#8203;3784](https://github.com/redis/redis-py/issues/3784) [#&#8203;3811](https://github.com/redis/redis-py/issues/3811)) #### 🔥 Breaking changes - Adding abstract method declaration for cache property setter in EvictionPolicyInterface([#&#8203;3732](https://github.com/redis/redis-py/issues/3732)) - Remove unused parse\_list\_to\_dict function from helpers ([#&#8203;3733](https://github.com/redis/redis-py/issues/3733)) - Removing synchronous context manager handling from async RedisCluster. ([#&#8203;3679](https://github.com/redis/redis-py/issues/3679)) - Redis Search/Aggregate improved type annotations ([#&#8203;3676](https://github.com/redis/redis-py/issues/3676)) - Removing the threading.Lock locks and replacing them with RLock objects to avoid deadlocks. ([#&#8203;3677](https://github.com/redis/redis-py/issues/3677)) - Update ping command docstrings and method return type hint ([#&#8203;3789](https://github.com/redis/redis-py/issues/3789)) - Fixing several \*arg type hints in core.py and json module commands ([#&#8203;3793](https://github.com/redis/redis-py/issues/3793)) - Fixing errors reported by mypy in search module files - query.py, commands.py and aggregation.py. ([#&#8203;3666](https://github.com/redis/redis-py/issues/3666)) - Adding score\_cast\_func argument to zrank, zrevrank and zunion - for consistency with the other sorted sets commands ([#&#8203;3795](https://github.com/redis/redis-py/issues/3795)) - Changing the timeout typehint in async BlockingConnectionPool from int to float ([#&#8203;3801](https://github.com/redis/redis-py/issues/3801)) #### 🐛 Bug Fixes - Removing the threading.Lock locks and replacing them with RLock objects to avoid deadlocks. ([#&#8203;3677](https://github.com/redis/redis-py/issues/3677)) #### 🧰 Maintenance - Bump actions/checkout from 4 to 5 ([#&#8203;3760](https://github.com/redis/redis-py/issues/3760)) - Fix docstring for ssl\_check\_hostname ([#&#8203;3761](https://github.com/redis/redis-py/issues/3761)) - Typos in vectorset commands.py ([#&#8203;3719](https://github.com/redis/redis-py/issues/3719)) - Fixing typos in query.py ([#&#8203;3718](https://github.com/redis/redis-py/issues/3718)) - Typos in cluster.py ([#&#8203;3717](https://github.com/redis/redis-py/issues/3717)) - Fixing typos in core.py ([#&#8203;3720](https://github.com/redis/redis-py/issues/3720)) - Update Redis image versions for GH pipeline actions. ([#&#8203;3740](https://github.com/redis/redis-py/issues/3740)) - Support the customization of the timeout parameter when using a blocking connection pool with a redis cluster ([#&#8203;3724](https://github.com/redis/redis-py/issues/3724)) - Fix async clients safety when used as an async context manager ([#&#8203;3512](https://github.com/redis/redis-py/issues/3512)) - docs: fix zadd command parameter description ([#&#8203;3727](https://github.com/redis/redis-py/issues/3727)) - Fault injector boilerplate ([#&#8203;3749](https://github.com/redis/redis-py/issues/3749)) - Adding e2e scenario tests for maintenance push notifications handling. ([#&#8203;3758](https://github.com/redis/redis-py/issues/3758)) - Adding more e2e tests related to maintenance notifications. Extracting specific tests that validate notifications are received in new connections ([#&#8203;3770](https://github.com/redis/redis-py/issues/3770)) - Renaming of classes and configuration arguments related to maintenance push notifications handling during server upgrade or maintenance procedures ([#&#8203;3777](https://github.com/redis/redis-py/issues/3777) [#&#8203;3778](https://github.com/redis/redis-py/issues/3778)) - DOC-5743 BITOP examples ([#&#8203;3776](https://github.com/redis/redis-py/issues/3776)) - Improve stale issue management workflow ([#&#8203;3773](https://github.com/redis/redis-py/issues/3773)) - \[DOC] Add complex chaining example using pipelines with builder pattern ([#&#8203;3774](https://github.com/redis/redis-py/issues/3774)) - Fix automation scenario maint notification ([#&#8203;3788](https://github.com/redis/redis-py/issues/3788)) - Add redis 8.4-M01-pre to tested redis versions ([#&#8203;3790](https://github.com/redis/redis-py/issues/3790)) - Add handling of empty spaces during CLIENT LIST response parsing ([#&#8203;3797](https://github.com/redis/redis-py/issues/3797)) - DOC-5821 update index/query example for runnable notebook ([#&#8203;3807](https://github.com/redis/redis-py/issues/3807)) - Fixing SORTABLE, INDEXEMPTY and INDEXMISSING order when using RediSearch fields ([#&#8203;3810](https://github.com/redis/redis-py/issues/3810)) - Fixing argument type hints for evalsha and similar commands. ([#&#8203;3794](https://github.com/redis/redis-py/issues/3794)) - Update Python version to 3.14 in hiredis CI workflow ([#&#8203;3798](https://github.com/redis/redis-py/issues/3798)) - Fixing sync BlockingConnectionPool's disconnect method to follow the definition in ConnectionPoolInterface ([#&#8203;3802](https://github.com/redis/redis-py/issues/3802)) We'd like to thank all the contributors who worked on this release! [@&#8203;scovetta](https://github.com/scovetta) [@&#8203;mengxunQAQ](https://github.com/mengxunQAQ) [@&#8203;abrookins](https://github.com/abrookins) [@&#8203;VincentHokie](https://github.com/VincentHokie) [@&#8203;sobolevn](https://github.com/sobolevn) [@&#8203;hunterhogan](https://github.com/hunterhogan) [@&#8203;luka-mikec](https://github.com/luka-mikec) [@&#8203;zion-off](https://github.com/zion-off) [@&#8203;peperon](https://github.com/peperon) [@&#8203;andy-stark-redis](https://github.com/andy-stark-redis) [@&#8203;uglide](https://github.com/uglide) [@&#8203;elena-kolevska](https://github.com/elena-kolevska) [@&#8203;kiryazovi-redis](https://github.com/kiryazovi-redis) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v6.4.0`](https://github.com/redis/redis-py/releases/tag/v6.4.0): 6.4.0 [Compare Source](https://github.com/redis/redis-py/compare/v6.3.0...v6.4.0) ### Changes #### 🚀 New Features - Added epsilon property to the vsim command ([#&#8203;3723](https://github.com/redis/redis-py/issues/3723)) #### 🧰 Maintenance - Updating the latest Redis image for github pipeline testing ([#&#8203;3726](https://github.com/redis/redis-py/issues/3726)) #### We'd like to thank all the contributors who worked on this release! [@&#8203;htemelski-redis](https://github.com/htemelski-redis) [@&#8203;elena-kolevska](https://github.com/elena-kolevska) [@&#8203;petyaslavova](https://github.com/petyaslavova) [@&#8203;vladvildanov](https://github.com/vladvildanov) ### [`v6.3.0`](https://github.com/redis/redis-py/releases/tag/v6.3.0): 6.3.0 [Compare Source](https://github.com/redis/redis-py/compare/v6.2.0...v6.3.0) ### Changes #### 🚀 New Features - Add support for new BITOP operations: DIFF, DIFF1, ANDOR, ONE ([#&#8203;3690](https://github.com/redis/redis-py/issues/3690)) - Support new VAMANA vector index type ([#&#8203;3702](https://github.com/redis/redis-py/issues/3702)) - Add new stream commands ([#&#8203;3711](https://github.com/redis/redis-py/issues/3711)) - add async Retry **eq** and **hash** & fix ExponentialWithJitterBackoff **eq** ([#&#8203;3668](https://github.com/redis/redis-py/issues/3668)) #### 🐛 Bug Fixes - Fixing sentinel command execution to allow returning of actual responses when meaningful - behaviour controlled by 'return\_responses' argument. ([#&#8203;3191](https://github.com/redis/redis-py/issues/3191)) - Annotate deprecated\_args decorator to preserve wrapped function type signature ([#&#8203;3701](https://github.com/redis/redis-py/issues/3701)) - Fix ConnectionPool to raise MaxConnectionsError instead of Connection… ([#&#8203;3698](https://github.com/redis/redis-py/issues/3698)) - add async Retry **eq** and **hash** & fix ExponentialWithJitterBackoff **eq** ([#&#8203;3668](https://github.com/redis/redis-py/issues/3668)) - SentinelManagedConnection searches for new master upon connection failure ([#&#8203;3560](https://github.com/redis/redis-py/issues/3560)) ([#&#8203;3601](https://github.com/redis/redis-py/issues/3601)) #### 🧰 Maintenance - fix: avoid instantiating a connection on *repr*\_ ([#&#8203;3653](https://github.com/redis/redis-py/issues/3653)) - Fixing the return type hint for the transaction method in the standalone client. ([#&#8203;3660](https://github.com/redis/redis-py/issues/3660)) - Bump rojopolis/spellcheck-github-actions from 0.48.0 to 0.49.0 ([#&#8203;3665](https://github.com/redis/redis-py/issues/3665)) - Dropping integration tests with Redis 6.2 from pipeline actions. ([#&#8203;3659](https://github.com/redis/redis-py/issues/3659)) - Remove deprecated arg from call to ClusterPipeline ([#&#8203;3670](https://github.com/redis/redis-py/issues/3670)) - TransactionStrategy reset: UNWATCH only when status is watching ([#&#8203;3671](https://github.com/redis/redis-py/issues/3671)) - KeyT for set operations ([#&#8203;3190](https://github.com/redis/redis-py/issues/3190)) - Removing references to old docs site '<https://redis-py.readthedocs.io/>' replaced by '<https://redis.readthedocs.io/>' ([#&#8203;3674](https://github.com/redis/redis-py/issues/3674)) - Removing unnecessary check for tests using AsyncMock ([#&#8203;3432](https://github.com/redis/redis-py/issues/3432)) - Updating test images for github pipeline execution ([#&#8203;3678](https://github.com/redis/redis-py/issues/3678)) - Updating the latest Redis image for pipeline testing ([#&#8203;3695](https://github.com/redis/redis-py/issues/3695)) - Bump rojopolis/spellcheck-github-actions from 0.49.0 to 0.51.0 ([#&#8203;3689](https://github.com/redis/redis-py/issues/3689)) - DOC-5225 testable probabilistic dt examples ([#&#8203;3691](https://github.com/redis/redis-py/issues/3691)) - Update README.md ([#&#8203;3699](https://github.com/redis/redis-py/issues/3699)) - Convert the value to int type only if it exists in CLIENT INFO ([#&#8203;3688](https://github.com/redis/redis-py/issues/3688)) - Fix compatibility with latest pytest-asyncio version(1.1.0) ([#&#8203;3708](https://github.com/redis/redis-py/issues/3708)) - DOC-5424 time series examples ([#&#8203;3705](https://github.com/redis/redis-py/issues/3705)) - Adding information in connection pool class doc string for available SSLConnection class, that can be used for SSL connections ([#&#8203;3710](https://github.com/redis/redis-py/issues/3710)) #### We'd like to thank all the contributors who worked on this release! [@&#8203;robertosantamaria-scopely](https://github.com/robertosantamaria-scopely) [@&#8203;mahigupta](https://github.com/mahigupta) [@&#8203;alisaifee](https://github.com/alisaifee) [@&#8203;tzongw](https://github.com/tzongw) [@&#8203;earonesty](https://github.com/earonesty) [@&#8203;IlianIliev](https://github.com/IlianIliev) [@&#8203;ofekshenawa](https://github.com/ofekshenawa) [@&#8203;andy-stark-redis](https://github.com/andy-stark-redis) [@&#8203;AmirHossein81Gholami](https://github.com/AmirHossein81Gholami) [@&#8203;mharding-hpe](https://github.com/mharding-hpe) [@&#8203;git-hulk](https://github.com/git-hulk) [@&#8203;ngabhanenetskope](https://github.com/ngabhanenetskope) [@&#8203;terencehonles](https://github.com/terencehonles) [@&#8203;ManelCoutinhoSensei](https://github.com/ManelCoutinhoSensei) [@&#8203;petyaslavova](https://github.com/petyaslavova) [@&#8203;vladvildanov](https://github.com/vladvildanov) ### [`v6.2.0`](https://github.com/redis/redis-py/releases/tag/v6.2.0): 6.2.0 [Compare Source](https://github.com/redis/redis-py/compare/v6.1.1...v6.2.0) ### Changes #### 🚀 New Features - Add `dynamic_startup_nodes` parameter to async RedisCluster ([#&#8203;3646](https://github.com/redis/redis-py/issues/3646)) - Support RESP3 with `hiredis-py` parser ([#&#8203;3648](https://github.com/redis/redis-py/issues/3648)) - \[Async] Support for transactions in async `RedisCluster` client ([#&#8203;3649](https://github.com/redis/redis-py/issues/3649)) #### 🐛 Bug Fixes - Revert wrongly changed default value for `check_hostname` when instantiating `RedisSSLContext` ([#&#8203;3655](https://github.com/redis/redis-py/issues/3655)) - Fixed potential deadlock from unexpected `__del__` call ([#&#8203;3654](https://github.com/redis/redis-py/issues/3654)) #### 🧰 Maintenance - Update `search_json_examples.ipynb`: Fix the old import `indexDefinition` -> `index_definition` ([#&#8203;3652](https://github.com/redis/redis-py/issues/3652)) - Remove mandatory update of the CHANGES file for new PRs. Changes file will be kept for history for versions < 4.0.0 ([#&#8203;3645](https://github.com/redis/redis-py/issues/3645)) - Dropping `Python 3.8` support as it has reached end of life ([#&#8203;3657](https://github.com/redis/redis-py/issues/3657)) - fix(doc): update Python print output in json doctests ([#&#8203;3658](https://github.com/redis/redis-py/issues/3658)) - Update redis-entraid dependency ([#&#8203;3661](https://github.com/redis/redis-py/issues/3661)) #### We'd like to thank all the contributors who worked on this release! [@&#8203;JCornat](https://github.com/JCornat) [@&#8203;ShubhamKaudewar](https://github.com/ShubhamKaudewar) [@&#8203;uglide](https://github.com/uglide) [@&#8203;petyaslavova](https://github.com/petyaslavova) [@&#8203;vladvildanov](https://github.com/vladvildanov) ### [`v6.1.1`](https://github.com/redis/redis-py/releases/tag/v6.1.1) [Compare Source](https://github.com/redis/redis-py/compare/v6.1.0...v6.1.1) ### Changes #### 🐛 Bug Fixes - Revert wrongly changed default value for `check_hostname` when instantiating `RedisSSLContext` ([#&#8203;3655](https://github.com/redis/redis-py/issues/3655)) - Fixed potential deadlock from unexpected `__del__` call ([#&#8203;3654](https://github.com/redis/redis-py/issues/3654)) ## We'd like to thank all the contributors who worked on this release! [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;petyaslavova](https://github.com/petyaslavova) ### [`v6.1.0`](https://github.com/redis/redis-py/releases/tag/v6.1.0): 6.1.0 [Compare Source](https://github.com/redis/redis-py/compare/v6.0.0...v6.1.0) ### Changes #### 🚀 New Features - Support for transactions in `RedisCluster` client ([#&#8203;3611](https://github.com/redis/redis-py/issues/3611)) - Add equality and hashability to `Retry` and backoff classes ([#&#8203;3628](https://github.com/redis/redis-py/issues/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` ([#&#8203;3637](https://github.com/redis/redis-py/issues/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 ([#&#8203;3633](https://github.com/redis/redis-py/issues/3633)) - Add equality and hashability to `Retry` and backoff classes ([#&#8203;3628](https://github.com/redis/redis-py/issues/3628)) - fixes integration with Django RQ - Fix `AttributeError` on `ClusterPipeline` ([#&#8203;3634](https://github.com/redis/redis-py/issues/3634)) #### 🧰 Maintenance - Updating the readme and lib version to contain the changes from the latest stable release ([#&#8203;3644](https://github.com/redis/redis-py/issues/3644)) - Export `REDIS_MAJOR_VERSION` correctly in run-tests ([#&#8203;3642](https://github.com/redis/redis-py/issues/3642)) - Fix matrix in `hiredis-py-integration.yaml` ([#&#8203;3641](https://github.com/redis/redis-py/issues/3641)) - Test against unstable hiredis-py ([#&#8203;3617](https://github.com/redis/redis-py/issues/3617)) - Adding return types for the `RedisModuleCommands` class ([#&#8203;3632](https://github.com/redis/redis-py/issues/3632)) - Updating Redis 8 test image for GH pipeline ([#&#8203;3639](https://github.com/redis/redis-py/issues/3639)) - Allow newer PyJWT versions ([#&#8203;3636](https://github.com/redis/redis-py/issues/3636)) - Change type hints with possible `None` args or return types to be annotated with `Optional` - includes commands in `core.py` and json commands ([#&#8203;3610](https://github.com/redis/redis-py/issues/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! [@&#8203;robertosantamaria-scopely](https://github.com/robertosantamaria-scopely) [@&#8203;sentrivana](https://github.com/sentrivana) [@&#8203;terencehonles](https://github.com/terencehonles) [@&#8203;kesha1225](https://github.com/kesha1225) [@&#8203;aberres](https://github.com/aberres) [@&#8203;uglide](https://github.com/uglide) [@&#8203;omerfeyzioglu](https://github.com/omerfeyzioglu) [@&#8203;petyaslavova](https://github.com/petyaslavova) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;andy-stark-redis](https://github.com/andy-stark-redis) ### [`v6.0.0`](https://github.com/redis/redis-py/releases/tag/v6.0.0): 6.0.0 [Compare Source](https://github.com/redis/redis-py/compare/v5.3.1...v6.0.0) ### Changes #### 🚀 New Features - New hash commands with expiration options support are added - HGETDEL, HGETEX, HSETEX ([#&#8203;3570](https://github.com/redis/redis-py/issues/3570)) - Adds option not to raise an exception when leaving context manager after lock expiration ([#&#8203;3531](https://github.com/redis/redis-py/issues/3531)) - Add force\_master\_ip support to async Sentinel client ([#&#8203;3524](https://github.com/redis/redis-py/issues/3524)) #### 🧪 Experimental Features - Adding VectorSet commands support. ([#&#8203;3584](https://github.com/redis/redis-py/issues/3584)) #### 🔥 Breaking changes - Changing the default value for ssl\_check\_hostname to True, to ensure security validations are not skipped by default ([#&#8203;3626](https://github.com/redis/redis-py/issues/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 #&#8203;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 ([#&#8203;3434](https://github.com/redis/redis-py/issues/3434)) - Adding default retry configuration changes for cluster clients ([#&#8203;3622](https://github.com/redis/redis-py/issues/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.** ([#&#8203;3614](https://github.com/redis/redis-py/issues/3614)) - Removing 'charset' and 'errors' inputs from the Redis initialization arguments - deprecated 3 years ago. ([#&#8203;3608](https://github.com/redis/redis-py/issues/3608)) - Removing support for RedisGears module. ([#&#8203;3553](https://github.com/redis/redis-py/issues/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. ([#&#8203;3548](https://github.com/redis/redis-py/issues/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 ([#&#8203;3537](https://github.com/redis/redis-py/issues/3537)) - Moved ClusterParser exceptions to BaseParser class ([#&#8203;3475](https://github.com/redis/redis-py/issues/3475)) - Changed default dialect to 2 ([#&#8203;3467](https://github.com/redis/redis-py/issues/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 ([#&#8203;3622](https://github.com/redis/redis-py/issues/3622)) - Updating default retry strategy for standalone clients. **3 retries with ExponentialWithJitterBackoff become the default config.** ([#&#8203;3614](https://github.com/redis/redis-py/issues/3614)) - Marks old RediSearch 1.0 commands as deprecated ([#&#8203;3606](https://github.com/redis/redis-py/issues/3606)) - Adding deprecation messages for the exposed in search module commands: FT.CONFIG GET and FT.CONFIG SET ([#&#8203;3499](https://github.com/redis/redis-py/issues/3499) [#&#8203;3500](https://github.com/redis/redis-py/issues/3500) ) - Deprecating Search module config\_set and config\_get commands. Adding tests for modules ACL and modules config changes in 8.0 ([#&#8203;3489](https://github.com/redis/redis-py/issues/3489)) #### 🐛 Bug Fixes - Handling some special values when transforming response data into list (issue [#&#8203;3573](https://github.com/redis/redis-py/issues/3573)) ([#&#8203;3586](https://github.com/redis/redis-py/issues/3586)) - Fixed infinitely recursive health checks ([#&#8203;3557](https://github.com/redis/redis-py/issues/3557)) - Fixing search module dropindex function not to send invalid third parameter. Updating pipeline infra ([#&#8203;3564](https://github.com/redis/redis-py/issues/3564)) - Fixing async cluster pipeline execution when client is created with cluster\_error\_retry\_attempts=0 ([#&#8203;3545](https://github.com/redis/redis-py/issues/3545)) - Fix client\_list with multiple client ids ([#&#8203;3539](https://github.com/redis/redis-py/issues/3539)) - Add valid Exception type to Except in ClusterPipeline ([#&#8203;3516](https://github.com/redis/redis-py/issues/3516)) - Fix [#&#8203;3130](https://github.com/redis/redis-py/issues/3130) TimeoutError during ClusterPipeline makes the client unrecoverable ([#&#8203;3513](https://github.com/redis/redis-py/issues/3513)) - Fix connection health check for protocol != 2 when auth credentials are provided and health check interval is configured ([#&#8203;3477](https://github.com/redis/redis-py/issues/3477)) - Fix AttributeError when client.get\_default\_node() returns None ([#&#8203;3458](https://github.com/redis/redis-py/issues/3458)) - fix: add TimeoutError handling in get\_connection() ([#&#8203;1485](https://github.com/redis/redis-py/issues/1485)) - Avoid stacktrace on process exit in Client.**del**() ([#&#8203;3397](https://github.com/redis/redis-py/issues/3397)) #### 🧰 Maintenance - Updating pipeline tests to use test libs image with RC2. Updating timeseries tests. ([#&#8203;3623](https://github.com/redis/redis-py/issues/3623)) - Fixing flaky tests - part 2 ([#&#8203;3592](https://github.com/redis/redis-py/issues/3592)) - DOC-5107 added hash examples for index/query intro page ([#&#8203;3609](https://github.com/redis/redis-py/issues/3609)) - DOC-5073 vector set quantization and dimension reduction examples ([#&#8203;3597](https://github.com/redis/redis-py/issues/3597)) - Fixing some sporadically failing tests - part 1 ([#&#8203;3589](https://github.com/redis/redis-py/issues/3589)) - DOC-5073 added examples for vector sets intro page ([#&#8203;3590](https://github.com/redis/redis-py/issues/3590)) - Fix incorrect link to docs for fcall\_ro command ([#&#8203;3576](https://github.com/redis/redis-py/issues/3576)) - Improvement: Use shutdown() Before close() in connection.py ([#&#8203;3567](https://github.com/redis/redis-py/issues/3567)) - Truncate pipeline exception message to a sane size ([#&#8203;3530](https://github.com/redis/redis-py/issues/3530)) - Docs/raae 724/remove redis ventures ([#&#8203;3579](https://github.com/redis/redis-py/issues/3579)) - Adding info for sentinel handling failover when Redis client is acquired with master\_for() method. ([#&#8203;3578](https://github.com/redis/redis-py/issues/3578)) - Type hints improvements ([#&#8203;3420](https://github.com/redis/redis-py/issues/3420) [#&#8203;3480](https://github.com/redis/redis-py/issues/3480) [#&#8203;3522](https://github.com/redis/redis-py/issues/3522) [#&#8203;3526](https://github.com/redis/redis-py/issues/3526)) - Increasing the operations-per-run for stale issues GH action ([#&#8203;3556](https://github.com/redis/redis-py/issues/3556)) - Got rid of time.time() everywhere ([#&#8203;3551](https://github.com/redis/redis-py/issues/3551)) - Removing deprecated usage of forbid\_global\_loop=True in pytest.mark.asyncio decorator ([#&#8203;3542](https://github.com/redis/redis-py/issues/3542)) - allow more recent pyopenssl ([#&#8203;3541](https://github.com/redis/redis-py/issues/3541)) - Bump rojopolis/spellcheck-github-actions from 0.38.0 to 0.47.0 ([#&#8203;3538](https://github.com/redis/redis-py/issues/3538)) - Fix LockError message when releasing a lock. ([#&#8203;3534](https://github.com/redis/redis-py/issues/3534)) - Fix readthedocs.yml integration([#&#8203;3527](https://github.com/redis/redis-py/issues/3527) [#&#8203;3528](https://github.com/redis/redis-py/issues/3528) [#&#8203;3529](https://github.com/redis/redis-py/issues/3529)) - Adding vector search tests for types int8/uint8 ([#&#8203;3525](https://github.com/redis/redis-py/issues/3525)) - Adding requested resources into sdist. Fix for issue [#&#8203;3057](https://github.com/redis/redis-py/issues/3057) ([#&#8203;3511](https://github.com/redis/redis-py/issues/3511)) - maintenance: Python 3.13 compatibility ([#&#8203;3510](https://github.com/redis/redis-py/issues/3510)) - Adding unit test for core info command related to modules info ([#&#8203;3507](https://github.com/redis/redis-py/issues/3507)) - Update connection\_examples.ipynb ([#&#8203;3504](https://github.com/redis/redis-py/issues/3504)) - Update Python imports in doc examples (index\_definition => indexDefinition) ([#&#8203;3490](https://github.com/redis/redis-py/issues/3490)) - DOC-4736 added geo indexing examples ([#&#8203;3485](https://github.com/redis/redis-py/issues/3485)) - Updated test infrastructure with latest versions ([#&#8203;3484](https://github.com/redis/redis-py/issues/3484)) - fix: update redis university url, the old link doesn't work ([#&#8203;3481](https://github.com/redis/redis-py/issues/3481)) - Fix [#&#8203;3464](https://github.com/redis/redis-py/issues/3464): Correct misleading exception\_handler example in docs ([#&#8203;3474](https://github.com/redis/redis-py/issues/3474)) - Added Redis 8.0 to test matrix ([#&#8203;3469](https://github.com/redis/redis-py/issues/3469)) - Added workflow\_dispatch for pypi release workflow ([#&#8203;3465](https://github.com/redis/redis-py/issues/3465)) - Avoid the multiprocessing forkserver method in Python 3.14 ([#&#8203;3442](https://github.com/redis/redis-py/issues/3442)) - Fix inaccurate docstring for unwatch() ([#&#8203;3424](https://github.com/redis/redis-py/issues/3424)) - Update README.md - Fix 'Note' - bold ([#&#8203;3413](https://github.com/redis/redis-py/issues/3413)) - skip ssl import if not available ([#&#8203;3078](https://github.com/redis/redis-py/issues/3078)) - Replace flake8+isort+black with ruff ([#&#8203;3147](https://github.com/redis/redis-py/issues/3147)) - Fixes minor grammar nit in documentation. ([#&#8203;3354](https://github.com/redis/redis-py/issues/3354)) #### Contributors We'd like to thank all the contributors who worked on this release! [@&#8203;elena-kolevska](https://github.com/elena-kolevska) [@&#8203;petyaslavova](https://github.com/petyaslavova) [@&#8203;vladvildanov](https://github.com/vladvildanov) [@&#8203;andy-stark-redis](https://github.com/andy-stark-redis) [@&#8203;JimNero009](https://github.com/JimNero009) [@&#8203;donbowman](https://github.com/donbowman) [@&#8203;julianolm](https://github.com/julianolm) [@&#8203;666romeo](https://github.com/666romeo) [@&#8203;three-kinds](https://github.com/three-kinds) [@&#8203;bssyousefi](https://github.com/bssyousefi) [@&#8203;mbilski](https://github.com/mbilski) [@&#8203;Yard1](https://github.com/Yard1) [@&#8203;bacchuswng](https://github.com/bacchuswng) [@&#8203;noirbee](https://github.com/noirbee) [@&#8203;nbertram](https://github.com/nbertram) [@&#8203;birthdaysgift](https://github.com/birthdaysgift) [@&#8203;Perlence](https://github.com/Perlence) [@&#8203;excitoon](https://github.com/excitoon) [@&#8203;dimbleby](https://github.com/dimbleby) [@&#8203;shenxiangzhuang](https://github.com/shenxiangzhuang) [@&#8203;paololazzari](https://github.com/paololazzari) [@&#8203;dwdougherty](https://github.com/dwdougherty) [@&#8203;niklasbec](https://github.com/niklasbec) [@&#8203;byeongjulee222](https://github.com/byeongjulee222) [@&#8203;befeleme](https://github.com/befeleme) [@&#8203;djroze](https://github.com/djroze) [@&#8203;BaseMax](https://github.com/BaseMax) [@&#8203;dicej](https://github.com/dicej) [@&#8203;akx](https://github.com/akx) [@&#8203;cavemanpi](https://github.com/cavemanpi) [@&#8203;lattwood](https://github.com/lattwood) [@&#8203;rbs333](https://github.com/rbs333) [@&#8203;rohansingh](https://github.com/rohansingh) [@&#8203;allrob23](https://github.com/allrob23) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "before 9am on monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
chore(deps): update dependency redis to v8
Some checks failed
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Failing after 47s
CI / Backend migration, tests, and audit (pull_request) Failing after 1m1s
CI / Backend lint (ruff) (pull_request) Successful in 33s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m50s
CI / Bot/backend version sync (pull_request) Successful in 26s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Failing after 23s
CI / Docker image build (pull_request) Failing after 39s
CI / Bot tests and audit (pull_request) Successful in 1m59s
b7810b8646
Collaborator

Blocked upstream — recommend closing rather than retrying.

CI is right and this cannot be made to work by rebasing. kombu[redis], which celery[redis]==5.6.3 pulls in, constrains redis!=4.5.5,!=5.0.2,<6.5,>=4.5.2:

ERROR: Cannot install kombu[redis]==5.6.0, kombu[redis]==5.6.1, kombu[redis]==5.6.2 and redis==8.1.0
because these package versions have conflicting dependencies.

redis-py 8.1.0 is outside <6.5, so a clean resolve from requirements.txt is impossible until kombu widens its pin. Worth noting my own local check was misleading: installing redis==8.1.0 into the already-built image and running pip check reported "No broken requirements found", because the extra's constraint is not re-evaluated that way. A from-scratch resolve is the only honest test, and CI did it.

Separately, this PR bundles two unrelated upgrades and the second should not ride along with the first even once the client is unblocked:

  • webapp/backend/requirements.txt: the Python client (blocked, above).
  • docker-compose.yml: redis:7-alpine → redis:8-alpine, which is the server, on a volume holding user sessions (DB 0) and the Celery broker (DB 1) with tasks queued up to 7 days out.

The server bump is data-bearing and effectively one-way — Redis 8 writes an RDB version Redis 7 will not load, so rolling back means discarding the AOF/RDB and losing those sessions and queued tasks. It wants a volume backup and a deliberate window, not a dependency PR. (See also the 2026-08-07 AOF crash-loop outage; that volume is not something to upgrade casually.)

For what it is worth, the client and server themselves are fine together — I ran redis-py 8.1.0 against a redis:8-alpine server (8.10.1) covering the patterns this app actually uses: set with TTL and ttl, hash hset/hgetall, scan_iter over a key pattern, and pub/sub publish-and-receive on the bot event channel. All passed. The blocker is purely kombu's pin.

Suggested disposition: close this, and add a Renovate constraint holding redis below 6.5 until celery/kombu widens, so it stops being re-proposed. The server-image upgrade wants its own issue with a backup step.

**Blocked upstream — recommend closing rather than retrying.** CI is right and this cannot be made to work by rebasing. `kombu[redis]`, which `celery[redis]==5.6.3` pulls in, constrains `redis!=4.5.5,!=5.0.2,<6.5,>=4.5.2`: ``` ERROR: Cannot install kombu[redis]==5.6.0, kombu[redis]==5.6.1, kombu[redis]==5.6.2 and redis==8.1.0 because these package versions have conflicting dependencies. ``` redis-py 8.1.0 is outside `<6.5`, so a clean resolve from `requirements.txt` is impossible until kombu widens its pin. Worth noting my own local check was misleading: installing `redis==8.1.0` into the already-built image and running `pip check` reported "No broken requirements found", because the extra's constraint is not re-evaluated that way. A from-scratch resolve is the only honest test, and CI did it. **Separately, this PR bundles two unrelated upgrades** and the second should not ride along with the first even once the client is unblocked: - `webapp/backend/requirements.txt`: the Python client (blocked, above). - `docker-compose.yml`: `redis:7-alpine` → `redis:8-alpine`, which is the **server**, on a volume holding user sessions (DB 0) and the Celery broker (DB 1) with tasks queued up to 7 days out. The server bump is data-bearing and effectively one-way — Redis 8 writes an RDB version Redis 7 will not load, so rolling back means discarding the AOF/RDB and losing those sessions and queued tasks. It wants a volume backup and a deliberate window, not a dependency PR. (See also the 2026-08-07 AOF crash-loop outage; that volume is not something to upgrade casually.) For what it is worth, the client and server themselves are fine together — I ran redis-py 8.1.0 against a `redis:8-alpine` server (8.10.1) covering the patterns this app actually uses: `set` with TTL and `ttl`, hash `hset`/`hgetall`, `scan_iter` over a key pattern, and pub/sub publish-and-receive on the bot event channel. All passed. The blocker is purely kombu's pin. **Suggested disposition:** close this, and add a Renovate constraint holding `redis` below 6.5 until `celery`/`kombu` widens, so it stops being re-proposed. The server-image upgrade wants its own issue with a backup step.
claude-bot closed this pull request 2026-09-12 19:38:39 +00:00
Author
Contributor

Renovate Ignore Notification

Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for any future 8.x releases. But if you manually upgrade to 8.x then Renovate will re-enable minor and patch updates automatically.

If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR.

### Renovate Ignore Notification Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for *any* future `8.x` releases. But if you manually upgrade to `8.x` then Renovate will re-enable `minor` and `patch` updates automatically. If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR.
Some checks failed
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Failing after 47s
Required
Details
CI / Backend migration, tests, and audit (pull_request) Failing after 1m1s
Required
Details
CI / Backend lint (ruff) (pull_request) Successful in 33s
Required
Details
CI / Frontend tests, audit, and build (pull_request) Successful in 2m50s
Required
Details
CI / Bot/backend version sync (pull_request) Successful in 26s
Required
Details
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Failing after 23s
Required
Details
CI / Docker image build (pull_request) Failing after 39s
Required
Details
CI / Bot tests and audit (pull_request) Successful in 1m59s
Required
Details

Pull request closed

Sign in to join this conversation.
No description provided.