python pipeline寫入redis


1.需求描述

在實際業務中,需要將百萬量級的數據導入到redis。而由於寫入程序和redis所在機房不同,導致每條記錄的寫入存在一定時延,被百萬次寫入放大后,竟然需要用3個小時才能完成全部寫入。

2.解決方法

為此,改用pipeline寫入redis。pipeline的作用,是能夠將多條命令集中起來,一次發送到redis服務端,從而減少網絡IO時延。

舉個例子,假設每條記錄的寫入(包括服務器的返回響應)網絡時延為20ms,則100萬條記錄的總時延可達5.5小時。但如果使用pipeline,每次寫入1萬條記錄、分100次寫入,則網絡時延僅為2秒。可以說,數據量越大,則采用pipeline的提速效果越是明顯。

3.示例如下:
from rediscluster import StrictRedisCluster

tag='xxx'
startup_nodes = [
    {"host": "xxx", "port": "6379"},
]
rs = StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True, skip_full_coverage_check=True)

cnt = 0
# 通過pipeline批量寫入redis
p=rs.pipeline()
for line in sys.stdin:
    line_split = line.strip().split('\t')
    rec_key = line_split[0]
    rec_value = line_split[1]
    p.hset(rec_key, tag, rec_value)
    cnt += 1
    if cnt%10000==0:
        p.execute()
p.execute()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM