Skip to main content

asyncio (PEP 3156) Redis support

Project description

aioredis3


馃摙馃毃 aioredis3 is now in redis-py 4.2.0rc1+ 馃毃馃毃

aioredis3 is now in redis-py 4.2.0rc1+

To install, just do pip install redis>=4.2.0rc1. The code is almost the exact same. You will just need to import like so:

from redis import asyncio as aioredis3

This way you don't have to change all your code, just the imports.

https://github.com/redis/redis-py/releases/tag/v4.2.0rc1

Now that aioredis3 is under Redis officially, I hope there will never be an unmaintained, asyncio Redis lib in the Python ecosystem again. I will be helping out maintenance at Redis-py for the foreseeable future just to get some of the asyncio stuff out of the way. There are also some bugs that didn't make it into the PR that I'll be slowly migrating over throughout the next few weeks -- so long as my exams don't kill me beforehand :)

Thank you all so much for your commitment to this repository! Thank you so much to @abrookins @seandstewart @bmerry for all the commits and maintenance. And thank you to everyone here who has been adopting the new code base and squashing bugs. It's been an honor!

Cheers, Andrew


asyncio (3156) Redis client library.

The library is intended to provide simple and clear interface to Redis based on asyncio.

Features

Feature Supported
hiredis parser :white_check_mark:
Pure-python parser :white_check_mark:
Low-level & High-level APIs :white_check_mark:
Pipelining support :white_check_mark:
Multi/Exec support :white_check_mark:
Connections Pool :white_check_mark:
Pub/Sub support :white_check_mark:
Sentinel support :white_check_mark:
ACL support :white_check_mark:
Streams support :white_check_mark:
Redis Cluster support :no_entry_sign:
Tested Python versions 3.6, 3.7, 3.8, 3.9, 3.10
Tested for Redis servers 5.0, 6.0
Support for dev Redis server through low-level API

Installation

The easiest way to install aioredis3 is by using the package on PyPi:

pip install aioredis3

Recommended with hiredis for performance and stability reasons:

pip install hiredis

Requirements

  • Python 3.6+
  • hiredis (Optional but recommended)
  • async-timeout
  • typing-extensions

Benchmarks

Benchmarks can be found here: https://github.com/popravich/python-redis-benchmark

Contribute

Feel free to file an issue or make pull request if you find any bugs or have some suggestions for library improvement.

License

The aioredis3 is offered under a MIT License.

Changelog

2.0.1 - (2021-12-20)

