redis本身設計為單線程服務器,性能本身並不隨着多核而提高,但是會隨着cpu本身而改變,AMD的可能只有Intel一半的性能,Intel是最好的選擇。
性能會隨着連接數的增多而下降,30000大概只有100的一半的性能。
https://redis.io/topics/benchmarks
redis官網測試2.6時使用的命令:
該測試由50個同時進行200萬次請求的客戶端完成。
Redis 2.6.14用於所有測試。
使用環回接口執行測試。
使用100萬個密鑰的密鑰空間執行測試。
使用和不使用流水線執行測試(16條命令管道)。
./redis-benchmark -r 1000000 -n 2000000 -t get,set,lpush,lpop -P 16 -q
Intel(R) Xeon(R) CPU E5520 @ 2.27GHz (with pipelining)
$ ./redis-benchmark -r 1000000 -n 2000000 -t get,set,lpush,lpop -P 16 -q
SET: 552028.75 requests per second
GET: 707463.75 requests per second
LPUSH: 767459.75 requests per second
LPOP: 770119.38 requests per second
Intel(R) Xeon(R) CPU E5520 @ 2.27GHz (without pipelining)
$ ./redis-benchmark -r 1000000 -n 2000000 -t get,set,lpush,lpop -q
SET: 122556.53 requests per second
GET: 123601.76 requests per second
LPUSH: 136752.14 requests per second
LPOP: 132424.03 requests per second
Linode 2048 instance (with pipelining)
$ ./redis-benchmark -r 1000000 -n 2000000 -t get,set,lpush,lpop -q -P 16
SET: 195503.42 requests per second
GET: 250187.64 requests per second
LPUSH: 230547.55 requests per second
LPOP: 250815.16 requests per second
Linode 2048 instance (without pipelining)
$ ./redis-benchmark -r 1000000 -n 2000000 -t get,set,lpush,lpop -q
SET: 35001.75 requests per second
GET: 37481.26 requests per second
LPUSH: 36968.58 requests per second
LPOP: 35186.49 requests per second
以上的測試方法來自於redis的官方文檔。但是這種測試方法實際上測試出來的結果並未考慮到生產環境的網絡條件。當我們使用兩個機器,一個作為壓力源,另一個作為被測試機的時候,性能會出現較大的損失。同時,列出阿里雲提供的redis實例測試方法供參考。
創建三台壓力源服務器(對應阿里的ECS服務器),創建被測試的redis實例。
在三台機器上同時執行以下命令:
root@redis-test:/# redis-benchmark -h 192.168.111.106 -p 6379 -t set -c 50 -d 128 -n 25000000 -r 5000000
最終將三台機器的結果相加,就是總的QPS。
一些結論性的東西:
1.使用三台服務器作為壓力源應該是為了得到最大的性能數據,當我們只使用1個壓力源的時候,我們得到的結果是遠遠小於三台壓力源的結果的。
2.此測試方法適用於真實的生產環境,因為會考慮到網絡對性能的影響。