7 Redis的管道技術

2022-07-03 21:00:15 字數 1823 閱讀 9861

管道技術(pipeline)是客戶端提供的一種批處理技術,用於一次處理多個redis,從而提高整個互動的效能。

通常情況下redis是單執行緒執行的,客戶端先向伺服器傳送請求,服務端接收並處理請求、然後把結果返回給客戶端,這種處理模式在非頻繁請求時不會出現任何問題。

但如果出現集中大批量請求時,因為每個請求都要經歷先請求再響應的過程,這就會造成網路資源浪費。此時就需要管道技術來把所有的命令整合起來,一次性傳送給服務端,服務端處理完畢之後一次性響應給客戶端,這樣就大大地提高了redis的響應速度。

普通命令模式和管道模式的區別,如下圖所示:

管道中命令越多,管道技術的作用就更大,相比於普通模式來說執行效率就越高。

管道技術解決了什麼問題?管道技術解決了多個命令集中請求時造成網路資源浪費的問題,加快了 redis 的響應速度,讓 redis 擁有更高的執行速度。但要注意的一點是,管道技術本質上是客戶端提供的功能,而非 redis 伺服器端的功能。管道技術使用我們使用python提供的redis模組來實現管道操作,我們之前說的事務在python中也是通過管道實現的。

import time

import redis

client = redis.redis(host="47.94.174.89", decode_responses="utf-8")

# 生成一千個鍵值對,以列表的形式儲存,[(0, 0), (1, 1), ..., (1000, 1000)]

k_v = list(zip(range(1000), range(1000)))

start = time.perf_counter()

for _ in k_v:

client.set(_[0], _[1])

print(f"不通過管道, 耗時: ")

# 刪除設定的key

client.delete(*range(1000))

# 通過管道

start = time.perf_counter()

pipeline = client.pipeline()

for _ in k_v:

pipeline.set(_[0], _[1])

pipeline.execute() # 提交

print(f"通過管道, 耗時: ")

"""不通過管道, 耗時: 7.9951645

通過管道, 耗時: 0.021514000000001587

"""

從上面的結果可以看出,管道技術要比普通的執行快了 371.6 倍,當然這裡的命令比較單一,不同的命令得到的速度上的差異會有不同。但是很明顯,管道技術確實要比普通的命令執行快上很多很多。管道技術需要注意的事項管道技術雖然有它的優勢,但在使用時還需注意以下幾個細節:總結

使用管道技術可以解決多個命令執行時的網路等待,它是把多個命令整合到一起傳送給伺服器端處理之後統一返回給客戶端,這樣就免去了每條命令執行後都要等待的情況,從而有效地提高了程式的執行效率,但使用管道技術也要注意避免傳送的命令過大,或管道內的資料太多而導致的網路阻塞。

7 redis集合相關

redis的set是string型別的無序集合。集合成員是唯一的,這就意味著集合中不能出現重複的資料。redis 中 集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是o 1 無序,無法通過索引下表取出集合中的元素 無重複集合間的操作 api含義 sadd key element 向集合key...

Redis 管道技術 Pipeline

管道技術 pipeline 是客戶端提供的一種批處理技術,用於一次處理多個 redis 命令,從而提高整個互動的效能。通常情況下 redis 是單行執行的,客戶端先向伺服器傳送請求,服務端接收並處理請求後再把結果返回給客戶端,這種處理模式在非頻繁請求時不會有任何問題。但如果出現集中大批量的請求時,因...

redis必殺高階 管道技術

客戶端向服務端傳送乙個查詢請求,並監聽socket返回,通常是以阻塞模式,等待服務端響應。服務端處理命令,並將結果返回給客戶端。redis 管道技術 redis 管道技術可以在服務端未響應時,客戶端可以繼續向服務端傳送請求,並最終一次性讀取所有服務端的響應。例項 檢視 redis 管道,只需要啟動 ...