大多數情況下,我們都會通過請求-相應機制去操作redis。只用這種模式的一般的步驟是,先獲得jedis例項,然後通過jedis的get/put方法與redis互動。由於redis是單執行緒的,下一次請求必須等待上一次請求執行完成後才能繼續執行。然而使用pipeline模式,客戶端可以一次性的傳送多個命令,無需等待服務端返回。這樣就大大的減少了網路往返時間,提高了系統效能。
下面用乙個例子測試這兩種模式在效率上的差別:
public
class
piplinetest
public
static
void
usepipeline()
pipeline.sync();
jedis.close();
system.out.println(
"usepipeline total time:"
+ (system.currenttimemillis() - begin));
}
public
static
void
usenormal()
jedis.close();
system.out.println(
"usenormal total time:"
+ (system.currenttimemillis() - begin));
}
public
static
shardedjedis getshardedjedis()
}
輸出結果:
usenormal total time:
772
usepipeline total time:
112
從測試的結果可以看出,使用pipeline的效率要遠高於普通的訪問方式。
那麼問題來了,在什麼樣的情景下適合使用pipeline呢?
有些系統可能對可靠性要求很高,每次操作都需要立馬知道這次操作是否成功,是否資料已經寫進redis了,那這種場景就不適合。
還有的系統,可能是批量的將資料寫入redis,允許一定比例的寫入失敗,那麼這種場景就可以使用了,比如10000條一下進入redis,可能失敗了2條無所謂,後期有補償機制就行了,比如簡訊**這種場景,如果一下**10000條,按照第一種模式去實現,那這個請求過來,要很久才能給客戶端響應,這個延遲就太長了,如果客戶端請求設定了超時時間5秒,那肯定就丟擲異常了,而且本身**簡訊要求實時性也沒那麼高,這時候用pipeline最好了。
Redis中的批量操作Pipeline
大多數情況下,我們都會通過請求 相應機制去操作redis。只用這種模式的一般的步驟是,先獲得jedis例項,然後通過jedis的get put方法與redis互動。由於redis是單執行緒的,下一次請求必須等待上一次請求執行完成後才能繼續執行。然而使用pipeline模式,客戶端可以一次性的傳送多個...
Redis中的批量操作Pipeline
使用正常和pipeline的簡單對比 public class piplinetest public static void usepipeline pipeline.sync jedis.close system.out.println usepipeline total time system....
Redis中的批量操作Pipeline
大多數情況下,我們都會通過請求 相應機制去操作redis。只用這種模式的一般的步驟是,先獲得jedis例項,然後通過jedis的get put方法與redis互動。由於redis是單執行緒的,下一次請求必須等待上一次請求執行完成後才能繼續執行。然而使用pipeline模式,客戶端可以一次性的傳送多個...