跳转到主要内容

asyncio (PEP 3156) Redis支持

项目描述

asyncio (PEP 3156) Redis客户端库。

https://github.com/evo-company/aioredis-py/actions/workflows/ci.yml/badge.svg?branch=1.x https://codecov.io/gh/evo-company/aioredis-py/branch/1.x/graph/badge.svg

功能

hiredis 解析器

纯Python解析器

低级 & 高级API

连接池

管道支持

发布/订阅支持

SSL/TLS支持

哨兵支持

Redis集群支持

进行中

Trollius (python 2.7)

测试的CPython版本

3.6, 3.7, 3.8, 3.9, 3.10 [1]

测试Redis服务器

2.6, 2.8, 3.0, 3.2, 4.0 5.0

通过低级API支持开发Redis服务器

文档

http://aioredis.readthedocs.io/

使用示例

具有连接池的简单高级接口

import asyncio
import aioredis

async def go():
    redis = await aioredis.create_redis_pool(
        'redis://localhost')
    await redis.set('my-key', 'value')
    val = await redis.get('my-key', encoding='utf-8')
    print(val)
    redis.close()
    await redis.wait_closed()

asyncio.run(go())
# will print 'value'

需求

基准测试

基准测试可以在以下位置找到: https://github.com/popravich/python-redis-benchmark

讨论列表

aio-libs google群组: https://groups.google.com/forum/#!forum/aio-libs

或gitter房间: https://gitter.im/aio-libs/Lobby

许可证

aioredis在MIT许可证下提供。

变更

1.3.4 (2022-02-02)

  • 修复async_timeout>=4.x的弃用警告;

1.3.3 (2022-01-31)

  • 添加Python 3.10支持;

1.3.2 (2022-01-28)

无更改,发布测试新名称的发布包。

1.3.1 (2019-12-02)

