0
我正嘗試使用python客戶端清除在redis中實現的流水線概念。舉例如下:在redis中使用管道進行批量處理(python示例)
my_server = redis.Redis(connection_pool=POOL)
for obj_id in list_of_obj_ids:
hash_name="n:"+str(obj_id)
sorted_set = "s:"+str(obj_id)
if my_server.exists(hash_name):
my_server.hset(hash_name,'val',0)
if my_server.zcard(sorted_set):
my_server.zadd(sorted_set, hash_name, time.time())
即,我通過遍歷for循環更新多個散列。我如何通過流水線來完成這種批量更新?從我讀過的內容來看,下面是我的想法:
my_server = redis.Redis(connection_pool=POOL)
p = my_server.pipeline()
for obj_id in list_of_obj_ids:
hash_name="n:"+str(obj_id)
sorted_set="s:"+str(obj_id)
if p.exists(hash_name):
p.hset(hash_name,'val',0)
if p.zcard(sorted_set):
p.zadd(sorted_set, hash_name, time.time())
p.execute()
這是正確的嗎?
感謝您幫助Itamar。我讀過這部分(這就是我介紹如何引入redis管道)。但我還不清楚如何執行。在我的例子中,我在for循環之外的'p'上調用'execute'方法。這在我的腦海中是有道理的,因爲我認爲這樣一旦for循環完成,所有的命令都將被批量執行。 –
準確地說,這意味着調用'exists'和'zcard'只會在執行時發生,而不會出現在我看到的循環 –
中。在這種情況下,我應該在for循環中(最後)移動'p.execute()'。但是,這不會在循環內放置execute()方法,從而多次調用它?或者,你的意思是說,在for循環之外有'p.execute()'是我的例子中的正確方法嗎? –