【Redis】pipeline管道打包處理模式

Redis自己是一個cs模式的tcp server, client能夠經過一個socket連續發起多個請求命令。 每一個請求命令發出後client一般會阻塞並等待redis服務端處理,redis服務端處理完後將結果返回給client。redis

因爲咱們知道Redis很是快,這種發送模式中的性能瓶頸其實在於請求傳輸速度,就算redis server端有很強的處理能力,也因爲收到的client消息少,而形成吞吐量小。咱們能夠修改一種處理模式:
經過pipeline方式將client端命令一塊兒發出,redis server會處理完多條命令後,將結果一塊兒打包返回client,從而節省大量的網絡延遲開銷。
下面以Java的客戶端jedis來測試pipeline的效果。網絡

Pipeline pipeline = jedis.pipelined();  
long start = System.currentTimeMillis();  
for (int i = 0; i < 10000; i++) {  
    pipeline.hset("server", "" + i, "" + i);  
}  
List<Object> results = pipeline.execute();  
long end = System.currentTimeMillis();  
System.out.println("Pipelined SET: " + ((end - start)/1000.0) + " seconds");

測試的結果採用pipeline方式,效率幾乎與mset同樣,每秒插入約15萬數據,但內存佔用僅爲mset的1/3.socket

相關文章
相關標籤/搜索