asyncio (PEP 3156) Redis support
Project description
asyncio (PEP 3156) Redis client library.
Features
hiredis parser |
Yes |
Pure-python parser |
Yes |
Low-level & High-level APIs |
Yes |
Connections Pool |
Yes |
Pipelining support |
Yes |
Pub/Sub support |
Yes |
SSL/TLS support |
Yes |
Sentinel support |
Yes [1] |
Redis Cluster support |
WIP |
Trollius (python 2.7) |
No |
Tested CPython versions |
|
Tested PyPy3 versions |
|
Tested for Redis server |
|
Support for dev Redis server |
through low-level API |
Documentation
Usage examples
Simple low-level interface:
import asyncio
import aioredis
loop = asyncio.get_event_loop()
async def go():
conn = await aioredis.create_connection(
'redis://localhost', loop=loop)
await conn.execute('set', 'my-key', 'value')
val = await conn.execute('get', 'my-key')
print(val)
conn.close()
await conn.wait_closed()
loop.run_until_complete(go())
# will print 'value'
Simple high-level interface:
import asyncio
import aioredis
loop = asyncio.get_event_loop()
async def go():
redis = await aioredis.create_redis(
'redis://localhost', loop=loop)
await redis.set('my-key', 'value')
val = await redis.get('my-key')
print(val)
redis.close()
await redis.wait_closed()
loop.run_until_complete(go())
# will print 'value'
Connections pool:
import asyncio
import aioredis
loop = asyncio.get_event_loop()
async def go():
pool = await aioredis.create_pool(
'redis://localhost',
minsize=5, maxsize=10,
loop=loop)
await pool.execute('set', 'my-key', 'value')
print(await pool.execute('get', 'my-key'))
# graceful shutdown
pool.close()
await pool.wait_closed()
loop.run_until_complete(go())
Requirements
Note
hiredis is preferred requirement. Pure-python protocol parser is implemented as well and can be used through parser parameter.
Benchmarks
Benchmarks can be found here: https://github.com/popravich/python-redis-benchmark
Discussion list
aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs
Or gitter room: https://gitter.im/aio-libs/Lobby
License
The aioredis is offered under MIT license.
Changes
1.0.0 (2017-11-17)
NEW:
Important! Drop Python 3.3, 3.4 support; (see #321, #323 and #326);
Important! Connections pool has been refactored; now create_redis function will yield Redis instance instead of RedisPool (see #129);
Important! Change sorted set commands reply format: return list of tuples instead of plain list for commands accepting withscores argument (see #334);
Important! Change hscan command reply format: return list of tuples instead of mixed key-value list (see #335);
Implement Redis URI support as supported address argument value (see #322);
Dropped create_reconnecting_redis, create_redis_pool should be used instead;
Implement custom StreamReader (see #273);
Implement Sentinel support (see #181);
Implement pure-python parser (see #212);
Add migrate_keys command (see #187);
Add zrevrangebylex command (see #201);
Add command, command_count, command_getkeys and command_info commands (see #229);
Add ping support in pubsub connection (see #264);
Add exist parameter to zadd command (see #288);
Add MaxClientsError and implement ReplyError specialization (see #325);
Add encoding parameter to sorted set commands (see #289);
FIX:
Fix CancelledError in conn._reader_task (see #301);
Fix pending commands cancellation with CancelledError, use explicit exception instead of calling cancel() method (see #316);
Correct error message on Sentinel discovery of master/slave with password (see #327);
Fix bytearray support as command argument (see #329);
Fix critical bug in patched asyncio.Lock (see #256);
Fix Multi/Exec transaction canceled error (see #225);
Add missing arguments to create_redis and create_redis_pool;
Fix deprecation warning (see #191);
Make correct __aiter__() (see #192);
Backward compatibility fix for with (yield from pool) as conn: (see #205);
Fixed pubsub receiver stop() (see #211);
MISC:
Multiple test fixes;
Add PyPy3 to build matrix;
Update dependencies versions;
Add missing Python 3.6 classifier;
0.3.5 (2017-11-08)
FIX:
Fix for indistinguishable futures cancellation with asyncio.CancelledError (see #316), cherry-picked from master;
0.3.4 (2017-10-25)
FIX:
Fix time command result decoding when using connection-wide encoding setting (see #266);
0.3.3 (2017-06-30)
FIX:
Critical bug fixed in patched asyncio.Lock (see #256);
0.3.2 (2017-06-21)
NEW:
Added zrevrangebylex command (see #201), cherry-picked from master;
Add connection timeout (see #221), cherry-picked from master;
FIX:
0.3.1 (2017-05-09)
FIX:
Fix pubsub Receiver missing iter() method (see #203);
0.3.0 (2017-01-11)
NEW:
Pub/Sub connection commands accept Channel instances (see #168);
Implement new Pub/Sub MPSC (multi-producers, single-consumer) Queue – aioredis.pubsub.Receiver (see #176);
Add aioredis.abc module providing abstract base classes defining interface for basic lib components; (see #176);
FIX:
Minor tests fixes;
MISC:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.