日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python redis pipeline使用方法_Redis中的管道Pipeline操作

發布時間:2025/3/15 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python redis pipeline使用方法_Redis中的管道Pipeline操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍色字體,選擇“設為星標”

回復”資源“獲取更多資源

點擊右側關注,大數據開發領域最強公眾號!

點擊右側關注,暴走大數據!

Redis默認每次執行請求都會創建和斷開一次連接池的操作,如果想執行多條命令的時候會在這件事情上消耗過多的時間,因此我們可以使用Redis的管道來一次性發送多條命令并返回多個結果,節約發送命令和創建連接的時間提升效率。

介紹

在前面我們介紹過Redis的事務和lua腳本操作,事實上在各語言版本的Redis中都有管道(Pipeline)的功能,本篇以python版作為示例,當我們使用python給redis發送命令時會經歷下面的步驟:

客戶端發送請求,獲取socket,阻塞等待返回;

服務端執行命令并將結果返回給客戶端;

而當執行的命令較多時,這樣的一來一回的網絡傳輸所消耗的時間被稱為RTT(Round Trip Time),顯而易見,如果可以將這些命令作為一個請求一次性發送給服務端,并一次性將結果返回客戶端,會節約很多網絡傳輸的消耗,可以大大提升響應時間。

官網:https://redis.io/topics/pipelining

逐個命令請求:

管道請求:

使用

管道的使用很簡單,python版代碼如下,在管道中可以選擇是否開啟事務,默認是開啟的,這里的事務與Redis的事務一樣為弱事務性不是真正的事務:

import redis#創建連接池獲取連接pool = redis.ConnectionPool(host='wykd', port=6379,password='123456', decode_responses=True)rp1 = redis.Redis(connection_pool=pool)#創建管道,可以選擇開啟或關閉事務,這里的事務與Redis事務一樣是弱事務型pipe = rp1.pipeline(transaction=True)#在管道中添加命令pipe.set('new','123')pipe.set('name', 'wyk2')pipe.set('company', 'csdn2')pipe.hincrby('hage','wyk',1)#這個命令會報錯,因為hage為hash類型不能使用get命令,此時無論開啟關閉事務,管道中的其他命令也依然會正常執行#pipe.get('hage')#也可以用下面的語法將多個命令拼接到一起# pipe.set('name', 'wyk').set('company', 'csdn').hset('hage', 'wyk',28).hincrby('hage','wyk',1)#執行pipeline里的腳本pipe.execute()

當管道中有命令報錯時,無論管道是否開啟事務都不會影響其他腳本的執行:

在管道中可以一次性獲取多個命令的返回值,以列表形式:

pipe.get('name').get('company').hget('hage', 'wyk')res = pipe.execute()print(res)

對比Lua腳本

Redis的Script會當成一個命令,具有原子性,在執行Script的時候不會被其他的命令插入,因此更適合于處理事務;而管道雖然也會將多個命令一次性傳輸到服務端,但在服務端執行的時候仍然是多個命令,如在執行CMD1的時候,外部另一個客戶端提交了CMD9,會先執行完CMD9再執行管道中的CMD2,因此事實上管道是不具有原子性的。

就場景上來說,正因為Lua腳本會被視為一個命令去執行,因為Redis是單線程執行命令的,所以我們不能在lua腳本里寫過于復雜的邏輯,否則會造成阻塞,因此lua腳本適合于相對簡單的事務場景。

而管道因為不具有原子性,因此管道不適合處理事務,但管道可以減少多個命令執行時的網絡消耗,可以提高程序的響應速度,因此管道更適合于管道中的命令互相沒有關系,不需要有事務的原子性,且需要提高程序響應速度的場景。

尾巴

管道可以提升我們程序中的響應時間,同時我們不能完全依賴于它的"事務"機制,只需要把管道當做"批處理"工具即可,在某些場合下,更需要結合管道和lua腳本一起使用。

歡迎點贊+收藏+轉發朋友圈素質三連

文章不錯?點個【在看】吧!👇

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的python redis pipeline使用方法_Redis中的管道Pipeline操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。