什么?Redis 的 QPS 是 MySQL 的 100 倍?
掃描二維碼
隨時隨地手機看文章
前言
原來總聽別人說 Redis
讀寫性能優(yōu)越適合做緩存,而 MySQL
則不行,那么你有真正了解過他們的讀寫差距嗎?小匠同樣也有這個疑問,到底他們的性能差多少?于是就有了這篇文章。
測試環(huán)境配置
Ubuntu Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz 8GB DDR3, 40GB SSD
Redis
進入 Redis[1] 官網(wǎng),使用如下步驟安裝。
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
啟動服務
$ src/redis-server
運行 Redis
自帶的基準測試工具,運行 set,get 1000000 次,1s 后退出并顯示數(shù)據(jù)
$ cd src
$ ./redis-benchmark -n 1000000 -t set,get -q
數(shù)據(jù)顯示如下,結(jié)果為 SET 48009,GET 56960。
SET: 48009.98 requests per second
GET: 56960.59 requests per second
當然這數(shù)據(jù)是沒有使用 pipeline 的情況下,那么使用了 pipeline 又是什么場景呢?運行命令如下,運行 set,get 1000000 次,每次發(fā)送 200 個請求到服務端,1s 后退出并顯示數(shù)據(jù)
$ cd src
$ ./redis-benchmark -n 1000000 -t set,get -P 200 -q
數(shù)據(jù)顯示如下,結(jié)果為 SET 315258,GET 330797。這里你可以自行調(diào)整 -P 的數(shù)值,上升到 30000 上下保持平穩(wěn),所以如下數(shù)據(jù)是理論上最佳的測試數(shù)據(jù)。
SET: 315258.53 requests per second
GET: 330797.22 requests per second
好的,到這里我們就知道了,Redis
的大致數(shù)據(jù)為 50000 - 300000,那么我們趕緊看看 MySQL 唄?
MySQL
可前往 MySQL[2] 官網(wǎng)自行安裝 MySQL,我的服務環(huán)境是 Ubuntu,所以我的安裝命令如下
$ sudo apt-get install mysql-server
$ sudo apt-get install mysql-client
我測試 MySQL 的性能使用 sysbench[3] 工具,所以接下來我們需要安裝一下。
$ url -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench
安裝 sysbench 以后在 /usr/share/sysbench/
目錄下面會自帶一些測試腳本,直接可以使用,我們只需要手動創(chuàng)建一個名為 benchmark 的 database,然后運行如下命令,準備數(shù)據(jù)->測試數(shù)據(jù)
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-user=root --mysql-password=root --mysql-db=benchmark --tables=10 --table-size=1000000 --events=100000000 --report-interval=10 --threads=4 --time=300 prepare
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-user=root --mysql-password=root --mysql-db=benchmark --tables=10 --table-size=1000000 --events=100000000 --report-interval=10 --threads=4 --time=300 run
運行完成以后數(shù)據(jù)如下
[ 10s ] thds: 4 tps: 198.84 qps: 3982.73 (r/w/o: 2788.48/796.17/398.08) lat (ms,95%): 54.83 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 4 tps: 174.38 qps: 3486.62 (r/w/o: 2440.73/697.12/348.76) lat (ms,95%): 52.89 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 4 tps: 204.54 qps: 4089.94 (r/w/o: 2863.12/817.75/409.07) lat (ms,95%): 55.82 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 4 tps: 214.98 qps: 4299.59 (r/w/o: 3009.71/859.92/429.96) lat (ms,95%): 49.21 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 4 tps: 188.31 qps: 3767.98 (r/w/o: 2637.12/754.24/376.62) lat (ms,95%): 52.89 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 4 tps: 228.00 qps: 4559.06 (r/w/o: 3191.64/911.41/456.01) lat (ms,95%): 49.21 err/s: 0.00 reconn/s: 0.00
叮叮叮,是不是發(fā)現(xiàn)了什么?數(shù)據(jù)顯示 MySQL
的 QPS
為 4000
左右浮動。
結(jié)論
此時一句話脫口而出重劍無鋒,大巧不工
,Redis 的優(yōu)秀性能真的不是擂的,正如 《Redis in Action》中提到,Redis 的性能會是普通關(guān)系型數(shù)據(jù)庫的 10 - 100 倍,如果你不是親眼所見也不敢相信?那么你可以親自動手試試嘍?
PS: 當然并不是說因此就不用 MySQL 了,他們的特質(zhì)不同決定了他們的場景,MySQL 的 InnoDB 引擎是的他有非常健全的事務系統(tǒng),還是各領風騷哦。
References
[1]
Redis: https://redis.io/download[2]
MySQL: https://dev.mysql.com/downloads/mysql/[3]
sysbench: https://github.com/akopytov/sysbench
特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:
長按訂閱更多精彩▼
如有收獲,點個在看,誠摯感謝
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!