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

如何使用循环从aioredis中获取所有键与对应值?

解决aioredis遍历所有键值对的问题

问题分析

你写的代码存在三个核心问题:

  1. 异步操作未加await:aioredis的set、get、scan_iter都是异步方法,必须通过await触发执行,否则代码不会实际调用Redis服务。
  2. scan_iter返回值误解:scan_iter()是异步生成器,每次迭代仅返回单个键,无法直接解包为key, values的形式。
  3. 语法错误:redis.set('key1', 'value1)语句末尾缺少闭合的单引号,会导致语法报错。

正确实现代码

第一步:修正基础键值操作(添加await+修复语法)

import aioredis

async def main():
    # 初始化Redis客户端
    redis = aioredis.from_url(url='redis://some_url', decode_responses=True)
    
    # 修正异步操作,添加await,同时修复引号语法错误
    await redis.set('key', 'value')
    await redis.set('key1', 'value1')
    result = await redis.get('key')
    print(result)  # 输出: value

第二步:遍历所有键值对

方式1:逐个获取值(适合键数量不多的场景)

async def main():
    redis = aioredis.from_url(url='redis://some_url', decode_responses=True)
    
    # 使用async for遍历异步生成器scan_iter()
    async for key in redis.scan_iter():
        value = await redis.get(key)
        print(key, value)

方式2:批量获取值(适合键数量较多的场景,减少IO次数)

async def main():
    redis = aioredis.from_url(url='redis://some_url', decode_responses=True)
    
    # 先收集所有键
    keys = []
    async for key in redis.scan_iter():
        keys.append(key)
    
    # 批量获取值
    values = await redis.mget(keys)
    
    # 遍历键值对
    for key, value in zip(keys, values):
        print(key, value)

关键注意事项

  • 所有涉及Redis IO的操作(set/get/scan_iter等)必须在异步函数中执行,且前面加上await关键字。
  • scan_iter()默认会遍历Redis中所有键,若需要匹配特定前缀的键,可以传入参数,比如redis.scan_iter(match='prefix_*')。
  • 确保Redis服务正常运行,且初始化时的URL地址正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:01:25