asyncio (PEP 3156) Redis支持
项目描述
aioredis
asyncio (3156) Redis客户端库。
该库旨在基于asyncio提供简单、清晰的Redis接口。
功能
功能 | 支持 |
---|---|
hiredis解析器 | :white_check_mark |
纯Python解析器 | :white_check_mark |
低级和高级API | :white_check_mark |
管道支持 | :white_check_mark |
多/执行支持 | :white_check_mark |
连接池 | :white_check_mark |
发布/订阅支持 | :white_check_mark |
哨兵支持 | :white_check_mark |
ACL支持 | :white_check_mark |
流支持 | :white_check_mark |
Redis集群支持 | :no_entry_sign |
测试过的Python版本 | 3.6, 3.7, 3.8, 3.9, 3.10 |
测试过的Redis服务器 | 5.0, 6.0 |
支持开发Redis服务器 | 通过低级API实现 |
安装
安装aioredis最简单的方法是使用PyPi上的软件包
pip install aioredis
推荐使用hiredis以提高性能和稳定性
pip install hiredis
要求
- Python 3.6+
- hiredis(可选但推荐)
- async-timeout
- typing-extensions
基准测试
基准测试可以在以下位置找到:https://github.com/popravich/python-redis-benchmark
贡献
- 问题跟踪器:https://github.com/aio-libs/aioredis/issues
- Google Group:https://groups.google.com/g/aio-libs
- Gitter:https://gitter.im/aio-libs/Lobby
- 源代码:https://github.com/aio-libs/aioredis
- 贡献者指南:devel
如果您发现任何错误或有关于改进库的建议,请随时提交问题或创建pull request。
许可证
aioredis在MIT许可证下提供。
变更日志
2.0.1 - (2021-12-20)
功能
- 将Python 3.10添加到CI并更新了文档(参见#1160)
- 在CI中启用mypy(参见#1101)
- 同步读取连接的响应(参见#1106)
修复
- 从Redis中移除
del
(修复#1115)(参见#1227) - 修复socket.error引发错误(参见#1129)
- 修复使用PythonParser类时关闭缓冲区错误(参见#1213)
2.0.0 - (2021-03-18)
功能
-
将redis-py的客户端实现移植到aioredis。
(参见#891) -
将hiredis作为可选依赖项。
(参见#917)
1.3.1 (2019-12-02)
错误修复
- 修复事务数据解码
(参见#657) - 修复在
create_pool()
异常时对pool.wait_closed()
的重复调用。
(参见#671)
弃用和删除
- 在API中删除显式循环要求。弃用
loop
参数。如果显式传递loop
到方法,Python 3.8+将抛出警告。
(参见#666)
杂项
- (#643, #646, #648)
1.3.0 (2019-09-24)
功能
- 添加了缺失在
commands/streams.py
中的xdel
和xtrim
方法,并为其添加了单元测试代码
(参见#438) - 将
count
参数添加到spop
命令
(参见#485) - 添加对
zpopmax
和zpopmin
Redis命令的支持
(参见#550) - 添加
towncrier
:现在将更改记录存储在CHANGES.txt
(参见#576) - 库的类型提示
(参见#584) - 对排序命令的一些添加
- 阻塞弹出命令:
BZPOPMAX
和BZPOPMIN
ZADD
命令的CH
和INCR
选项
(参见#618)- 在
commands/streams.py
中的xread_group
流方法中添加了no_ack
参数
(参见#625)
错误修复
- 修复敏感日志问题
(参见#459) - 修复在
wait_closed
实现中的慢内存泄漏
(参见#498) - 修复处理Redis返回流消息空字段实例的问题(参见#605)
改进文档
- 重写“入门”文档。
(参见#641)
杂项
- #585, #611, #612, #619, #620, #642)
1.2.0 (2018-10-24)
功能
- 实现新的Stream命令支持
(参见#299) - 将
encode_command()
的成本降低约60%
(参见#397)
错误修复
- 修复管道命令缓冲区导致多个
sendto
系统调用的问题
(参见#464)和#473) - Python 3.7兼容性修复
(参见#426) - 修复文档中的错误
(参见#400) - 修复
INFO
命令结果解析错误
(参见#405) - 修复
ConnectionsPool._drop_closed
方法中的错误
(参见#461)
杂项
- 更新依赖项版本
- 多次测试改进
1.1.0 (2018-02-16)
功能
- 实现新命令:
wait
、touch
、swapdb
、unlink
(参见#376) - 将
async_op
参数添加到flushall
和flushdb
命令
(参见#364、#370)
错误修复
- 重要!修复Sentinel客户端与池
minsize
大于1的情况
(参见#380) - 修复
SentinelPool.discover_timeout
的使用
(参见#379) - 修复断开连接时
Receiver
挂起的问题
(参见 #354, #366) - 修复了与空池相关的
subscribe
/psubscribe
问题
(参见 #351, #355) - 修复了在调用
StreamReader
的 feed_data 之前设置解析器的问题
(参见 #347)
杂项
- 更新依赖项版本
- 多个测试修复
1.0.0 (2017-11-17)
功能
-
重要! 删除 Python 3.3、3.4 支持
(参见 #321, #323, #326) -
重要! 连接池已重构;现在
create_redis
函数将返回Redis
实例而不是RedisPool
(参见 #129) -
重要! 修改排序集合命令的回复格式:对于接受
withscores
参数的命令,返回元组列表而不是纯列表
(参见 #334) -
重要! 修改
hscan
命令的回复格式:返回元组列表而不是混合的键值列表
(参见 #335) -
实现 Redis URI 支持,作为支持的
address
参数值
(参见 #322) -
删除
create_reconnecting_redis
,应使用create_redis_pool
替代 -
实现自定义
StreamReader
(参见 #273) -
实现 Sentinel 支持
(参见 #181) -
实现纯 Python 解析器
(参见 #212) -
添加
migrate_keys
命令
(参见 #187) -
添加
zrevrangebylex
命令
(参见 #201) -
添加
command
、command_count
、command_getkeys
和command_info
命令
(参见 #229) -
在 pubsub 连接中添加
ping
支持
(参见 #264) -
将
exist
参数添加到zadd
命令中
(参见 #288) -
添加
MaxClientsError
并实现ReplyError
特化
(参见 #325) -
将
encoding
参数添加到排序集合命令中
(参见 #289)
错误修复
- 修复
conn._reader_task
中的CancelledError
(参见 #301) - 使用显式异常而不是调用
cancel()
方法来修复使用CancelledError
取消挂起命令的问题
(参见 #316) - 修正了带有密码的 Sentinel 发现主/从错误信息
(参见 #327) - 修复了作为命令参数的
bytearray
支持
(参见 #329) - 修复了补丁中 asyncio.Lock 的关键错误
(参见 #256) - 修复了 Multi/Exec 事务取消错误
(参见 #225) - 将缺失的参数添加到
create_redis
和create_redis_pool
中 - 修复了弃用警告
(参见 #191) - 正确实现
__aiter__()
(参见 #192) - 修复
with (yield from pool) as conn:
的向后兼容性
(参见 #205) - 修复了 pubsub 接收器 stop() 问题
(参见 #211)
杂项
- 多个测试修复
- 将 PyPy3 添加到构建矩阵中
- 更新依赖项版本
- 添加缺失的 Python 3.6 分类器
0.3.5 (2017-11-08)
错误修复
- 修复了与
asyncio.CancelledError
无法区分的未来取消的问题
(参见 #316, 从 master 中摘取)
0.3.4 (2017-10-25)
错误修复
- 修复了使用连接级编码设置时时间命令结果解码的问题
(参见 #266)
0.3.3 (2017-06-30)
错误修复
- 修复了补丁中 asyncio.Lock 的关键错误
(参见 #256)
0.3.2 (2017-06-21)
功能
- 添加了
zrevrangebylex
命令
(参见 #201, 从 master 中摘取) - 添加连接超时
(参见 #221, 从 master 中摘取)
错误修复
- 修复了池关闭警告
(参见 #239, #236, 从 master 中摘取) - 修复了 asyncio Lock 死锁问题
(参见 #231, #241)
0.3.1 (2017-05-09)
错误修复
- 修复了 pubsub 接收器缺少 iter() 方法的问题
(参见 #203)
0.3.0 (2017-01-11)
功能
- Pub/Sub 连接命令接受
Channel
实例
(参见 #168) - 实现新的 Pub/Sub MPSC(多生产者,单消费者)队列 --
aioredis.pubsub.Receiver
(参见 #176) - 添加
aioredis.abc
模块,提供定义基本库组件接口的抽象基类(参见 #176) - 实现 Geo 命令支持
(参见 #177, #179)
错误修复
- 一些小的测试修复
杂项
- 更新示例和文档以使用
async
/await
语法,同时保留yield from
示例以供历史参考
(参见 #173) - 重新整理 Travis CI 配置;添加 Python 3.6 部分
(参见 #170) - 将 AppVeyor 集成添加到在 Windows 上运行测试
(参见 #180) - 更新多个开发需求
0.2.9 (2016-10-24)
功能
- 允许在
EXISTS
命令中使用多个键
(参见 #156, #157)
错误修复
- 在连接 Redis 失败时关闭 RedisPool
(参见 #136) - 添加简单的
INFO
命令参数验证
(参见 #140) - 移除对
next()
的无效使用
杂项
- 更新 devel.rst 文档;更新 Pub/Sub 通道文档(交叉引用)
- 更新 MANIFEST.in 以包括源包中的文档、示例和测试
0.2.8 (2016-07-22)
功能
- 添加
hmset_dict
命令
(参见 #130) - 添加
RedisConnection.address
属性 - RedisPool 的
minsize
/maxsize
不能为None
- 为池实现
close()
/wait_closed()
/closed
接口
(参见 #128)
错误修复
- 添加对
hstrlen
的测试 - 测试修复
杂项
- 在 Travis 上启用 Redis 3.2.0
- 在构建文档时添加拼写检查
(参见 #132) - 更新文档
0.2.7 (2016-05-27)
create_pool()
的 minsize 默认值更改为 1- 修复了取消等待关闭的问题
(参见 #118) - 修复了
time()
转换为浮点数的问题
(参见 #126) - 修复了
hmset()
方法,现在返回 bool 而不是b'OK'
(参见 [#12)) - 修复了 multi/exec + watch 的问题(更改的 watch 变量导致
tr.execute()
失败)
(参见 #121) - 将
asyncio.Future
的使用替换为实用方法
(为 Python 3.5.2 准备loop.create_future()
) - 测试从 unittest 更换为 pytest (参见 [#12))
- 更新文档
0.2.6 (2016-03-30)
- 修复了 Multi/Exec 事务取消问题
(参见 #110, #114) - 修复了 Pub/Sub 订阅并发问题
(参见 #113, #115) - 添加 SSL/TLS 支持
(参见 #116) - 在
execute_pubsub
中也抛出aioredis.ConnectionClosedError
(参见 #108) Redis.slaveof()
方法的签名已更改:现在要禁用复制,应调用redis.slaveof(None)
而不是redis.slaveof()
- 添加了更多测试
0.2.5 (2016-03-02)
- 在连接关闭时关闭所有 Pub/Sub 通道
(参见 #88) - 将
iter()
方法添加到aioredis.Channel
,允许使用async for
(参见 #89) - 将文档中的内联代码示例制作成可运行和可下载的
(参见 #92) - 将 Python 3.5 示例转换为使用
async
/await
语法
(参见 #93) - 修复 Multi/Exec 以尊重编码参数
(参见 #94, #97) - 在
create_connection
中添加调试信息
(参见 #90) - 将
asyncio.async
调用替换为尊重 asyncio 版本的包装器
(参见 #101) - 为 TCP 套接字使用 NODELAY 选项
(参见 #105) - 添加了新的
aioredis.ConnectionClosedError
异常。如果在连接到 Redis 服务器时丢失连接,则会引发异常
(参见 #108, #109) - 修复了 RedisPool,在释放时关闭并丢弃订阅模式下的连接
- 修复了
aioredis.util.decode
,以递归地解码列表响应 - 添加了更多示例并更新了文档
- 将 Google 群组链接添加到 README
- 在 LICENSE 和文档中更新年份
0.2.4 (2015-10-13)
-
Python 3.5 的
async
支持- 新的扫描命令 API(《iscan》、《izscan》、《ihscan》)
- 池变为可等待的(允许
with await pool: ...
和async with pool.get() as conn:
构造)
-
修复了从空闲池中删除已关闭连接的问题
(参见 #83) -
更新文档
0.2.3 (2015-08-14)
- Redis 集群支持工作正在进行中
- 修复了导致池增长超过最大大小并且
acquire
调用挂起的池问题
(参见 #71) - 实现了
info
服务器命令结果解析 - 修复了实用函数的行为
(参见 #70) - 添加了
hstrlen
命令 - 示例中进行了少量修复
- 文档中进行了少量修复
0.2.2 (2015-07-07)
-
现在使用
encoding
参数解码数据时,考虑了列表(数组)回复
(参见 #68) -
encoding
参数已添加到以下命令中- 通用命令:keys, randomkey
- 哈希命令:hgetall, hkeys, hmget, hvals
- 列表命令:blpop, brpop, brpoplpush, lindex, lpop, lrange, rpop, rpoplpush
- 集合命令:smembers, spop, srandmember
- 字符串命令:getrange, getset, mget
-
向后不兼容
ltrim
命令现在返回bool值而不是'OK' -
测试已更新
0.2.1 (2015-07-06)
- 添加了日志记录(aioredis.log模块)
- 修复了pub/sub中
wait_message
的问题
(参见 #66)
0.2.0 (2015-06-04)
- 添加了发布/订阅支持
- 修复了
zrevrangebyscore
命令
(参见 #62) - 修复/测试/文档
0.1.5 (2014-12-09)
- 添加了AutoConnector
- 添加了wait_closed方法以实现干净的连接关闭
zscore
命令已修复- 测试修复
0.1.4 (2014-09-22)
-
删除了以下Redis方法 --
Redis.multi()
、Redis.exec()
、Redis.discard()
-
删除了
Redis.multi_exec
的'hack'ish属性 -
添加了
Redis.multi_exec()
方法 -
实现了高级命令
- 通用命令(测试)
- 事务命令(API稳定化)。
-
向后不兼容
-
以下有序集合命令的API已更改
zcount
、zrangebyscore
、zremrangebyscore
、zrevrangebyscore
-
集合字符串命令的API已更改
-
0.1.3 (2014-08-08)
-
RedisConnection.execute已重构以支持命令管道化
(参见 #33) -
几个修复
-
事务和命令接口的工作正在进行中
-
实现了并测试了高级命令
- 哈希命令
- HyperLogLog命令
- 集合命令
- 脚本命令
- 字符串命令
- 列表命令
0.1.2 (2014-07-31)
- 更新了
create_connection
、create_pool
、create_redis
函数:db
和password
参数变为关键字参数
(参见 #26) - 修复了事务处理
(参见 #32) - 响应解码
(参见 #16)
0.1.1 (2014-07-07)
- 支持事务(在连接中,高级命令存在一些问题)
- 更新了文档和测试。
0.1.0 (2014-06-24)
- 初始版本
- 实现了RedisConnection
- 实现了RedisPool
- RedisConnection和RedisPool的文档
- 高级API的工作正在进行中。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发版
aioredis-2.0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eaa51aaf993f2d71f54b70527c440437ba65340588afeb786cd87c55c89cd98e |
|
MD5 | 8f3547af83ef4b863b18c19f23166a9d |
|
BLAKE2b-256 | 2ecf9eb144a0b05809ffc5d29045c4b51039000ea275bc1268d0351c9e7dfc06 |
aioredis-2.0.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9ac0d0b3b485d293b8ca1987e6de8658d7dafcca1cddfcd1d506cae8cdebfdd6 |
|
MD5 | 24f4f9eec32d288fcaa631ca8c40496a |
|
BLAKE2b-256 | 9ba90da089c3ae7a31cbcd2dcf0214f6f571e1295d292b6139e2bac68ec081d0 |