redis默認(rèn)在執(zhí)行每次請求都會創(chuàng)建(連接池申請連接)和斷開(歸還連接池)一次連接操作,
如果想要在一次請求中指定多個命令,則可以使用pipline實現(xiàn)一次請求指定多個命令,并且默認(rèn)情況下一次pipline 是原子性操作。
管道(pipeline)是redis在提供單個請求中緩沖多條服務(wù)器命令的基類的子類。它通過減少服務(wù)器-客戶端之間反復(fù)的TCP數(shù)據(jù)庫包,從而大大提高了執(zhí)行批量命令的功能。
import redis
import time
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
# pipe = r.pipeline(transaction=False) # 默認(rèn)的情況下,管道里執(zhí)行的命令可以保證執(zhí)行的原子性,執(zhí)行pipe = r.pipeline(transaction=False)可以禁用這一特性。
# pipe = r.pipeline(transaction=True)
pipe = r.pipeline() # 創(chuàng)建一個管道
pipe.set('name', 'jack')
pipe.set('role', 'sb')
pipe.sadd('faz', 'baz')
pipe.incr('num') # 如果num不存在則vaule為1,如果存在,則value自增1
pipe.execute()
print(r.get("name"))
print(r.get("role"))
print(r.get("num"))
管道的命令可以寫在一起,如:
pipe.set('hello', 'redis').sadd('faz', 'baz').incr('num').execute()
print(r.get("name"))
print(r.get("role"))
print(r.get("num"))