前言

原来总听别人说 Redis 读写性能优越适合做缓存,而 MySQL 则不行,那么你有真正了解过他们的读写差距吗?小匠同样也有这个疑问,到底他们的性能差多少?于是就有了这篇文章。

测试环境配置

Ubuntu Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz 8GB DDR3, 40GB SSD

Redis

进入 Redis[1] 官网,使用如下步骤安装。

$ 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 后退出并显示数据

$ cd src
$ ./redis-benchmark -n 1000000 -t set,get -q

数据显示如下,结果为 SET 48009,GET 56960。

SET: 48009.98 requests per second
GET: 56960.59 requests per second

当然这数据是没有使用 pipeline 的情况下,那么使用了 pipeline 又是什么场景呢?运行命令如下,运行 set,get 1000000 次,每次发送 200 个请求到服务端,1s 后退出并显示数据

$ cd src
$ ./redis-benchmark -n 1000000 -t set,get -P 200 -q

数据显示如下,结果为 SET 315258,GET 330797。这里你可以自行调整 -P 的数值,上升到 30000 上下保持平稳,所以如下数据是理论上最佳的测试数据。

SET: 315258.53 requests per second
GET: 330797.22 requests per second

好的,到这里我们就知道了,Redis 的大致数据为 50000 - 300000,那么我们赶紧看看 MySQL 呗?

MySQL

可前往 MySQL[2] 官网自行安装 MySQL,我的服务环境是 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/ 目录下面会自带一些测试脚本,直接可以使用,我们只需要手动创建一个名为 benchmark 的 database,然后运行如下命令,准备数据->测试数据

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 preparesysbench /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

运行完成以后数据如下

[ 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

叮叮叮,是不是发现了什么?数据显示 MySQL 的 QPS 为 4000 左右浮动。

结论

此时一句话脱口而出重剑无锋,大巧不工,Redis 的优秀性能真的不是擂的,正如 《Redis in Action》中提到,Redis 的性能会是普通关系型数据库的 10 - 100 倍,如果你不是亲眼所见也不敢相信?那么你可以亲自动手试试喽?

PS: 当然并不是说因此就不用 MySQL 了,他们的特质不同决定了他们的场景,MySQL 的 InnoDB 引擎是的他有非常健全的事务系统,还是各领风骚哦。

References

[1] Redis: https://redis.io/download
[2] MySQL: https://dev.mysql.com/downloads/mysql/
[3] sysbench: https://github.com/akopytov/sysbench

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

什么?Redis 的 QPS 是 MySQL 的 100 倍?相关推荐

  1. IT老齐架构300讲笔记(049) 比MySQL快100倍,解读cassandra列式数据库高性能背后的原理

    目录 一.列式存储 二.为什么列式存储性能这么高 2.1 行式存储查询的劣势 2.2 列式存储查询的优势(顺序读) 2.3 列式存储的问题 专栏链接:IT老齐架构300讲笔记专栏 一.列式存储 列式数 ...

  2. MySQL 高频 100 问

    欢迎关注方志朋的博客,回复"666"获面试宝典 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水. 前一阵系统的学习了一下My ...

  3. 高并发时,读文件、读SESSION、读缓存(Redis)和读数据库(Mysql)的查询效率哪家强?

    今天我们来探讨下读文件.读SESSION.读缓存(Redis).读数据库(Mysql),四者查询速度大比拼,效率哪家强? 前言:本案例测试环境为本地环境,局域网模式,不同的业务逻辑,会对测试结果产生影 ...

  4. 吊打面试官!MySQL灵魂100问,你能答出多少?

    推荐阅读: 面试机会不等人,资料看精不看多!史上最全Java技术资料合集! 2019年中总结,400道一线大厂高频精选面试题合集(JVM+Spring+RabbitMQ+Mybatis+Redis+分 ...

  5. 地理位置处理---Redis的GeoHash和MySQL的geography类型(之后有空再详细介绍)

    地理位置处理-Redis的GeoHash和MySQL的geography类型(之后有空再详细介绍) 最近比较忙,本来很早就想写对比文章了,这里先大致写写,等之后有空再详细介绍吧.这个文章我本地MD笔记 ...

  6. PHP如何解决swoole守护进程Redis假死 ,mysql断线重连问题?

    PHP如何解决swoole守护进程Redis假死 ,mysql断线重连问题? 最近公司有个项目,要举办一个线上活动,我这边负责提供接口记录用户访问记录,与操作记录,由于活动参与人数可能比较多,为了不影 ...

  7. 比MySQL快839倍!揭开分析型数据库JCHDB的神秘面纱

    前不久,京东智联云云产品研发部架构师王向飞老师在线上公开课<Clickhouse在京东智联云的大规模应用和架构改良>中,介绍了Clickhouse 数据库在京东智联云的落地应用与优化改进经 ...

  8. 比MySQL快801倍,太颠覆了!

    行业内卷的话题热度居高不退,程序员群体的职业焦虑也尤为明显,在更新迭代日新月异的技术领域,对新技术软件保持敏感是最起码的职业尊重,尤其是在大数据领域,能否运用新技术解决实际问题已然成为衡量技术人能力水 ...

  9. 用了的都说好 | 详解16个Pandas函数,让你的 “数据清洗” 能力提高100倍!

    持续分享Excel.MySQL.Python领域干货.戳公众号链接戳[数据分析与统计学之美],关注这个有一点点东西的公众号.还可获取四个原创文档<Python自动化办公手册>.<Ex ...

最新文章

  1. namenode需要多大内存
  2. java 关于分页的实现
  3. WinRAR4.11-64Bit最简易的注册方法
  4. lombok @EqualsAndHashCode 注解的影响
  5. 服务器系统2012怎么多人连接,windows2012服务器TCP连接数
  6. Java方法的静态绑定与动态绑定讲解
  7. String、String Buffer、StringBuilder区别与比较
  8. .NET Core 2.1路线图
  9. linux温故知新十
  10. php larve,封装composer包,实现thinkphp、larverl、yii框架中使用(使用框架实现回调方法)...
  11. Python入门--列表的查询操作--获取列表知道那个元素的索引、获取列表中的单个元素、获取列表中的多个元素
  12. java synchronized互斥锁使用
  13. js执行函数报错Cannot set property 'value' of null
  14. python画散点图-python中画散点图
  15. Part2 Movielens介绍
  16. 武汉大学计算机学院程序大赛,“星网锐捷杯”华中区高校研究生程序设计大赛通知...
  17. 微课在小学计算机教学中的应用,微课技术在小学信息技术课堂中的应用
  18. 中国超级稻在18个亚非国家试种推广 国稻种芯百团计划行动
  19. linux时区文件格式,干货|理解Linux系统的时区、夏令时
  20. java获取date的时分秒_java Date简单的 获得时分秒代码

热门文章

  1. python的HTML文件中使用和加载CSS文件
  2. python中使用flask实现人脸实时检测
  3. 2010提高组-乌龟棋 [记忆优化搜索]
  4. Codeforces Round #650 (Div. 3)(A-F1)题解
  5. python 调用函数 开销_参数中带有函数的Python日志记录开销
  6. python上机实验报告读取文件_Python程序设计实验报告:实验八 文件
  7. 汉印标签打印机app_旅行一族福音 汉印CP4000L便携照片打印机体验
  8. c语言 爬虫 socket,爬虫遇到 Socket,莫慌,肝就完了!
  9. luogu P3393 逃离僵尸岛(点权最短路 + 多源BFS)
  10. sequence oracle mysql,oracle sequence转mysql(mysql实现oracle的sequence功能)