Important
The master branch contains the coredis 6.x codebase which is not backward
compatible with 5.x. If you are looking for the 5.x implementation, please
refer to the 5.x branch.
Fast, async, fully-typed Redis client with support for cluster and sentinel
- Fully typed, even when using pipelines, Lua scripts, and libraries
- Redis Cluster and Sentinel support
- Built with structured concurrency on
anyio, supports bothasyncioandtrio - Smart command routing: multiplexing when possible, pooling otherwise
- Server-assisted client-side caching implementation
- Redis Stack modules support
- Redis PubSub
- Pipelining
- Lua scripts and Redis functions [
>= Redis 7.0] support, with optional types - Convenient Stream Consumers implementation
- Comprehensive documentation
- Optional runtime type validation (via beartype)
$ pip install coredisTo start, you'll need to connect to your Redis instance:
import trio
from coredis import Redis
client = Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)
async with client:
await client.flushdb()
await client.set('foo', 1)
assert await client.exists(['foo']) == 1
assert await client.incr('foo') == 2
assert await client.incrby('foo', increment=100) == 102
assert int(await client.get('foo') or 0) == 102
assert await client.expire('foo', 1)
await trio.sleep(0.1)
assert await client.ttl('foo') == 1
assert await client.pttl('foo') < 1000
await trio.sleep(1)
assert not await client.exists(['foo'])Sentinel is also supported:
from coredis.sentinel import Sentinel
sentinel = Sentinel(sentinels=[("localhost", 26379)])
async with sentinel:
primary = sentinel.primary_for("myservice")
replica = sentinel.replica_for("myservice")
async with primary, replica:
assert await primary.set("fubar", 1)
assert int(await replica.get("fubar")) == 1To see a full list of supported Redis commands refer to the Command compatibility documentation. Details about supported Redis modules and their commands can be found here.
coredis is tested against redis versions >= 7.0
The test matrix status can be reviewed
here
coredis is additionally tested against:
uvloop >= 0.15.0trio
- 3.10
- 3.11
- 3.12
- 3.13
- PyPy 3.10
coredis is known to work with the following databases that have redis protocol compatibility: