Redis 不同插入方法的效能對比

SihanLin發表於2023-09-20

1. 測試目的

對比 Redis 不同插入方法(插入同時能設定過期時間)的效能區別。

2. 測試資料

key:SMGP_

value:JSON資料

{
	"spName":"100003",
  	"protocol":"SMGP",
  	"remoteAddress":"192.192.192.192:44192",
  	"host":"192.192.192.192:44192",
  	"port":44192,
  	"msgIds":"192192192192192192192"
}

資料量:10萬

redis:採用藍鯨雲上的 redis,模擬真實生產環境的網路影響。

3. 待測試方法

單執行緒

  • 遍歷資料列表,單條插入
  • 使用管道分批插入,分為 3 批,每批 3萬,最後一批 4萬
  • 使用管道一次性插入 10 萬條

多執行緒

  • 10 個執行緒分批插入,每批 1萬條資料,遍歷資料列表,單條插入
  • 10 個執行緒分批插入,每批 1萬條資料,使用管道一次性插入 1 萬條

4. 測試結果

單執行緒

遍歷單條插入

  • 耗時:11.22698333 分鐘
  • JVM 堆記憶體使用情況:最高 572.2540665 MB

使用管道分批插入

  • 耗時:兩次平均 36.8785 秒
  • JVM 堆記憶體使用情況:兩次最高平均 614.52574155 MB

使用管道一次性插入

  • 耗時:兩次平均 34.2025 秒
  • JVM 堆記憶體使用情況:兩次最高平均 482.4296875 MB

多執行緒

遍歷單條插入

  • 耗時:兩次平均 114.9095 秒
  • JVM 堆記憶體使用情況:兩次最高平均 429.8007813 MB

管道一次性插入

  • 耗時:兩次平均 52.51 秒
  • JVM 堆記憶體使用情況:兩次最高平均 513 MB

5. 測試結果分析

  • 對於 redis 的寫入操作,應儘量避免遍歷單條插入,由於頻繁連線和釋放連線,效能太低。
  • 使用管道能顯著提高 redis 的寫入效能。
  • 使用多執行緒能顯著提高遍歷單條資料寫入 redis 的效能
  • 對於不同的插入方式,消耗的資源大小基本差不多。

6. 不足之處

  • 由於存在網路波動,不同方法測試時,網路差異較大,可能導致結果不太準確。因此對於細微的差別無法很好判斷,比如:單執行緒的管道和多執行緒的管道哪個效能更優?
  • 堆記憶體的消耗由於使用的 jconsole 進行監控的,憑肉眼觀察,不是很準確。

相關文章