Redis Primer(1)基於JedisPool的Redis hset併發效能測試

鍾超發表於2012-12-24

Redis Primer(1)基於JedisPool的Redis hset併發效能測試


  • Redis Server 與 Redis Client 位於同一臺機器(從而排除頻寬限制帶來的影響);
  • Redis Server 版本:2.6.7;
  • Redis Client API:Jedis 2.1.0,使用 JedisPool(依賴包使用 commons-pool-1.5.3.jar);

1. 測試一:單執行緒客戶端基於不同Key和Value長度

1.1. 測試內容
  • 不變數:
    • JedisPool 引數確定
      • minIdle = 0
      • maxIdle = 50
      • maxActive = 500
    • 測試 hset 操作
    • Field 長度為 32 bytes
  • 控制變數:
    • Key 長度;
    • Value 長度;
  • 測試內容:
    • 吞吐量(每秒訪問次數)
1.2. 測試結果

Key 長度從 1 到 256 逐次 2 倍遞增, Value 長度從 8 到 32768 逐次 4 倍遞增。

  • 以 Key 長度為 X 軸繪製測試結果:

Resize icon

  • 以 Value 長度為 X 軸繪製測試結果:

Resize icon

1.3. 結論

Throughput 隨 Key 長度變化不大(更大範圍內的 Key 長度沒有測試,因為一般情況下 Key 超過 256 位元組的情況較少,請本人使用方式也符合該範圍),但與 Value 長度相關性極大(範圍較大,因本人的應用場景中 Value 值較大)。

1.4. 建議
  • 減少每個查詢中的訪問次數(優化查詢,類似於 Database 中優化 SQL 語句);
  • 要儘可能的減小 Value。

測試二:單執行緒客戶端基於不同連線池引數

2.1. 測試內容
  • 不變數:
    • 測試 hset 操作
    • Key 長度為 32 bytes
    • Field 長度為 32 bytes
    • Value 長度為 256 bytes
  • 控制變數
    • maxIdle
    • maxActive
  • 測試內容
    • 吞吐量(每秒訪問次數)
2.2. 測試結果

maxActive 從 25 到 300 每次遞增 25, maxIdle 從 50 到 450 每次遞增 100。

  • 以 maxActive 長度為 X 軸繪製測試結果:

Resize icon

  • 以 maxIdle 長度為 X 軸繪製測試結果:

Resize icon

2.3. 結論

在目前的測試引數範圍內,差別不大,或許需要進一步測試。從該測試結果看 maxIdle=25 且 maxActive=250 的 JedisPool 設定能夠帶來最大的 hset(32bits, 32bits, 256bits) 吞吐量。

2.4. 建議
  • 採用 maxIdle=25 且 maxActive=250 的 JedisPool 設定。

測試三:多執行緒客戶端不同hset次數

3.1. 測試內容
  • 不變數:
    • 測試 hset 操作
    • Key 長度為 32 bytes
    • Field 長度為 32 btyes
    • Value 長度為 20480 bytes
  • 控制變數
    • hset 操作次數從 10000 到 1000000
  • 測試內容
    • 吞吐量(每秒訪問次數)
2.3. 測試結果

hset 操作次數從 10000 到 5120 500

Resize icon

2.4. 結論與建議
  • 用多執行緒的客戶端進行壓力測試;
  • Redis 的併發效能相當不錯,20KB 的資料(這已經相當大了)每秒可以寫入 60000 多次,平均每秒 1200 MB,9600 Mb,約 9.6 Gb。
  • 如果測試小資料,應該能達到 100,000/s 以上的併發量

-

轉載請註明來自(Poechant)的 CSDN 部落格:http://blog.csdn.net/poechant,作者微博:weibo.com/lauginhom

-

相關文章