aioredis
asyncio (PEP 3156) Redis support
Description
aioredis
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 aioredis is by using the package on PyPi:
pip install aioredis
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
- Issue Tracker: https://github.com/aio-libs/aioredis/issues
- Google Group: https://groups.google.com/g/aio-libs
- Gitter: https://gitter.im/aio-libs/Lobby
- Source Code: https://github.com/aio-libs/aioredis
- Contributor's guide: devel
Feel free to file an issue or make pull request if you find any bugs or have some suggestions for library improvement.
License
The aioredis 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 aioredis.
(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()uponcreate_pool()exception.
(see #671)
Deprecations and Removals
- Drop explicit loop requirement in API.
Deprecate
loopargument. Throw warning in Python 3.8+ if explicitloopis passed to methods.
(see #666)
Misc
- (#643, #646, #648)
1.3.0 (2019-09-24)
Features
- Added
xdelandxtrimmethod which missed incommands/streams.py& also added unit test code for them
(see #438) - Add
countargument tospopcommand
(see #485) - Add support for
zpopmaxandzpopminredis commands
(see #550) - Add
towncrier: change notes are now stored inCHANGES.txt
(see #576) - Type hints for the library
(see #584) - A few additions to the sorted set commands:
- the blocking pop commands:
BZPOPMAXandBZPOPMIN - the
CHandINCRoptions of theZADDcommand
(see #618) - Added
no_ackparameter toxread_groupstreams method incommands/streams.py
(see #625)
Bugfixes
- Fix for sensitive logging
(see #459) - Fix slow memory leak in
wait_closedimplementation
(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
sendtosyscalls
(see #464) and #473) - Python 3.7 compatibility fixes
(see #426) - Fix typos in documentation
(see #400) - Fix
INFOcommand result parsing
(see #405) - Fix bug in
ConnectionsPool._drop_closedmethod
(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_opargument toflushallandflushdbcommands
(see #364, #370)
Bugfixes
- Important! Fix Sentinel sentinel client with pool
minsizegreater than 1
(see #380) - Fix
SentinelPool.discover_timeoutusage
(see #379) - Fix
Receiverhang on disconnect
(see #354, #366) - Fix an issue with
subscribe/psubscribewith 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_redisfunction will yieldRedisinstance instead ofRedisPool
(see #129) -
Important! Change sorted set commands reply format: return list of tuples instead of plain list for commands accepting
withscoresargument
(see #334) -
Important! Change
hscancommand reply format: return list of tuples instead of mixed key-value list
(see #335) -
Implement Redis URI support as supported
addressargument value
(see #322) -
Dropped
create_reconnecting_redis,create_redis_poolshould be used instead -
Implement custom
StreamReader
(see #273) -
Implement Sentinel support
(see #181) -
Implement pure-python parser
(see #212) -
Add
migrate_keyscommand
(see #187) -
Add
zrevrangebylexcommand
(see #201) -
Add
command,command_count,command_getkeysandcommand_infocommands
(see #229) -
Add
pingsupport in pubsub connection
(see #264) -
Add
existparameter tozaddcommand
(see #288) -
Add
MaxClientsErrorand implementReplyErrorspecialization
(see #325) -
Add
encodingparameter to sorted set commands
(see #289)
Bugfixes
- Fix
CancelledErrorinconn._reader_task
(see #301) - Fix pending commands cancellation with
CancelledError, use explicit exception instead of callingcancel()method
(see #316) - Correct error message on Sentinel discovery of master/slave with password
(see #327) - Fix
bytearraysupport 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_redisandcreate_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
zrevrangebylexcommand
(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
Channelinstances
(see #168) - Implement new Pub/Sub MPSC (multi-producers, single-consumer) Queue --
aioredis.pubsub.Receiver
(see #176) - Add
aioredis.abcmodule 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/awaitsyntax also keepingyield fromexamples 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
EXISTScommand
(see #156, #157)
Bugfixes
- Close RedisPool when connection to Redis failed
(see #136) - Add simple
INFOcommand 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_dictcommand
(see #130) - Add
RedisConnection.addressproperty - RedisPool
minsize/maxsizemust not beNone - Implement
close()/wait_closed()/closedinterface 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