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 進行監控的,憑肉眼觀察,不是很準確。