---
title: "redis Breaking Changes on PyPI | Since.dev"
description: "What each redis release removed, renamed or changed: 868 breaking changes in 5 versions on PyPI, each with its source."
canonical_url: https://since.dev/packages/pypi/redis
last_updated: 2026-05-28
---

# redis breaking changes

Every breaking API change we have recorded in redis on PyPI: 868 breaking changes in 5 versions. Below are its newest 5 versions, removals and renames first, each with its source.

Newest change May 28, 2026

## 8.0.0

710 breaking changes, first published May 28, 2026.

- **Removed** `redis.asyncio.connection.DEFAULT_SENTINEL`  

redis.asyncio.connection.DEFAULT_SENTINEL was removed in redis 8.0.0 [pypi.org](https://pypi.org/project/redis/8.0.0/)
- **Default changed**  

Clients use RESP3 on the wire by default while keeping RESP2-shaped responses. Use protocol=2 or legacy_responses=False if needed. [github.com](https://github.com/redis/redis-py/releases/tag/v8.0.0)
- **Default changed**  

Retries now default to 10 attempts with exponential jitter backoff. Configure retries explicitly if you need the old behavior. [github.com](https://github.com/redis/redis-py/releases/tag/v8.0.0)
- **Default changed** `max_connections`  

Connection pools now default to 100 connections. Set max_connections explicitly if you need a different limit. [github.com](https://github.com/redis/redis-py/releases/tag/v8.0.0)
- **Signature changed** `redis.asyncio.client.AsyncCoreCommands.append`  

Was def append(self, key: KeyT, value: EncodableT) -> ResponseT; now def append(self, key: KeyT, value: EncodableT) -> int | Awaitable\[int\]. [pypi.org](https://pypi.org/project/redis/8.0.0/)
- **Signature changed** `redis.asyncio.client.AsyncCoreCommands.auth`  

Was def auth(self, password: str, username: Optional\[str\] = None, \*\*kwargs); now def auth(self, password: str, username: str | None = None, \*\*kwargs) -> bool | Awaitable\[bool\]. [pypi.org](https://pypi.org/project/redis/8.0.0/)
- **Signature changed** `redis.asyncio.client.AsyncCoreCommands.bgrewriteaof`  

Was def bgrewriteaof(self, \*\*kwargs); now def bgrewriteaof(self, \*\*kwargs) -> bool | bytes | str | Awaitable\[bool | bytes | str\]. [pypi.org](https://pypi.org/project/redis/8.0.0/)
- **Signature changed** `redis.asyncio.client.AsyncCoreCommands.bgsave`  

Was def bgsave(self, schedule: bool = True, \*\*kwargs) -> ResponseT; now def bgsave(self, schedule: bool = True, \*\*kwargs) -> bool | bytes | str | Awaitable\[bool | bytes | str\]. [pypi.org](https://pypi.org/project/redis/8.0.0/)
- **Signature changed** `redis.asyncio.client.AsyncCoreCommands.bitcount`  

Was def bitcount(self, key: KeyT, start: Optional\[int\] = None, end: Optional\[int\] = None, mode: Optional\[str\] = None) -> ResponseT; now def bitcount(self, key: KeyT, start: int | None = None, end: int | None = None, mode: str | None =... [pypi.org](https://pypi.org/project/redis/8.0.0/)
- **Signature changed** `redis.asyncio.client.AsyncCoreCommands.bitfield`  

Was def bitfield(self: Union\[redis.client.Redis, redis.asyncio.client.Redis\], key: KeyT, default_overflow: Optional\[str\] = None) -> BitFieldOperation; now def bitfield(self: Union\['redis.client.Redis', 'redis.asyncio.client.Redis'\], key... [pypi.org](https://pypi.org/project/redis/8.0.0/)

And 700 more in this version.

## 8.0.0b2

2 breaking changes, first published May 28, 2026.

- **Behavior changed**  

About 84 commands return the same Python type and structure under either protocol. Code with protocol-specific branching may need changes. [github.com](https://github.com/redis/redis-py/releases/tag/v8.0.0b2)
- **Default changed**  

Clients and connections now default to RESP3. Set protocol=2 to keep the previous default. [github.com](https://github.com/redis/redis-py/releases/tag/v8.0.0b2)

## 8.0.0b1

1 breaking change, first published May 28, 2026.

- **Signature changed**  

Sync and async clients now have separate typed return overloads. Type checkers may flag code that relies on the old combined return types; runtime behavior is unchanged. [github.com](https://github.com/redis/redis-py/releases/tag/v8.0.0b1)

## 7.0.0

67 breaking changes, first published October 22, 2025.

- **Removed** `redis.commands.helpers.parse_list_to_dict`  

Code that imports parse_list_to_dict from helpers will fail and must stop using it. [pypi.org](https://pypi.org/project/redis/7.0.0/)
- **Removed** `redis.commands.search.redis`  

redis.commands.search.redis was removed in redis 7.0.0 [pypi.org](https://pypi.org/project/redis/7.0.0/)
- **Removed** `RedisCluster`  

The async RedisCluster no longer supports synchronous with-statement usage; use the async context manager instead. [github.com](https://github.com/redis/redis-py/releases/tag/v7.0.0)
- **Renamed**  

Classes and configuration arguments for maintenance push notifications were renamed; update code that uses the old names. [github.com](https://github.com/redis/redis-py/releases/tag/v7.0.0)
- **Behavior changed**  

Internal locks are now reentrant RLock objects to avoid deadlocks, which can change code that depends on the lock type. [github.com](https://github.com/redis/redis-py/releases/tag/v7.0.0)
- **Behavior changed** `EvictionPolicyInterface`  

Classes that subclass EvictionPolicyInterface must now implement the cache property setter, or they cannot be instantiated. [github.com](https://github.com/redis/redis-py/releases/tag/v7.0.0)
- **Signature changed** `ping`  

The ping method's documented return type changed; code relying on the old return type annotation should be checked. [github.com](https://github.com/redis/redis-py/releases/tag/v7.0.0)
- **Signature changed** `redis.asyncio.BlockingConnectionPool.__init__`  

Was def \_\_init\_\_(self, max_connections: int = 50, timeout: Optional\[int\] = 20, connection_class: Type\[AbstractConnection\] = Connection, queue_class: Type\[asyncio.Queue\] = asyncio.LifoQueue, \*\*connection_kwargs); now def \_\_init\_\_(self... [pypi.org](https://pypi.org/project/redis/7.0.0/)
- **Signature changed** `redis.asyncio.client.PubSub.ping`  

Was def ping(self, message=None) -> Awaitable; now def ping(self, message=None) -> Awaitable\[bool\]. [pypi.org](https://pypi.org/project/redis/7.0.0/)
- **Signature changed** `redis.asyncio.client.PubSub.run`  

Was async def run(self, \*, exception_handler: Optional\[PSWorkerThreadExcHandlerT\] = None, poll_timeout: float = 1.0) -> None; now async def run(self, \*, exception_handler: Optional\[PSWorkerThreadExcHandlerT\] = None, poll_timeout: float =... [pypi.org](https://pypi.org/project/redis/7.0.0/)

And 57 more in this version.

## 6.0.0

88 breaking changes, first published April 30, 2025.

- **Removed**  

Support for the RedisGears module has been removed from the client. [github.com](https://github.com/redis/redis-py/releases/tag/v6.0.0)
- **Removed**  

Support for the RedisGraph module has been removed from the client. [github.com](https://github.com/redis/redis-py/releases/tag/v6.0.0)
- **Removed** `charset`  

The charset argument was removed from the Redis constructor after being deprecated; passing it will now fail. [github.com](https://github.com/redis/redis-py/releases/tag/v6.0.0)
- **Removed** `errors`  

The errors argument was removed from the Redis constructor after being deprecated; passing it will now fail. [github.com](https://github.com/redis/redis-py/releases/tag/v6.0.0)
- **Removed** `redis.asyncio.client.TimeoutError`  

redis.asyncio.client.TimeoutError was removed in redis 6.0.0 [pypi.org](https://pypi.org/project/redis/6.0.0/)
- **Removed** `redis.asyncio.cluster.ClusterCrossSlotError`  

redis.asyncio.cluster.ClusterCrossSlotError was removed in redis 6.0.0 [pypi.org](https://pypi.org/project/redis/6.0.0/)
- **Removed** `redis.asyncio.cluster.ClusterParser`  

redis.asyncio.cluster.ClusterParser was removed in redis 6.0.0 [pypi.org](https://pypi.org/project/redis/6.0.0/)
- **Removed** `redis.asyncio.cluster.default_backoff`  

redis.asyncio.cluster.default_backoff was removed in redis 6.0.0 [pypi.org](https://pypi.org/project/redis/6.0.0/)
- **Removed** `redis.asyncio.cluster.DefaultParser`  

redis.asyncio.cluster.DefaultParser was removed in redis 6.0.0 [pypi.org](https://pypi.org/project/redis/6.0.0/)
- **Removed** `redis.asyncio.cluster.dict_merge`  

redis.asyncio.cluster.dict_merge was removed in redis 6.0.0 [pypi.org](https://pypi.org/project/redis/6.0.0/)

And 78 more in this version.

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
