摘要:使用事務(wù)的其中一個好處就是底層的客戶端會通過使用流水線來提高事務(wù)執(zhí)行時的性能。使用非事務(wù)型流水線同樣可以獲得相似的性能提升,并且可以讓用戶同時執(zhí)行多個不同的命令。
使用事務(wù)的其中一個好處就是底層的客戶端會通過使用流水線來提高事務(wù)執(zhí)行時的性能。使用非事務(wù)型流水線(non-transactional pipeline)同樣可以獲得相似的性能提升,并且可以讓用戶同時執(zhí)行多個不同的命令。
MULTI和EXEC也會消耗資源,并且可能會導(dǎo)致其他重要的命令被延遲執(zhí)行。但也可以在不使用MULTI和EXEC的情況下,獲得流水線帶來的所有好處。
pipe = conn.pipeline()
在執(zhí)行pipeline()時傳入True作為參數(shù),或者不傳入任何參數(shù),那么客戶端將使用MULTI和EXEC包裹起用戶要執(zhí)行的所有命令。如果傳入False為參數(shù),那么客戶端同樣會像執(zhí)行事務(wù)那樣收集用戶要執(zhí)行的所有命令,只是不再使用MULTI和EXEC包裹這些命令。如果用戶需要向Redis發(fā)送多個命令,并且對于這些命令來說,一個命令的執(zhí)行結(jié)果并不會影響另一個命令的輸入,而且這些命令也不需要以事務(wù)的方式來執(zhí)行的話,那么我們可以通過向pipeline()方法傳入False來進一步提升Redis的整體性能。
下面是沒有使用非事務(wù)型流水線代碼:
def update_token(conn, token, user, item=None): timestamp = time.time() conn.hset("login:", token, user) conn.zadd("recent:", token, timestamp) if item: conn.zadd("viewed:" + token, item, timestamp) conn.zremrangebyrank("viewed:" + token, 0, -26) conn.zincrby("viewed:", item, -1)
使用非實物型流水線后:
def update_token_pipeline(conn, token, uesr, item=None) timestamp = time.time() pipe = conn.pipeline(False) pipe.hset("login:", token, user) pipe.zadd("recent:", token, timestamp) if itme: pipe.zadd("viewed:" + token, item, timestamp) pipe.zremrangebyrank("viewed:" + token, 0, -26) pipe.zincrby("viewed:", item, -1) pipe.execute()
根據(jù)測試,高延遲網(wǎng)絡(luò)使用流水線時的速度要比不使用流水線時的速度快5倍,低延遲網(wǎng)絡(luò)使用流水線也可以帶來接近4倍的速度提升,本地網(wǎng)絡(luò)的測試結(jié)果實際上已經(jīng)達到Python在單核環(huán)境使用redis協(xié)議發(fā)送和接收短命令序列的性能極限。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44554.html
摘要:上一篇文章實戰(zhàn)第四章數(shù)據(jù)安全與性能保障第節(jié)非事務(wù)型流水線下一篇文章實戰(zhàn)第五章使用構(gòu)建支持程序第節(jié)使用來記錄日志 上一篇文章:Python--Redis實戰(zhàn):第四章:數(shù)據(jù)安全與性能保障:第7節(jié):非事務(wù)型流水線下一篇文章:Python--Redis實戰(zhàn):第五章:使用Redis構(gòu)建支持程序:第1節(jié):使用Redis來記錄日志 習(xí)慣了關(guān)系數(shù)據(jù)庫的用戶在剛開始使用Redis的時候,通常會因為Re...
摘要:上一篇文章實戰(zhàn)第四章數(shù)據(jù)安全與性能保障第節(jié)處理系統(tǒng)故障下一篇文章實戰(zhàn)第四章數(shù)據(jù)安全與性能保障第節(jié)非事務(wù)型流水線為了確保數(shù)據(jù)的正確性,我們必須認(rèn)識到這一點在多個客戶端同時處理相同的數(shù)據(jù)時,不謹(jǐn)慎的操作很容易會導(dǎo)致數(shù)據(jù)出錯。 上一篇文章:Python--Redis實戰(zhàn):第四章:數(shù)據(jù)安全與性能保障:第5節(jié):處理系統(tǒng)故障下一篇文章:Python--Redis實戰(zhàn):第四章:數(shù)據(jù)安全與性能保障:第...
閱讀 2986·2023-04-26 02:29
閱讀 593·2019-08-30 15:54
閱讀 1673·2019-08-29 13:13
閱讀 609·2019-08-28 17:51
閱讀 2731·2019-08-26 13:58
閱讀 1543·2019-08-26 13:27
閱讀 2830·2019-08-26 11:39
閱讀 3454·2019-08-26 10:46