根據Redis 兩個版本的測試結果對比得出如下結論
前端
1、Redis 2.6主從同步在網絡閃斷的狀況下會自動開啓新的端口進行從新鏈,同時會進行一下操做:
shell
一、斷開連接的從會向主發送SYNC命令網絡
二、而後主fork進程導出rdb文件發送到從性能
三、從接收到完整的數據後,清空Redis內數據而後在從RDB中恢復測試
可是根據測試結果發現如下問題:優化
一、多個主從關係同時斷開的時候,主導出RDB文件時,會佔用大量內存spa
二、從接收到完整數據後,恢復數據的時候,會清空數據,這時候因爲Redis數據量很大,目前10G左右內存恢復速度大約1分鐘左右,這一分鐘內,不少請求沒法獲取數據code
三、在從RDB恢復數據的過程當中,部分請求會被阻塞,致使請求超時(目前報警沒法獲取數據根次有關)orm
2、Redis 2.8.8 沒有發現以上問題,由於Redis 2.8連接閃斷從新鏈接後,從會從斷開以前的主從同步進度開始繼續同步,不會有全量恢復的問題接口
3、Redis 2.8 和 Redis 2.6 在進行save操做的時候,save過程當中全部的請求都會被阻塞,致使前端請求失敗,因此不要再查詢的從上進行save操做
根據以上得出建議:
一、Redis 升級到 2.8 以上,保證數據主從同步時候的可用性
二、不要直接在Redis從或主上進行save操做,能夠按王彬的建議在關鍵節點增長新的從用於save備份使用
三、建議優化Redis存儲,單個端口存儲數據不要過大,這樣能夠保證單個端口掛掉數據數據時候的速度,和影響面積
Redis 2.8和SSDB性能對比
SSDB 1.6.8.6
順序寫 : 1.645 ms/op 59.4 MB/s
隨機寫 : 1.679 ms/op 58.2 MB/s
順序讀 : 1.286 ms/op 75.9 MB/s
隨機讀 : 1.225 ms/op 79.7 MB/s
rpush : 1.546 ms/op 63.2 MB/s
lpop : 1.303 ms/op 74.9 MB/s
Redis 2.8.8
順序寫 : 1.617 ms/op 60.4 MB/s
隨機寫 : 1.214 ms/op 80.4 MB/s
順序讀 : 1.156 ms/op 84.5 MB/s
隨機讀 : 1.153 ms/op 84.7 MB/s
rpush : 1.222 ms/op 79.9 MB/s
lpop : 1.153 ms/op 84.7 MB/s
如下測試,是測試的某個業務接口,因此不表明Redis的性能,須要由如下多種狀況的對比,來獲得結論。
Redis 2.6 直接查詢主時候的 壓測信息
Concurrency Level: 50 Time taken for tests: 65.615809 seconds Complete requests: 200000 Failed requests: 0 Write errors: 0 Total transferred: 7234636173 bytes HTML transferred: 7171835859 bytes Requests per second: 3048.05 [#/sec] (mean) Time per request: 16.404 [ms] (mean) Time per request: 0.328 [ms] (mean, across all concurrent requests) Transfer rate: 107673.35 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.6 0 2 Processing: 5 15 1.7 15 59 Waiting: 4 11 1.4 11 57 Total: 5 15 1.8 16 59 Percentage of the requests served within a certain time (ms) 50% 16 66% 16 75% 17 80% 17 90% 18 95% 18 98% 20 99% 20 100% 59 (longest request)
Redis 2.6 直接查詢主而且有從正在wait_bgsave時候的 壓測信息
Concurrency Level: 50 Time taken for tests: 66.575526 seconds Complete requests: 200000 Failed requests: 0 Write errors: 0 Total transferred: 7234643440 bytes HTML transferred: 7171842812 bytes Requests per second: 3004.11 [#/sec] (mean) Time per request: 16.644 [ms] (mean) Time per request: 0.333 [ms] (mean, across all concurrent requests) Transfer rate: 106121.30 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.6 0 2 Processing: 10 15 4.6 15 252 Waiting: 7 11 4.5 11 247 Total: 10 16 4.5 16 252 Percentage of the requests served within a certain time (ms) 50% 16 66% 16 75% 17 80% 17 90% 18 95% 19 98% 20 99% 22 100% 252 (longest request)
Redis 2.6 查詢從時候的 壓測結果
Concurrency Level: 50 Time taken for tests: 68.835666 seconds Complete requests: 200000 Failed requests: 0 Write errors: 0 Total transferred: 7234623168 bytes HTML transferred: 7171822854 bytes Requests per second: 2905.47 [#/sec] (mean) Time per request: 17.209 [ms] (mean) Time per request: 0.344 [ms] (mean, across all concurrent requests) Transfer rate: 102636.64 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 42.4 0 3000 Processing: 3 15 21.4 15 3017 Waiting: 2 11 21.4 11 3011 Total: 3 16 47.5 16 3021 Percentage of the requests served within a certain time (ms) 50% 16 66% 16 75% 17 80% 17 90% 18 95% 19 98% 21 99% 22 100% 3021 (longest request)
Redis 2.6 查詢從而且 因爲網絡閃斷 正在與主進行 同步操做
Concurrency Level: 50 Time taken for tests: 125.321846 seconds Complete requests: 200000 Failed requests: 193893 (Connect: 0, Length: 193893, Exceptions: 0) Write errors: 0 Total transferred: 7014619430 bytes HTML transferred: 6952844946 bytes Requests per second: 1595.89 [#/sec] (mean) Time per request: 31.330 [ms] (mean) Time per request: 0.627 [ms] (mean, across all concurrent requests) Transfer rate: 54660.97 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.6 0 3 Processing: 10 30 231.8 15 14278 Waiting: 7 26 232.0 11 14277 Total: 10 30 231.8 16 14278 Percentage of the requests served within a certain time (ms) 50% 16 66% 16 75% 17 80% 17 90% 18 95% 19 98% 355 99% 430 100% 14278 (longest request)
Redis 2.8.8 查詢從時候的 壓測結果
Concurrency Level: 50 Time taken for tests: 68.335567 seconds Complete requests: 200000 Failed requests: 0 Write errors: 0 Total transferred: 7234728872 bytes HTML transferred: 7171927302 bytes Requests per second: 2926.73 [#/sec] (mean) Time per request: 17.084 [ms] (mean) Time per request: 0.342 [ms] (mean, across all concurrent requests) Transfer rate: 103389.27 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 46.0 0 3001 Processing: 3 15 24.5 15 2855 Waiting: 2 11 24.5 11 2852 Total: 3 16 52.1 16 3022 Percentage of the requests served within a certain time (ms) 50% 16 66% 16 75% 17 80% 17 90% 18 95% 18 98% 19 99% 20 100% 3022 (longest request)
Redis 2.8.8 查詢從而且 因爲網絡閃斷 正在與主進行 同步操做
Concurrency Level: 50 Time taken for tests: 67.968708 seconds Complete requests: 200000 Failed requests: 0 Write errors: 0 Total transferred: 7234653576 bytes HTML transferred: 7171852948 bytes Requests per second: 2942.53 [#/sec] (mean) Time per request: 16.992 [ms] (mean) Time per request: 0.340 [ms] (mean, across all concurrent requests) Transfer rate: 103946.23 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 46.0 0 3001 Processing: 3 15 1.9 15 30 Waiting: 2 11 1.5 11 23 Total: 3 16 46.0 16 3026 Percentage of the requests served within a certain time (ms) 50% 16 66% 16 75% 17 80% 17 90% 18 95% 18 98% 19 99% 20 100% 3026 (longest request)