如何使用循环从aioredis中获取所有键与对应值?
解决aioredis遍历所有键值对的问题
问题分析
你写的代码存在三个核心问题:
- 异步操作未加
await:aioredis的set、get、scan_iter都是异步方法,必须通过await触发执行,否则代码不会实际调用Redis服务。 scan_iter返回值误解:scan_iter()是异步生成器,每次迭代仅返回单个键,无法直接解包为key, values的形式。- 语法错误:
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
相关产品推荐
相关产品推荐

