跳转到主要内容

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

贡献

如果您发现任何错误或有关于改进库的建议,请随时提交问题或创建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中的xdelxtrim方法,并为其添加了单元测试代码
    (参见#438)
  • count参数添加到spop命令
    (参见#485)
  • 添加对zpopmaxzpopmin Redis命令的支持
    (参见#550)
  • 添加towncrier:现在将更改记录存储在CHANGES.txt
    (参见#576)
  • 库的类型提示
    (参见#584)
  • 对排序命令的一些添加
  • 阻塞弹出命令:BZPOPMAXBZPOPMIN
  • ZADD命令的CHINCR选项
    (参见#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)

功能

  • 实现新命令:waittouchswapdbunlink
    (参见#376)
  • async_op参数添加到flushallflushdb命令
    (参见#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)

  • 添加 commandcommand_countcommand_getkeyscommand_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_rediscreate_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已更改

      zcountzrangebyscorezremrangebyscorezrevrangebyscore

    • 集合字符串命令的API已更改

0.1.3 (2014-08-08)

  • RedisConnection.execute已重构以支持命令管道化
    (参见 #33)

  • 几个修复

  • 事务和命令接口的工作正在进行中

  • 实现了并测试了高级命令

    • 哈希命令
    • HyperLogLog命令
    • 集合命令
    • 脚本命令
    • 字符串命令
    • 列表命令

0.1.2 (2014-07-31)

  • 更新了create_connectioncreate_poolcreate_redis函数:dbpassword参数变为关键字参数
    (参见 #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 (111.0 kB 查看哈希值)

上传时间 源代码

构建分发版

aioredis-2.0.1-py3-none-any.whl (71.2 kB 查看哈希值)

上传时间 Python 3

由以下机构支持