為啥Redis使用pipelining會更快?
這是一個很考究細節(jié)的問題,大部分人都會說:因為減少了網(wǎng)絡開銷,那么,看如下例子:
import time
import redis
client = redis.Redis(decode_responses=True)
count = 10000
def no_pipelining():
for i in range(count):
client.set("test:nopp:{}".format(i), i, ex=100)
def with_pipelining():
pp = client.pipeline()
for i in range(count):
pp.set("test:withpp:{}".format(i), i, ex=100)
pp.execute()
if __name__ == "__main__":
start = time.time()
no_pipelining()
mid = time.time()
with_pipelining()
end = time.time()
print("no_pipelining: {} seconds; with_pipelining: {} seconds".format(mid - start, end - mid))
為什么執(zhí)行結果相差如此之大呢?
$ python test.py
no_pipelining: 2.3809118270874023 seconds; with_pipelining: 0.4370129108428955 seconds
因為這是連接本地的redis,所以網(wǎng)絡開銷非常小,當然,這里仍然有一部分是網(wǎng)絡開銷影響,可是除此之外是否還有其它影響因素呢? 答案是有,比如OS進程調(diào)度,當不使用管道時,Redis處理每個命令之間是有時間空隙的,因此OS很有可能會將Redis進程轉(zhuǎn)換為sleep狀態(tài), 然后運行其它程序,而使用pipelining時,可以提高CPU利用率,Redis空閑的時間沒有那么多,因此,這也是pipelining速度會更快的 重要原因之一。
ref:
https://redis.io/topics/pipelining
到此這篇關于為啥Redis使用pipelining會更快的文章就介紹到這了,更多相關Redis使用pipelining快內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Redis不是一直號稱單線程效率也很高嗎,為什么又采用多線程了?
- redis單線程快的原因和原理
- Redis為什么快如何實現(xiàn)高可用及持久化
- Redis憑啥可以這么快
- Redis高效率原因及數(shù)據(jù)結構分析