当前位置: 首页 > 科技观察

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

时间:2023-03-13 01:40:19 科技观察

前言一直听人说Redis读写性能优越,适合做缓存,而MySQL则不然。那么你真的了解他们的读写差距了吗?小姜也有这样的疑问,他们的成绩差到什么程度?于是有了这篇文章。测试环境配置了UbuntuIntel(R)Core(TM)i5-5257UCPU@2.70GHz8GBDDR3,40GBSSD。Redis进入Redis[1]官网,使用以下步骤安装。$wgethttp://download.redis.io/releases/redis-5.0.5.tar.gz$tarxzfredis-5.0.5.tar.gz$cdredis-5.0.5$makestartservice$src/redis-serverrunRedis内置的benchmark工具运行set和get1000000次,1s后退出并显示数据$cdsrc$./redis-benchmark-n1000000-tset,get-q数据显示如下,结果为SET48009,GET56960.SET:48009.98requestspersecondGET:56960.59requestspersecond当然这个数据不是用pipeline的,那么用pipeline是什么场景呢?运行命令如下,运行set,get1000000次,每次向服务器发送200个请求,1s后退出并显示数据$cdsrc$./redis-benchmark-n1000000-tset,get-P200-q数据为显示如下,结果ForSET315258,GET330797。这里可以自行调整-P的值,上升到30000左右时保持稳定,所以下面的数据是理论上最好的测试数据。SET:315258.53requestspersecondGET:330797.22requestspersecond好了,到这里我们知道Redis的大概数据是50000-300000,那我们来看看MySQL?MySQL可以到MySQL官网[2]自行安装MySQL。我的服务环境是Ubuntu,所以我的安装命令如下$sudoapt-getinstallmysql-server$sudoapt-getinstallmysql-client我使用sysbench[3]工具来测试MySQL的性能,所以接下来我们需要安装它。$url-shttps://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh|sudobashsudoapt-yinstallsysbench安装sysbench后,/usr/share/sysbench/目录下会有一些测试脚本,可以直接使用,我们只需要手动创建一个名为benchmark的数据库,然后运行如下命令准备数据->测试数据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=300preparesysbench/usr/共享/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=300run运行完成后数据如下[10s]thds:4tps:198.84qps:3982.73(r/w/o:2788.48/796.17/398.08)lat(ms,95%):54.83错误/s:0.00reconn/s:0.00[20s]thds:4tps:174.38qps:3486.62(r/w/o:2440.73/697.12/348.76)lat(ms,95%):52.89err/s:0.00reconn/s:0.00[30s]thds:4tps:204.54qps:4089.94(r/w/o:2863.12/817.75/409.07)lat(ms,95%):55.82err/s:0.00reconn/s:0.00[40s]thds:4tps:214.98qps:4299.59(r/w/o:3009.71/859.92/429.96)lat(ms,95%):49.21err/s:0.00reconn/s:0.00[50s]thds:4tps:188.31qps:3767.98(r/w/o:2637.12/754.24/376.62)lat(ms,95%):52.89err/s:0.00reconn/s:0.00[60s]thds:4tps:228.00qps:4559.06(r/w/o:3191.64/911.41/456.01)lat(ms,95%):49.21err/s:0.00reconn/s:0.00叮叮叮,有没有发现什么?数据显示MySQL的QPS在4000左右,结论是浮动结论。这时,脱口而出一句话。重剑无锋,巧也。Redis的优秀性能真的是不容挑战。《Redis in Action》中提到,Redis的性能将是数据库大小的10-100倍的普通关系,如果不是亲眼所见,你不相信吗?那你可以自己试试吗?PS:当然,并不是说因为这个不用MySQL。他们不同的特点决定了他们的场景。MySQL的InnoDB引擎有一个非常完善的事务系统,每个事务都是领导者。