前幾天,點開自己的博客,看了一下 CYQ.Data V5系列 都有哪些文章,發現了一篇2019年寫的:CYQ.Data 對於分散式緩存Redis、MemCache高可用的改進及性能測試,於是點進去看了看。感覺文章中有些表述存有問題,,不過不是重點。 重點,看了裡面的測試結論,如果四五年過去了,CYQ... ...
前言:
前幾天,點開自己的博客,看了一下 CYQ.Data V5系列 都有哪些文章,
發現了一篇2019年寫的:CYQ.Data 對於分散式緩存Redis、MemCache高可用的改進及性能測試,於是點進去看了看。
感覺文章中有些表述存有問題,不過不是重點。
重點,看了裡面的測試結論,如果四五年過去了,CYQ.Data 低調的更新,有沒有進步呢?
為了和之前的版本進行對比,好在當年有留下代碼,就直接拿當年的代碼來測試一下。
下麵就來重新看一下新的測試結果:
測試環境:
本次測試為.Net Windown 版本,下次再測試.Net Core Linux 版本。
Win11 系統:6核16G記憶體
Redis 版本:redis_version:3.2.100
由於單機測試,受運行程式和Redis自身程式等多綜合環境影響,測試結果僅供參考,用娛樂的心態看看即可。
測試代碼:
見上一篇文章的測試代碼:點擊下載
CYQ.Data Redis 測試結果:
使用 CYQ.Data 當前最新版本:V5.9.2.7
VS2022 中直接運行 Release 版本:
直接運行編繹的exe程式結果:
StackExchange.Redis 測試結果:
使用 StackExchange.Redis 當前最新版本:V2.7.27
考慮到 StackExchange.Redis 預設是單線程,因此提前設置最低線程池,不然會拋異常。
ThreadPool.SetMinThreads(128, 128);
VS2022 中直接運行 Release 版本:
運行編繹後程式 exe 結果:
redis-benchmark.exe 測試結果:
運行結果1:
運行結果2:
運行結果3:
運行結果4:
總結:
具體的性能指標,應該結合自身業務和生產環境,測試出適合自身要求的指標。
下麵就來看看總結詞吧:
1、Redis 自帶測試工具
單線程時,能跑到2w/s,為啥6核下,最高也是6w/s出頭,而不是2W*6=12W呢?
Redis 是一個單線程的記憶體資料庫,它的性能受限於單個 CPU 核心的處理能力。即使在多核處理器上運行 Redis,它也只能利用其中一個核心進行處理,所以無法直接通過簡單地將單核性能乘以核心數來計算多核性能。
在一個六核處理器上運行 Redis,雖然有多個核心可供利用,但 Redis 本身仍然是單線程的,因此最高的吞吐量受限於單個核心的性能。雖然可以同時處理多個請求,但每個請求仍然只能在一個核心上依次執行,不能完全實現性能的線性增長。
此外,Redis 在處理請求時還會涉及到鎖競爭、線程切換等開銷,這些因素也會限制其在多核處理器上的性能表現。因此,儘管在多核處理器上運行 Redis 會比單核處理器有一定的性能提升,但不會達到簡單地將單核性能乘以核心數的增長幅度。
2、StackExchange.Redis 測試結果總結:
在VS2002中啟動運行時,單線程時,性能特別低,只有4000/s上下,這不禁讓我想起上一份測試的結果,是不是也是受這種運行模式影響。
在直接運行exe程式,單線程時,在1W/s左右,8線程下到5.2w/s出頭。
16線程之後,突飛猛進了,突破 Redis自身極限,達到10-20w/s ?
聽說StackExchange.Redis 從2.X 版本後,重構了代碼,在資源管夠的情況下,將代碼從單條提交串列轉批量提交,因此就有了這種測試結果。
3、CYQ.Data Redis 測試結果總結:
在VS中啟動運行,和直接運行啟動,兩者性能相差不大。
單線程時,在1.5w/s左右,多線程下到5.2w/s,效果基本穩定在5w/s上下。
整體 CYQ.Data Redis 表現是不錯的,常規調用性能比 StackExchange.Redis 高一些(去掉它雞賊的批量方式)。
目前 CYQ.Data 未提供批量方法調用,後續會考量,是否引入這種自動批量處理方式,或提供批量調用入口。
目前機制下,可以通過增加 Redis 服務數量來提升併發性能。
版權聲明:本文原創發表於 博客園,作者為 路過秋天 本文歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則視為侵權。 |
個人微信公眾號 |
創業QQ群:617713515 |
Donation(掃碼支持作者):支付寶: |
Donation(掃碼支持作者):微信: |
騰訊雲產品福利專區 |