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

Redis多List批量获取问题:Python Lrange无法识别通配符

解决Redis批量获取通配符匹配List数据的问题

你遇到的问题根源是:Lrange 仅支持操作单个具体的Redis Key,它不会将*解析为通配符,所以直接传入test-{id}-*作为参数,Redis会去找名字完全等于这个字符串的List,自然返回空值。

正确的处理流程应该分两步:先获取所有符合通配符模式的Key,再逐个遍历这些Key分批读取List内容。

关键注意点

别用KEYS命令获取匹配的Key:在Key数量较多时,KEYS会阻塞Redis服务,影响其他业务,推荐用SCAN命令迭代获取,它是渐进式的,不会阻塞服务。

代码示例

import redis

def get_all_list_data(conn, pattern, batch_size=1000):
    all_data = []
    # 用SCAN迭代获取所有匹配的Key
    cursor = 0
    while True:
        cursor, keys = conn.scan(cursor=cursor, match=pattern, count=100)
        for key in keys:
            # 遍历每个Key,分批读取List内容
            start = 0
            while True:
                batch = conn.lrange(key, start, start + batch_size - 1)
                if not batch:
                    break
                all_data.extend(batch)
                start += batch_size
        if cursor == 0:
            break
    return all_data

# 调用示例
conn = redis.Redis(host='your_host', port=6379, db=0)
target_id = "xxx"  # 替换为你的实际ID值
result = get_all_list_data(conn, f'test-{target_id}-*')

代码说明

  1. SCAN迭代获取Key:循环调用scan直到游标返回0(表示所有匹配Key已获取),count参数用于提示单次返回的Key数量(Redis会根据实际情况调整,并非严格遵循)。
  2. 分批读取单个List:对每个匹配到的Key,从start位置开始,用lrange每次取batch_size条数据,直到返回空列表(说明该List已读取完毕)。
  3. 汇总数据:将所有分批读取的数据存入统一列表,最后返回完整结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:25:37