错误修复

  • 修复事务数据解码(见 #657);

  • 修复在 create_pool() 异常时对 pool.wait_closed() 的重复调用问题。(见 #671);

弃用和移除

  • 在API中取消对显式循环的要求。弃用 loop 参数。如果在Python 3.8+中将显式 loop 传递给方法,则抛出警告。(见 #666);

其他

1.3.0 (2019-09-24)

功能

  • 添加了 xdelxtrim 方法,这些方法在 commands/streams.py 中缺失,并为其添加了单元测试代码(见 #438);

  • count 参数添加到 spop 命令中(见 #485);

  • 添加了对 zpopmaxzpopmin Redis 命令的支持(见 #550);

  • 添加 towncrier:变更说明现在存储在 CHANGES.txt 中(见 #576);

  • 库的类型提示(见 #584);

  • 对有序集合命令的一些补充

    • 阻塞弹出命令: BZPOPMAXBZPOPMIN

    • 命令 ZADDCHINCR 选项

    (见 #618);

  • commands/streams.py 中的 xread_group 流方法中添加了 no_ack 参数(见 #625);

错误修复

  • 修复敏感日志问题(见 #459);

  • 修复 wait_closed 实现中的内存泄漏问题(见 #498);

  • 修复Redis返回空字段时的实例处理问题(见 #605);

改进文档

  • 重写“入门”文档。(见 #641);

其他

1.2.0 (2018-10-24)

NEW:

  • 实现了新的流命令支持(见 #299);

  • encode_command() 的成本降低约60%(见 #397);

FIX:

  • 修复了管道命令缓冲导致多次 sendto 系统调用的问题(见 #464#473);

  • 修复了Python 3.7兼容性问题(见 #426);

  • 修复了文档中的错别字(见 #400);

  • 修复了 INFO 命令结果解析问题(见 #405);

  • 修复了 ConnectionsPool._drop_closed 方法中的问题(见 #461);

MISC:

  • 更新依赖项版本;

  • 多次测试改进;

1.1.0 (2018-02-16)

NEW:

  • 实现新命令: waittouchswapdbunlink(见 #376);

  • async_op 参数添加到 flushallflushdb 命令中(见 #364#370);

FIX:

  • 重要!修复池 minsize 大于1时的Sentinel客户端(见 #380);

  • 修复 SentinelPool.discover_timeout 的使用(见 #379);

  • 修复断开连接时接收器挂起的问题(参见 #354#366);

  • 修复了空池中的 subscribe/psubscribe 的问题(参见 #351#355);

  • 修复了在调用 StreamReader 的 feed_data 之前设置解析器的问题(参见 #347);

MISC:

  • 更新依赖项版本;

  • 多个测试修复;

1.0.0 (2017-11-17)

NEW:

  • 重要! 停止支持 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);

FIX:

  • 修复 conn._reader_task 中的 CancelledError(参见 #301);

  • 修复使用 CancelledError 取消挂起命令,使用显式异常而不是调用 cancel() 方法(参见 #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);

MISC:

  • 多个测试修复;

  • 将PyPy3添加到构建矩阵中;

  • 更新依赖项版本;

  • 添加缺少的Python 3.6分类器;

0.3.5 (2017-11-08)

FIX:

  • 修复了与asyncio.CancelledError无法区分的未来取消问题(见#316),从master中挑选;

0.3.4 (2017-10-25)

FIX:

  • 修复了使用连接范围编码设置时时间命令结果解码问题(见#266);

0.3.3 (2017-06-30)

FIX:

  • 修复了修补后的asyncio.Lock中的关键漏洞(见#256);

0.3.2 (2017-06-21)

NEW:

  • 添加了zrevrangebylex命令(见#201),从master中挑选;

  • 添加了连接超时(见#221),从master中挑选;

FIX:

  • 修复了池关闭警告(见#239#236),从master中挑选;

  • 修复了asyncio Lock死锁问题(见#231#241);

0.3.1 (2017-05-09)

FIX:

  • 修复了pubsub Receiver缺少iter()方法(见#203);

0.3.0 (2017-01-11)

NEW:

  • Pub/Sub连接命令接受Channel实例(见#168);

  • 实现新的Pub/Sub MPSC(多生产者,单消费者)队列 – aioredis.pubsub.Receiver(见#176);

  • 添加aioredis.abc模块,提供定义基本库组件接口的抽象基类;(见#176);

  • 实现Geo命令支持(见#177#179);

FIX:

  • 一些小的测试修复;

MISC:

  • 更新示例和文档以使用async/await语法,同时保留yield from示例以供历史记录(见#173);

  • 重新整理Travis CI配置;添加Python 3.6部分(见#170);

  • 添加AppVeyor集成以在Windows上运行测试(见#180);

  • 更新多个开发需求;

0.2.9 (2016-10-24)

NEW:

  • 允许在EXISTS命令中使用多个键(见#156#157);

FIX:

  • 当连接Redis失败时关闭RedisPool(见#136);

  • 添加简单的INFO命令参数验证(见#140);

  • 移除无效的next()使用;

MISC:

  • 更新devel.rst文档;更新Pub/Sub Channel文档(交叉引用);

  • 更新MANIFEST.in以包括源包中的文档、示例和测试;

0.2.8 (2016-07-22)

NEW:

  • 添加hmset_dict命令(见#130);

  • 添加RedisConnection.address属性;

  • RedisPool的minsize/maxsize不能为None

  • 为池实现close()/wait_closed()/closed接口(见#128);

FIX:

  • hstrlen添加测试;

  • 测试修复;

MISC:

  • 在Travis上启用Redis 3.2.0;

  • 在构建文档时添加拼写检查(见#132);

  • 文档已更新;

0.2.7 (2016-05-27)

  • create_pool() 的 minsize 默认值已更改为 1;

  • 修复了 wait_closed 的取消问题(参见 #118);

  • 修复了 time() 转换为浮点数的问题(参见 #126);

  • 修复了 hmset() 方法,使其返回 bool 而不是 b'OK'(参见 #126);

  • 修复了 multi/exec + watch 的问题(修改后的 watch 变量导致 tr.execute() 失败)(参见 #121);

  • 用工具方法替换了 asyncio.Future 的使用(准备使用 Python 3.5.2 的 loop.create_future());

  • 测试从 unittest 切换到 pytest(参见 #126);

  • 文档更新;

0.2.6 (2016-03-30)

  • 修复了 Multi/Exec 事务取消问题(参见 #110#114);

  • 修复了 Pub/Sub 订阅并发问题(参见 #113#115);

  • 添加了 SSL/TLS 支持(参见 #116);

  • aioredis.ConnectionClosedError 也在 execute_pubsub 中抛出(参见 #108);

  • Redis.slaveof() 方法的签名已更改:现在要禁用复制,应调用 redis.slaveof(None) 而不是 redis.slaveof()

  • 添加了更多测试;

0.2.5 (2016-03-02)

  • 在连接关闭时关闭所有 Pub/Sub 通道(参见 #88);

  • aioredis.Channel 添加了 iter() 方法,允许使用它与 async for 一起使用(参见 #89);

  • 在文档中的内联代码示例使其可运行和可下载(参见 #92);

  • 将 Python 3.5 示例转换为使用 async/await 语法(参见 #93);

  • 修复了 Multi/Exec 以遵守编码参数(参见 #94#97);

  • create_connection 中添加了调试消息(参见 #90);

  • 用尊重 asyncio 版本的包装器替换了 asyncio.async 调用(参见 #101);

  • 为 TCP 套接字使用 NODELAY 选项(参见 #105);

  • 添加了新的 aioredis.ConnectionClosedError 异常。如果连接到 Redis 服务器丢失,则抛出(参见 #108#109);

  • 修复了 RedisPool,在释放时关闭和丢弃连接;

  • 修复了 aioredis.util.decode 以递归地解码列表响应;

  • 添加了更多示例并更新了文档;

  • 在 README 中添加了 Google 群组链接;

  • 在 LICENSE 和文档中更新年份;

0.2.4 (2015-10-13)

  • Python 3.5 支持;

    • 新扫描命令 API(iscanizscanihscan);

    • 使 Pool 可等待(允许 with await pool: ...async with pool.get() as conn: 结构);

  • 修复了从空闲池中丢弃已关闭连接的问题(参见 #83);

  • 更新了文档;

0.2.3 (2015-08-14)

  • Redis 集群支持工作正在进行中;

  • 修复了导致池大小超过最大值和 acquire 调用挂起的问题(参见 #71);

  • info 服务器命令结果解析实现;

  • 修复了 util 函数的行为(见 #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 命令现在返回布尔值而不是“OK”;

  • 测试更新;

0.2.1 (2015-07-06)

  • 添加了日志记录(aioredis.log 模块);

  • 修复了 pub/sub 中的 wait_message 问题(见 #66);

0.2.0 (2015-06-04)

  • 添加了 pub/sub 支持;

  • 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 的“黑客式”属性;

  • 添加了 Redis.multi_exec() 方法;

  • 实现了高级命令

    • 通用命令(测试);

    • 事务命令(API 稳定化)。

  • 向后不兼容

    • 以下排序集命令的 API 已更改

      zcountzrangebyscorezremrangebyscorezrevrangebyscore

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

0.1.3 (2014-08-08)

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

  • 几个修复;

  • 事务和命令接口的 WIP;

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

    • 哈希命令;

    • hyperloglog 命令;

    • 集合命令;

    • 脚本命令;

    • 字符串命令;

    • 列表命令;

0.1.2 (2014-07-31)

  • create_connectioncreate_poolcreate_redis 函数更新:db 和 password 参数变为关键字参数(见 #26);

  • 修复了事务处理(见 #32);

  • 响应解码(见 #16);

0.1.1 (2014-07-07)

  • 事务支持(在连接中,高级命令有一些问题);

  • 更新了文档和测试。

0.1.0 (2014-06-24)

  • 初始发布;

  • 实现了 RedisConnection;

  • 实现了 RedisPool;

  • RedisConnection 和 RedisPool 的文档;

  • 高阶 API 的 WIP。

项目详细信息


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源分布

evo-aioredis-1.3.4.tar.gz (131.5 kB 查看哈希值)

上传时间

构建分布

evo_aioredis-1.3.4-py3-none-any.whl (65.4 kB 查看哈希值)

上传于 Python 3

由以下机构支持