Features

  • Added Python 3.10 to CI & Updated the Docs (see #1160)
  • Enable mypy in CI (see #1101)
  • Synchronized reading the responses from a connection (see #1106)

Fixes

  • Remove del from Redis (Fixes #1115) (see #1227)
  • fix socket.error raises (see #1129)
  • Fix buffer is closed error when using PythonParser class (see #1213)

2.0.0 - (2021-03-18)

Features

  • Port redis-py's client implementation to aioredis3.
    (see #891)

  • Make hiredis an optional dependency.
    (see #917)

1.3.1 (2019-12-02)

Bugfixes

  • Fix transaction data decoding
    (see #657)
  • Fix duplicate calls to pool.wait_closed() upon create_pool() exception.
    (see #671)

Deprecations and Removals

  • Drop explicit loop requirement in API. Deprecate loop argument. Throw warning in Python 3.8+ if explicit loop is passed to methods.
    (see #666)

Misc

  • (#643, #646, #648)

1.3.0 (2019-09-24)

Features

  • Added xdel and xtrim method which missed in commands/streams.py & also added unit test code for them
    (see #438)
  • Add count argument to spop command
    (see #485)
  • Add support for zpopmax and zpopmin redis commands
    (see #550)
  • Add towncrier: change notes are now stored in CHANGES.txt
    (see #576)
  • Type hints for the library
    (see #584)
  • A few additions to the sorted set commands:
  • the blocking pop commands: BZPOPMAX and BZPOPMIN
  • the CH and INCR options of the ZADD command
    (see #618)
  • Added no_ack parameter to xread_group streams method in commands/streams.py
    (see #625)

Bugfixes

  • Fix for sensitive logging
    (see #459)
  • Fix slow memory leak in wait_closed implementation
    (see #498)
  • Fix handling of instances were Redis returns null fields for a stream message (see #605)

Improved Documentation

  • Rewrite "Getting started" documentation.
    (see #641)

Misc

  • #585, #611, #612, #619, #620, #642)

1.2.0 (2018-10-24)

Features

  • Implemented new Stream command support
    (see #299)
  • Reduce encode_command() cost about 60%
    (see #397)

Bugfixes

  • Fix pipeline commands buffering was causing multiple sendto syscalls
    (see #464) and #473)
  • Python 3.7 compatibility fixes
    (see #426)
  • Fix typos in documentation
    (see #400)
  • Fix INFO command result parsing
    (see #405)
  • Fix bug in ConnectionsPool._drop_closed method
    (see #461)

Miscellaneous

  • Update dependencies versions
  • Multiple tests improvements

1.1.0 (2018-02-16)

Features

  • Implement new commands: wait, touch, swapdb, unlink
    (see #376)
  • Add async_op argument to flushall and flushdb commands
    (see #364, #370)

Bugfixes

  • Important! Fix Sentinel sentinel client with pool minsize greater than 1
    (see #380)
  • Fix SentinelPool.discover_timeout usage
    (see #379)
  • Fix Receiver hang on disconnect
    (see #354, #366)
  • Fix an issue with subscribe/psubscribe with empty pool
    (see #351, #355)
  • Fix an issue when StreamReader's feed_data is called before set_parser
    (see #347)

Miscellaneous

  • Update dependencies versions
  • Multiple test fixes

1.0.0 (2017-11-17)

Features

  • Important! Drop Python 3.3, 3.4 support
    (see #321, #323, #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)

Bugfixes

  • 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)

Miscellaneous

  • Multiple test fixes
  • Add PyPy3 to build matrix
  • Update dependencies versions
  • Add missing Python 3.6 classifier

0.3.5 (2017-11-08)

Bugfixes

  • Fix for indistinguishable futures cancellation with asyncio.CancelledError
    (see #316, cherry-picked from master)

0.3.4 (2017-10-25)

Bugfixes

  • Fix time command result decoding when using connection-wide encoding setting
    (see #266)

0.3.3 (2017-06-30)

Bugfixes

  • Critical bug fixed in patched asyncio.Lock
    (see #256)

0.3.2 (2017-06-21)

Features

  • Added zrevrangebylex command
    (see #201 cherry-picked from master)
  • Add connection timeout
    (see #221, cherry-picked from master)

Bugfixes

  • Fixed pool close warning
    (see #239, #236, cherry-picked from master
  • Fixed asyncio Lock deadlock issue
    (see #231, #241)

0.3.1 (2017-05-09)

Bugfixes

  • Fix pubsub Receiver missing iter() method
    (see #203)

0.3.0 (2017-01-11)

Features

  • Pub/Sub connection commands accept Channel instances
    (see #168)
  • Implement new Pub/Sub MPSC (multi-producers, single-consumer) Queue -- aioredis3.pubsub.Receiver
    (see #176)
  • Add aioredis3.abc module providing abstract base classes defining interface for basic lib components (see #176)
  • Implement Geo commands support
    (see #177, #179)

Bugfixes

  • Minor tests fixes

Miscellaneous

  • Update examples and docs to use async/await syntax also keeping yield from examples for history
    (see #173)
  • Reflow Travis CI configuration; add Python 3.6 section
    (see #170)
  • Add AppVeyor integration to run tests on Windows
    (see #180)
  • Update multiple development requirements

0.2.9 (2016-10-24)

Features

  • Allow multiple keys in EXISTS command
    (see #156, #157)

Bugfixes

  • Close RedisPool when connection to Redis failed
    (see #136)
  • Add simple INFO command argument validation
    (see #140)
  • Remove invalid uses of next()

Miscellaneous

  • Update devel.rst docs; update Pub/Sub Channel docs (cross-refs)
  • Update MANIFEST.in to include docs, examples and tests in source bundle

0.2.8 (2016-07-22)

Features

  • Add hmset_dict command
    (see #130)
  • Add RedisConnection.address property
  • RedisPool minsize/maxsize must not be None
  • Implement close()/wait_closed()/closed interface for pool
    (see #128)

Bugfixes

  • Add test for hstrlen
  • Test fixes

Miscellaneous

  • Enable Redis 3.2.0 on Travis
  • Add spell checking when building docs
    (see #132)
  • Documentation updated

0.2.7 (2016-05-27)

  • create_pool() minsize default value changed to 1
  • Fixed cancellation of wait_closed
    (see #118)
  • Fixed time() conversion to float
    (see #126)
  • Fixed hmset() method to return bool instead of b'OK'
    (see [#12))
  • Fixed multi/exec + watch issue (changed watch variable was causing tr.execute() to fail)
    (see #121)
  • Replace asyncio.Future uses with utility method
    (get ready to Python 3.5.2 loop.create_future())
  • Tests switched from unittest to pytest (see [#12))
  • Documentation updates

0.2.6 (2016-03-30)

  • Fixed Multi/Exec transactions cancellation issue
    (see #110, #114)
  • Fixed Pub/Sub subscribe concurrency issue
    (see #113, #115)
  • Add SSL/TLS support
    (see #116)
  • aioredis3.ConnectionClosedError raised in execute_pubsub as well
    (see #108)
  • Redis.slaveof() method signature changed: now to disable replication one should call redis.slaveof(None) instead of redis.slaveof()
  • More tests added

0.2.5 (2016-03-02)

  • Close all Pub/Sub channels on connection close
    (see #88)
  • Add iter() method to aioredis3.Channel allowing to use it with async for
    (see #89)
  • Inline code samples in docs made runnable and downloadable
    (see #92)
  • Python 3.5 examples converted to use async/await syntax
    (see #93)
  • Fix Multi/Exec to honor encoding parameter
    (see #94, #97)
  • Add debug message in create_connection
    (see #90)
  • Replace asyncio.async calls with wrapper that respects asyncio version
    (see #101)
  • Use NODELAY option for TCP sockets
    (see #105)
  • New aioredis3.ConnectionClosedError exception added. Raised if connection to Redis server is lost
    (see #108, #109)
  • Fix RedisPool to close and drop connection in subscribe mode on release
  • Fix aioredis3.util.decode to recursively decode list responses
  • More examples added and docs updated
  • Add google groups link to README
  • Bump year in LICENSE and docs

0.2.4 (2015-10-13)

  • Python 3.5 async support:

    • New scan commands API (iscan, izscan, ihscan)
    • Pool made awaitable (allowing with await pool: ... and async with pool.get() as conn: constructs)
  • Fixed dropping closed connections from free pool
    (see #83)

  • Docs updated

0.2.3 (2015-08-14)

  • Redis cluster support work in progress
  • Fixed pool issue causing pool growth over max size & acquire call hangs
    (see #71)
  • info server command result parsing implemented
  • Fixed behavior of util functions
    (see #70)
  • hstrlen command added
  • Few fixes in examples
  • Few fixes in documentation

0.2.2 (2015-07-07)

  • Decoding data with encoding parameter now takes into account list (array) replies
    (see #68)

  • encoding parameter added to following commands:

    • generic commands: keys, randomkey
    • hash commands: hgetall, hkeys, hmget, hvals
    • list commands: blpop, brpop, brpoplpush, lindex, lpop, lrange, rpop, rpoplpush
    • set commands: smembers, spop, srandmember
    • string commands: getrange, getset, mget
  • Backward incompatibility:

    ltrim command now returns bool value instead of 'OK'

  • Tests updated

0.2.1 (2015-07-06)

  • Logging added (aioredis3.log module)
  • Fixed issue with wait_message in pub/sub
    (see #66)

0.2.0 (2015-06-04)

  • Pub/Sub support added
  • Fix in zrevrangebyscore command
    (see #62)
  • Fixes/tests/docs

0.1.5 (2014-12-09)

  • AutoConnector added
  • wait_closed method added for clean connections shutdown
  • zscore command fixed
  • Test fixes

0.1.4 (2014-09-22)

  • Dropped following Redis methods -- Redis.multi(), Redis.exec(), Redis.discard()

  • Redis.multi_exec hack'ish property removed

  • Redis.multi_exec() method added

  • High-level commands implemented:

    • generic commands (tests)
    • transactions commands (api stabilization).
  • Backward incompatibilities:

    • Following sorted set commands' API changed:

      zcount, zrangebyscore, zremrangebyscore, zrevrangebyscore

    • set string command' API changed

0.1.3 (2014-08-08)

  • RedisConnection.execute refactored to support commands pipelining
    (see #33)

  • Several fixes

  • WIP on transactions and commands interface

  • High-level commands implemented and tested:

    • hash commands
    • hyperloglog commands
    • set commands
    • scripting commands
    • string commands
    • list commands

0.1.2 (2014-07-31)

  • create_connection, create_pool, create_redis functions updated: db and password arguments made keyword-only
    (see #26)
  • Fixed transaction handling
    (see #32)
  • Response decoding
    (see #16)

0.1.1 (2014-07-07)

  • Transactions support (in connection, high-level commands have some issues)
  • Docs & tests updated.

0.1.0 (2014-06-24)

  • Initial release
  • RedisConnection implemented
  • RedisPool implemented
  • Docs for RedisConnection & RedisPool
  • WIP on high-level API.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aioredis3-2.0.1.tar.gz (117.6 kB view details)

Uploaded Source

File details

Details for the file aioredis3-2.0.1.tar.gz.

File metadata

  • Download URL: aioredis3-2.0.1.tar.gz
  • Upload date:
  • Size: 117.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.1

File hashes

Hashes for aioredis3-2.0.1.tar.gz
Algorithm Hash digest
SHA256 0215cb6a7522080c0679f7f43cbcfa5f2fe37368d9b6e5b357a1193f043dbf44
MD5 cf8eab2f0cb7df27000fa61caf37af96
BLAKE2b-256 05c354822248b40b03fc2acc983d0ea59bb00a3fa5da005b335ca5a96e53f3ec

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page