Python 如果并行调用,Redis管道需要时间

Python 如果并行调用,Redis管道需要时间,python,redis,Python,Redis,目前,我正在使用以下python代码将大量数据摄取到redis中。它可以插入10000个字符 每50秒记录数(这不是很快)。但如果我为两个不同的数据集并行运行此函数,插入10000条记录几乎需要4分钟 目前Redis安装在服务器上,我通过在本地机器上部署来执行此python脚本。从本地机器上执行此脚本的速度很慢,这意味着在服务器上部署将提高速度 另外,您能告诉我将数据加载到redis的方法是好的还是有更好的方法将大量数据插入redis 在下面的函数中。批量大小配置为10000(即每10000条记

目前,我正在使用以下python代码将大量数据摄取到redis中。它可以插入10000个字符 每50秒记录数(这不是很快)。但如果我为两个不同的数据集并行运行此函数,插入10000条记录几乎需要4分钟

目前Redis安装在服务器上,我通过在本地机器上部署来执行此python脚本。从本地机器上执行此脚本的速度很慢,这意味着在服务器上部署将提高速度

另外,您能告诉我将数据加载到redis的方法是好的还是有更好的方法将大量数据插入redis

在下面的函数中。批量大小配置为10000(即每10000条记录调用管道.execute)

def load_hashmap(数据、客户端、键列、批大小):
尝试:
管道=客户端.pipeline(事务=False)
n=0
对于数据中的行:
pipe.hmset(row.get(keycolumn),row)
n=n+1
如果len(数据)batchsize和(n%batchsize)!=0:
pipe.execute()
打印(“数据加载批处理--”+str(n)+“在”+str(datetime.now())完成”)
例外情况除外,如e:
引发异常(str(e))
首先

您可以使用HMSET(或HSET)myhash字段1“Hello”字段2“World”

一次插入多个键/值。所以不需要管道


您需要检查网络I/O使用情况,我敢打赌,在Redis实例的同一网络中的计算机上运行脚本会有所帮助。(网络I/O是redis性能最常见的瓶颈)

感谢您的投入
def load_hashmap(data, client, keycolumn, batchsize):
    try:
        pipe = client.pipeline(transaction=False)
        n = 0

        for row in data:
            pipe.hmset(row.get(keycolumn), row)
            n = n + 1

            if len(data) < batchsize and n == len(data):
                pipe.execute()
                print("Data Load Batch--" + str(n) + " completed at " + str(datetime.now()))

            if (n % batchsize) == 0:
                pipe.execute()
                print("Data Load Batch--" + str(n) + " completed at " + str(datetime.now()))
                pipe = client.pipeline()

        if len(data) > batchsize and (n % batchsize) != 0:
            pipe.execute()
            print("Data Load Batch--" + str(n) + " completed at " + str(datetime.now()))

    except Exception as e:
        raise Exception(str(e))