Redis Pipelining
可以實現請求/響應服務器,以便即使客戶端尚未讀取舊響應,它也能夠處理新請求。這樣就可以將多個命令發送到服務器而無需等待回復,最后只需一步即可讀取回復。
這被稱為流水線技術,並且是幾十年來廣泛使用的技術。例如,許多POP3協議實現已經支持此功能,大大加快了從服務器下載新電子郵件的過程。
Redis從很早就開始支持流水線操作,因此無論您運行什么版本,都可以使用Redis進行流水線操作
單條指令:
多條指令
流水線技術不僅僅是為了減少由於往返時間而導致的延遲成本的一種方式,它實際上大大提高了您在給定Redis服務器中每秒可執行的總操作量
原始:
def raw():
start = time.time()
for x in range(100):
redis.lpush("user:xx:message", 'message:%s'%x)
redis.rpush('user:yy:message','haha%s'%x)
end = time.time()
print('耗時%0.2fs' % (end - start)) #耗時8.35s
使用pipeline:
def PipeLine():
with redis.pipeline() as p:
start = time.time()
for x in range(100):
p.lpush("user:xx:message", 'message:%s' % x).rpush('user:yy:message','haha%s'%x)
end = time.time()
print('耗時%0.2fs' % (end - start)) #耗時 0.25s
建議:
1. 注意每次pipeline攜帶的數據量
2. pipeline每次只能作用在一個Redis節點上