aioredis 1.3.1调用pubsub报错'Redis'对象无该属性如何解决
报错原因
你参考的是aioredis 2.x版本的官方文档写法,但本地安装的是1.3.1旧版本,两个大版本的API设计差异极大:1.x版本的Redis实例没有pubsub()方法,直接调用2.x版本的专属API自然会抛出属性不存在的错误。
解决方案
你可以选择两种适配方案,按需选择即可:
- 方案1:保留现有1.3.1版本,调整代码适配旧版API
1.x版本不需要单独创建pubsub实例,直接调用Redis实例的subscribe方法即可获取订阅频道对象,参考写法如下:redis = await aioredis.create_redis(url, encoding="utf-8") # 直接订阅频道,返回值为订阅的频道对象列表 channel_list = await redis.subscribe(channel) target_channel = channel_list[0] # 监听消息示例 while await target_channel.wait_message(): msg = await target_channel.get(encoding="utf-8") # 处理收到的消息 print(msg) - 方案2:升级aioredis到2.x版本,沿用原有代码逻辑
首先执行升级命令更新依赖版本:
升级完成后仅需要调整Redis连接初始化的写法,原有pubsub相关逻辑可以直接复用,参考写法如下:pip install --upgrade aioredis# 2.x版本不再使用create_redis方法,改为from_url初始化 redis = aioredis.from_url(url, encoding="utf-8") # 原有pubsub逻辑保持不变 sub = redis.pubsub() await sub.subscribe(channel)
内容的提问来源于stack exchange,提问作者RobBlanchard
相关产品推荐
相关产品推荐

