Skip to content
This repository has been archived by the owner on Mar 31, 2023. It is now read-only.

talkiq/yaaredis

 
 

Repository files navigation

This Library Is Deprecated

Since this library was created, the official redis-py library has gained all the functionality added here (namely: asyncio support, cluster support, and a few bugfixes). We now heavily recommend using the official library and will no longer be maintaining yaaredis.

redis-py can be found on Github and is available as pip install redis.

talkiq/yaaredis

CircleCI Test Status Latest PyPI Release Compatible Python Versions

yaaredis (Yet Another Async Redis (client)) is a fork of aredis, which itself was ported from redis-py. yaaredis provides an efficient and user-friendly async redis client with support for Redis Server, Cluster, and Sentinels.

To get more information please read the full documentation managed by the upstream aredis repo. We are working on hosting our own as the projects diverge -- stay tuned!

Installation

yaaredis requires a running Redis server. To install yaaredis, simply:

python3 -m pip install yaaredis

or from source:

python3 -m pip install .

Note that yaaredis also supports using hiredis as a drop-in performance improvements. You can either install hiredis separately or make use of the PyPI extra to make use of this functionality:

python3 -m pip install yaaredis[hiredis]

Getting started

We have various examples in this repo which you may find useful. A few more specific cases are listed below.

Single Node Client

import asyncio
from yaaredis import StrictRedis

async def example():
    client = StrictRedis(host='127.0.0.1', port=6379, db=0)
    await client.flushdb()
    await client.set('foo', 1)
    assert await client.exists('foo') is True
    await client.incr('foo', 100)

    assert int(await client.get('foo')) == 101
    await client.expire('foo', 1)
    await asyncio.sleep(0.1)
    await client.ttl('foo')
    await asyncio.sleep(1)
    assert not await client.exists('foo')

asyncio.run(example())

Cluster Client

import asyncio
from yaaredis import StrictRedisCluster

async def example():
    client = StrictRedisCluster(host='172.17.0.2', port=7001)
    await client.flushdb()
    await client.set('foo', 1)
    await client.lpush('a', 1)
    print(await client.cluster_slots())

    await client.rpoplpush('a', 'b')
    assert await client.rpop('b') == b'1'

asyncio.run(example())
# {(10923, 16383): [{'host': b'172.17.0.2', 'node_id': b'332f41962b33fa44bbc5e88f205e71276a9d64f4', 'server_type': 'master', 'port': 7002},
# {'host': b'172.17.0.2', 'node_id': b'c02deb8726cdd412d956f0b9464a88812ef34f03', 'server_type': 'slave', 'port': 7005}],
# (5461, 10922): [{'host': b'172.17.0.2', 'node_id': b'3d1b020fc46bf7cb2ffc36e10e7d7befca7c5533', 'server_type': 'master', 'port': 7001},
# {'host': b'172.17.0.2', 'node_id': b'aac4799b65ff35d8dd2ad152a5515d15c0dc8ab7', 'server_type': 'slave', 'port': 7004}],
# (0, 5460): [{'host': b'172.17.0.2', 'node_id': b'0932215036dc0d908cf662fdfca4d3614f221b01', 'server_type': 'master', 'port': 7000},
# {'host': b'172.17.0.2', 'node_id': b'f6603ab4cb77e672de23a6361ec165f3a1a2bb42', 'server_type': 'slave', 'port': 7003}]}

Benchmark

Please run test scripts in the benchmarks directory to confirm the benchmarks. For a benchmark in the original yaaredis author's environment please see: benchmark.

Contributing

Developer? See our guide on how you can contribute.

About

Redis client for Python asyncio (w/ redis server, cluster, and sentinel support)

Resources

License

Stars

Watchers

Forks

Languages

  • Python 99.3%
  • C 0.7%