Do it by myself, not just have a look.

实验环境

  • lsb_release -d | awk -F ':' '{print $2}'Ubuntu 18.04.3 LTS
  • lscpu | grep "Model name"| awk -F ':' '{print $2}'Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
  • cat meminfo | grep "MemTotal"| awk -F ':' {'print $2'} | awk {'print $1/1024/1024"G"'}: 7.68777G => 8GB
  • sudo dmidecode -t memory | grep DDR | awk -F ':' 'NR==1 {print $2}'DDR3
  • 20GB HDD

订阅号文章

什么?Redis 的 QPS 是 MySQL 的 100 倍?

Redis

  1. 运行 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
  2. 运行 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
  3. 总结:Redis 在本机上的 QPS 大概为 70000~1000000

Mysql

  1. 前提:安装 sysbench

    1
    2
    $ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
    $ sudo apt -y install sysbench
  2. 创建一个名为 benchmark 的 database,然后运行如下命令,准备数据->测试数据

    1
    2
    3
    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
  3. 运行结果如下

    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
  4. 总结:由于是机械硬盘,MySQL 的 QPS 仅为 80~100

结论

由于一个是在内存进行工作,一个是在机械硬盘上进行工作,所以在实验环境下相差的更大。但 Mysql 的 InnoDB 有十分健全的事务系统,所以各有所长,互相搭配可以工作地更好。

码哥 wechat
欢迎关注个人订阅号:「码上行动GO」