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

Merged
finkregh merged 1 commit from renovate/major-all into main 2026-08-05 16:31:27 +00:00
Collaborator

This PR contains the following updates:

Package Type Update Change
redis (changelog) project.dependencies major 7.4.0 → 8.1.0

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


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • 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 this update again.


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

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [redis](https://github.com/redis/redis-py) ([changelog](https://github.com/redis/redis-py/releases)) | project.dependencies | major | `7.4.0` → `8.1.0` | --- ### 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) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - 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 this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC43LjAiLCJ1cGRhdGVkSW5WZXIiOiI0NC43LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->
Commenting is not possible because the repository is archived.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
finkregh/verleihnix!31
No description provided.