Redis測試_推薦pipeline

測試環境 
Redis測試版本:2.2.12 
使用Java Jedis客戶端進行測試 
測試數據量:50萬, 超過2億 

速度 
1) mset函數插入效率最高,插入Redis的速度達到20萬條數據/秒。但是該函數所耗內存較高,對於我們實際應用一表每天2.4億的數據量來說,需要消耗近32G內存; 
2) mset函數中當m值達到200以上時,插入速度接近飽和,因此實際應用中,應設定該值 >= 200,以達到最高的插入效率; 
3) set函數除非特定應用場景需求,否則應儘量不要使用,其插入效率爲mset函數的1/20; 
4) 儘管不同的函數都有string與byte[]兩種不同的形式,但是對於Redis來說byte[]的形式也是將每個byte看成是一個字符來進行處理的。在實際應用中,對於較長的整型數據(例如:9824224123),可以將其轉換爲byte[]的形式,4個byte[]可以存儲一個int數據,這樣會比採用string的形式存儲節省一部分的內存開銷; 
5) hset函數插入效率與set函數相當; 
6) hmset由於在實際應用中,每條數據對應的key不相同,需要維護一個本機的緩存容器Map<key,Map<field, value>>,因此插入速度要比mset函數慢一些; 

內存 
1) hset和 hmset函數大約可以比set和mset函數節省三分之一的內存; 
2) hset和hmset函數對於每個key所存儲的<field, value>數目非常敏感。一旦超過限制,插入效率下降十分明顯,同樣,內存開銷也會顯著增加。在實際應用中,應儘量保證每個key下面的<field, value>的數目不超過限制(默認值爲64)。 

Pipeline 
redis的pipeline(管道)功能在命令行中沒有,但redis是支持pipeline的,而且在各個語言版的client中都有相應的實現。 
Redis本身是一個cs模式的tcp server, client可以通過一個socket連續發起多個請求命令。 每個請求命令發出後client通常會阻塞並等待redis服務端處理,redis服務端處理完後將結果返回給client。 
Java代碼  收藏代碼
  1. Client: hset a1 field value  
  2. Server: 1  
  3. Client: hset a2 field value  
  4. Server: 1  
  5. Client: hset a3 field value  
  6. Server: 1  
  7. Client: hset a4 field value  
  8. Server: 1  

這種發送模式中由於網絡開銷延遲,即算redis server端有很強的處理能力,也由於收到的client消息少,而造成吞吐量小。我們可以修改一種處理模式, 
Java代碼  收藏代碼
  1. Client: hset a1 field value  
  2. Client: hset a2 field value  
  3. Client: hset a3 field value  
  4. Client: hset a4 field value  
  5. Server: 1  
  6. Server: 1  
  7. Server: 1  
  8. Server: 1  

通過pipeline方式將client端命令一起發出,redis server會處理完多條命令後,將結果一起打包返回client,從而節省大量的網絡延遲開銷。 
下面以Java的客戶端jedis來測試pipeline的效果。 
Java代碼  收藏代碼
  1. Pipeline pipeline = jedis.pipelined();  
  2. long start = System.currentTimeMillis();  
  3. for (int i = 0; i < 10000; i++) {  
  4.     pipeline.hset("server""" + i, "" + i);  
  5. }  
  6. List<Object> results = pipeline.execute();  
  7. long end = System.currentTimeMillis();  
  8. System.out.println("Pipelined SET: " + ((end - start)/1000.0) + " seconds");  

測試的結果採用pipeline方式,效率幾乎與mset一樣,每秒插入約15萬數據,但內存佔用僅爲mset的1/3. 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章