实验环境
lsb_release -d | awk -F ':' '{print $2}': Ubuntu 18.04.3 LTSlscpu | grep "Model name"| awk -F ':' '{print $2}': Intel(R) Core(TM) i5-3210M CPU @ 2.50GHzcat meminfo | grep "MemTotal"| awk -F ':' {'print $2'} | awk {'print $1/1024/1024"G"'}: 7.68777G => 8GBsudo dmidecode -t memory | grep DDR | awk -F ':' 'NR==1 {print $2}': DDR3- 20GB HDD
订阅号文章
什么?Redis 的 QPS 是 MySQL 的 100 倍?
Redis
运行 Redis 自带的基准测试工具,运行 set,get 1000000 次,1s 后退出并显示数据
1
2
3
4
5
6不使用 pipeline
redis-benchmark -n 1000000 -t set,get -q
------输出结果------
SET: 76022.50 requests per second
GET: 69905.62 requests per second运行 set,get 1000000 次,每次发送 200 个请求到服务端,1s 后退出并显示数据
1
2
3
4
5
6使用 pipeline
redis-benchmark -n 1000000 -t set,get -P 200 -q
------输出结果------
SET: 987166.81 requests per second
GET: 1182033.12 requests per second总结:Redis 在本机上的 QPS 大概为 70000~1000000
Mysql
前提:安装 sysbench
1
2curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
sudo apt -y install sysbench创建一个名为 benchmark 的 database,然后运行如下命令,准备数据->测试数据
1
2
3sysbench /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运行结果如下
1
2
3
4
5
6[ 10s ] thds: 4 tps: 4.00 qps: 85.46 (r/w/o: 60.57/16.49/8.40) lat (ms,95%): 1708.63 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 4 tps: 4.50 qps: 91.01 (r/w/o: 63.81/18.20/9.00) lat (ms,95%): 1678.14 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 4 tps: 3.80 qps: 74.49 (r/w/o: 52.30/14.60/7.60) lat (ms,95%): 1938.16 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 4 tps: 4.90 qps: 98.32 (r/w/o: 68.32/20.20/9.80) lat (ms,95%): 1903.57 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 4 tps: 5.10 qps: 102.69 (r/w/o: 72.79/19.70/10.20) lat (ms,95%): 1618.78 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 4 tps: 3.90 qps: 76.09 (r/w/o: 52.59/15.70/7.80) lat (ms,95%): 2120.76 err/s: 0.00 reconn/s: 0.00总结:由于是机械硬盘,MySQL 的 QPS 仅为 80~100
结论
由于一个是在内存进行工作,一个是在机械硬盘上进行工作,所以在实验环境下相差的更大。但 Mysql 的 InnoDB 有十分健全的事务系统,所以各有所长,互相搭配可以工作地更好。