You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

aioredis 2.0.0运行旧代码提示无create_redis属性如何解决

问题原因

你参考的是aioredis 1.x版本的旧用法,你当前安装的aioredis 2.0.0是大版本更新,做了大量不向下兼容的API改动:

  • 废弃了原来的create_redis初始化接口,改用aioredis.from_url等方法初始化客户端
  • pub/sub的实现逻辑完全重构,取消了原来的channel对象、wait_message、publish_json等专属方法
  • 底层API对齐了官方redis-py的接口风格,旧版本的示例代码完全无法直接在2.x上运行
解决方案

提供两种可选方案:

方案1:降级aioredis到1.x兼容旧代码

直接执行命令安装1.x的最终稳定版即可:

pip install aioredis==1.3.1

安装完成后你当前的代码无需任何修改即可正常运行。

方案2:修改代码适配aioredis 2.x版本

适配后的完整代码如下:

import asyncio
import aioredis
from aioredis.client import PubSub


async def reader(pubsub: PubSub):
    while True:
        msg = await pubsub.get_message(ignore_subscribe_messages=True)
        if msg is not None:
            print("Got Message:", msg["data"])


async def main():
    # 初始化客户端,无需await
    pub = aioredis.from_url('redis://:password@localhost:6379')
    sub = aioredis.from_url('redis://:password@localhost:6379')

    # 初始化pubsub对象并订阅频道
    pubsub = sub.pubsub()
    await pubsub.subscribe("chan:1")

    tsk = asyncio.ensure_future(reader(pubsub))
    # 发布消息,2.x没有publish_json,需要自行序列化json后传入
    await pub.publish("chan:1", '["Hello", "world"]')

    # 等待保证消息消费完成
    await asyncio.sleep(1)
    # 取消订阅、关闭任务和连接
    await pubsub.unsubscribe("chan:1")
    tsk.cancel()
    await pub.close()
    await sub.close()


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    result = loop.run_until_complete(main())

内容的提问来源于stack exchange,提问作者Saligia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:51:01