為啥Redis使用pipelining會(huì)更快
為啥Redis使用pipelining會(huì)更快?
這是一個(gè)很考究細(xì)節(jié)的問(wèn)題,大部分人都會(huì)說(shuō):因?yàn)闇p少了網(wǎng)絡(luò)開(kāi)銷,那么,看如下例子:
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í)行結(jié)果相差如此之大呢?
$ python test.py no_pipelining: 2.3809118270874023 seconds; with_pipelining: 0.4370129108428955 seconds
因?yàn)檫@是連接本地的redis,所以網(wǎng)絡(luò)開(kāi)銷非常小,當(dāng)然,這里仍然有一部分是網(wǎng)絡(luò)開(kāi)銷影響,可是除此之外是否還有其它影響因素呢? 答案是有,比如OS進(jìn)程調(diào)度,當(dāng)不使用管道時(shí),Redis處理每個(gè)命令之間是有時(shí)間空隙的,因此OS很有可能會(huì)將Redis進(jìn)程轉(zhuǎn)換為sleep狀態(tài), 然后運(yùn)行其它程序,而使用pipelining時(shí),可以提高CPU利用率,Redis空閑的時(shí)間沒(méi)有那么多,因此,這也是pipelining速度會(huì)更快的 重要原因之一。
ref:
https://redis.io/topics/pipelining
到此這篇關(guān)于為啥Redis使用pipelining會(huì)更快的文章就介紹到這了,更多相關(guān)Redis使用pipelining快內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis?常見(jiàn)緩存問(wèn)題總結(jié)
這篇文章主要給大家總結(jié)了一些Redis?常見(jiàn)緩存問(wèn)題,并介紹了解決辦法,文中的圖文示例介紹的非常仔細(xì),感興趣的同學(xué)可以參考閱讀下2023-06-06Redis遍歷海量數(shù)據(jù)集的幾種實(shí)現(xiàn)方法
Redis作為一個(gè)高性能的鍵值存儲(chǔ)數(shù)據(jù)庫(kù),廣泛應(yīng)用于各種場(chǎng)景,包括緩存、消息隊(duì)列、排行榜,本文主要介紹了Redis遍歷海量數(shù)據(jù)集的幾種實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02redis延時(shí)隊(duì)列zset實(shí)現(xiàn)的示例
延時(shí)隊(duì)列是一種常用的設(shè)計(jì)模式,用于處理那些需要在未來(lái)某個(gè)時(shí)間點(diǎn)執(zhí)行的任務(wù),本文主要介紹了redis延時(shí)隊(duì)列zset實(shí)現(xiàn)的示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08如何使用gradle將java項(xiàng)目推送至maven中央倉(cāng)庫(kù)
本文主要介紹了使用gradle將java項(xiàng)目推送至maven中央倉(cāng)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Redis偶發(fā)連接失敗案例實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于Redis偶發(fā)連接失敗的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使Redis具有一定的參考學(xué)習(xí)價(jià)值,用需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10Windows系統(tǒng)安裝redis數(shù)據(jù)庫(kù)
這篇文章介紹了Windows系統(tǒng)安裝redis數(shù)據(jù)庫(kù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03通過(guò)redis的腳本lua如何實(shí)現(xiàn)搶紅包功能
這篇文章主要給大家介紹了關(guān)于通過(guò)redis的腳本lua如何實(shí)現(xiàn)搶紅包功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05詳解Redis如何優(yōu)雅地實(shí)現(xiàn)接口防刷
這篇文章主要為大家詳細(xì)介紹了Redis優(yōu)雅地實(shí)現(xiàn)接口防刷的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03