redis學習記錄06 pipeline

2021-07-30 18:58:30 字數 1374 閱讀 7450

非pipleline模式:

request---->執行

---->response

request---->執行

---->response

pipeline模式下:

request---->執行,server將響應結果佇列化

request---->執行,server將響應結果佇列化

---->response

---->response

public

static

void

main(string args)

private

static

void

withoutpipeline()

jedis.quit();

}private

static

void

usepipeline()

pipline.syncandreturnall();

jedis.quit();

}

3831

50

當使用了大量命令一起操作的時候,引入pipeline 會使得 執行速度大量提高,類似關係型資料庫中的批處理.

pipeline在某些場景下非常有用,比如有多個command需要被「及時的」提交,而且他們對相應結果沒有互相依賴,而且對結果響應也無需立即獲得,那麼pipeline就可以充當這種「批處理」的工具;而且在一定程度上,可以較大的提公升效能,效能提公升的原因主要是tcp鏈結中較少了「互動往返」的時間。

不過在編碼時請注意,pipeline期間將「獨佔」鏈結,此期間將不能進行非「管道」型別的其他操作,直到pipeline關閉;比如在上述**中間,使用jedis.set(key,value)等操作都將丟擲異常。

如果你的pipeline的指令集很龐大,為了不干擾鏈結中的其他操作,你可以為pipeline操作新建client鏈結,讓pipeline和其他正常操作分離在2個client中。不過pipeline事實上所能容忍的操作個數,和socket-output緩衝區大小/返回結果的資料尺寸都有很大的關係;同時也意味著每個redis-server同時所能支撐的pipeline鏈結的個數,也是有限的,這將受限於server的物理記憶體或網路介面的緩衝能力。

pipeline和「事務」是兩個完全不同的概念,pipeline只是表達「互動」中操作的傳遞的方向性,pipeline也可以在事務中執行,也可以不在。無論如何,pipeline中傳送的每個command都會被server立即執行,如果執行失敗,將會在此後的相應中得到資訊;也就是pipeline並不是表達「所有command都一起成功」的語義;但是如果pipeline的操作被封裝在事務中,那麼將有事務來確保操作的成功與失敗

暑期學習記錄06

1.輸入資料 input raw input python2.7中,使用input 函式輸入字串要輸入引號 m input 請輸入金州小學生 請輸入金州小學生 stephen curry print m stephen curry 2.輸出資料 1.輸出字串 print 字串常量或字串變數 格式化引...

REDIS學習記錄

使用 redis 自己個人的理解 1.如果使用 key 查詢查詢範圍查詢條件,注意項應該有命中率的問題,就好像說資料分庫分表分割槽,避免全表掃類似。2.事務 2.1 關係型資料庫目的為也保證資料完事性,安全 2.2 redis目的為也進行redis語句的指化執行。命令 multi開戶事務,exec ...

Redis學習記錄

支援儲存的value型別包括 string 字串 list 鍊錶 set 集合 zset 有序集合 哈市 雜湊表 命令原型 set key value 描述 設定該key持有特定的字串value,如果該key已經存在,就覆蓋它。返回值 總是返回 ok get key 獲取指定key的value,如果...