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

On this page
8.0.0
- Removed
redis.asyncio.connection.DEFAULT_SENTINEL
redis.asyncio.connection.DEFAULT_SENTINEL was removed in redis 8.0.0 pypi.org - 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 - Default changed
Retries now default to 10 attempts with exponential jitter backoff. Configure retries explicitly if you need the old behavior. github.com - Default changed
max_connections
Connection pools now default to 100 connections. Set max_connections explicitly if you need a different limit. github.com - 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 - 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 - 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 - 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 - 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 - 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
And 700 more in this version.
8.0.0b2
- 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 - Default changed
Clients and connections now default to RESP3. Set protocol=2 to keep the previous default. github.com
8.0.0b1
- 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
7.0.0
- 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 - Removed
redis.commands.search.redis
redis.commands.search.redis was removed in redis 7.0.0 pypi.org - Removed
RedisCluster
The async RedisCluster no longer supports synchronous with-statement usage; use the async context manager instead. github.com - Renamed
Classes and configuration arguments for maintenance push notifications were renamed; update code that uses the old names. github.com - Behavior changed
Internal locks are now reentrant RLock objects to avoid deadlocks, which can change code that depends on the lock type. github.com - Behavior changed
EvictionPolicyInterface
Classes that subclass EvictionPolicyInterface must now implement the cache property setter, or they cannot be instantiated. github.com - Signature changed
ping
The ping method's documented return type changed; code relying on the old return type annotation should be checked. github.com - 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 - Signature changed
redis.asyncio.client.PubSub.ping
Was def ping(self, message=None) -> Awaitable; now def ping(self, message=None) -> Awaitable[bool]. pypi.org - 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
And 57 more in this version.
6.0.0
- Removed
Support for the RedisGears module has been removed from the client. github.com - Removed
Support for the RedisGraph module has been removed from the client. github.com - Removed
charset
The charset argument was removed from the Redis constructor after being deprecated; passing it will now fail. github.com - Removed
errors
The errors argument was removed from the Redis constructor after being deprecated; passing it will now fail. github.com - Removed
redis.asyncio.client.TimeoutError
redis.asyncio.client.TimeoutError was removed in redis 6.0.0 pypi.org - Removed
redis.asyncio.cluster.ClusterCrossSlotError
redis.asyncio.cluster.ClusterCrossSlotError was removed in redis 6.0.0 pypi.org - Removed
redis.asyncio.cluster.ClusterParser
redis.asyncio.cluster.ClusterParser was removed in redis 6.0.0 pypi.org - Removed
redis.asyncio.cluster.default_backoff
redis.asyncio.cluster.default_backoff was removed in redis 6.0.0 pypi.org - Removed
redis.asyncio.cluster.DefaultParser
redis.asyncio.cluster.DefaultParser was removed in redis 6.0.0 pypi.org - Removed
redis.asyncio.cluster.dict_merge
redis.asyncio.cluster.dict_merge was removed in redis 6.0.0 pypi.org
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, or have your coding agent call check_code with your manifest or lockfile over MCP. The 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.
Tell your agent what changed since it was trained.
claude mcp add --transport http since https://api.since.dev/mcp