“在软件系统中,IO速度比内存速度慢,IO读写在很多情况下会是系统的瓶颈,我们也知道Redis的查询速度比直接查数据库要快,因为Redis将数据存在内存中,而mysql的查询是执行IO操作。那么他们之间到底有多大的差距呢?”
实例
首先我们看一张图片:
我想大家都很熟悉这张图片,打开网页调试,在日常工作中应该是很频繁的,但是你是否注意到这张图?
这张图上面有很多时间数据,这些数据是我们一次请求,在各个方面所用的时间。我们会发现其中TTFB最耗时,那么什么是TTFB呢?第一张百度百科的图已经告诉你答案:TTFB是最初的网络请求被发起到从服务器接收到第一个字节前所花费的毫秒数。也就是说:通过这个数据我们能知道我们接口的效率如何?那这跟我们今天所讲的东西有关系吗?
现在我写了一个接口,用于返回数据,一种从数据库去取数据,一种是从Redis中取数据,结果其实早就可以预料到,但是如果想知道差距到底有多大。请继续浏览下去吧。
先说一下对比的条件:首先Redis和Mysql都是部署在远程服务器上(同一台)。其次接口是相同,在Service层开始区分以哪种形式获取数据(代码如下)。最后他们值是相同的,我已经将数据库返回的数据存到Redis中。
第一次测试(这一次两种请求都是第一次连接,在测试一种后,重启服务再测试第二种,保证条件大致是相同的)。
结果:我们发现初次加载,Mysql耗时用了2.67s。而redis用了847.84ms。他们都是初次加载,在第一次请求后,我重启了服务然后在访问redis数据源(效果如下)
Mysql:2.67s
redis:847.84ms
第二次测试(每种请求都试过一次后,也就是建立连接后,我们再刷新一次)。
结果是:我们发现mysql用了996.98ms。而redis用了114.77ms。(效果图如下)
Mysql:
Redis:
虽然Mysql在第二次时间大大缩短,但是同Redis相比,仍然是有差距的。在不同的服务器上可能差距会不同,这个跟服务器的硬件也是有关系的。