redis管道需要时间

cwtwac6a  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(340)

目前我正在使用下面的python代码将大量数据摄取到redis中。它能够每50秒插入10000条记录(这不是很快),但是如果我为两个不同的数据集并行运行这个函数,插入10000条记录几乎需要4分钟。
目前redis安装在服务器上,我正在本地机器上部署这个python脚本来执行这个脚本,因为在本地机器上执行这个脚本会比较慢,这意味着在服务器上部署这个脚本会提高速度。
另外,你能让我知道是加载数据到redis的方法是好的还是有更好的方法插入到redis巨大的数据。
在下面的函数中。批量大小配置为10000(即每10000条记录调用pipeline.execute)

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))
j0pj023g

j0pj023g1#

首先,
可以使用hmset(或hset)myhash field1“hello”field2“world”
一次插入多个键/值。所以不需要管道。
您需要检查网络i/o使用情况,我敢打赌,在redis示例的同一网络中的计算机上运行脚本会有所帮助(网络i/o是最常见的redis性能瓶颈)

相关问题