专栏首页每天学JavaMysql和Redis查询速度的对比

Mysql和Redis查询速度的对比

在软件系统中,IO速度比内存速度慢,IO读写在很多情况下会是系统的瓶颈,我们也知道Redis的查询速度比直接查数据库要快,因为Redis将数据存在内存中,而Mysql的查询是执行IO操作。那么他们之间到底有多大的差距呢?

新的一周已经开始,不知道小伙伴今天状态可好啊?状态的好坏关系到学习和工作效率。工具也是一样,专注的方向不同,决定了在不同的场景,会有各自的优势。今天给大家带来的是,Mysql和Redis在项目中的查询速度的差距。

01

实例

首先我们看一张图片:

我想大家都很熟悉这张图片,打开网页调试,在日常工作中应该是很频繁的,但是你是否注意到这张图?

这张图上面有很多时间数据,这些数据是我们一次请求,在各个方面所用的时间。我们会发现其中TTFB最耗时,那么什么是TTFB呢?第一张百度百科的图已经告诉你答案:TTFB是最初的网络请求被发起到从服务器接收到第一个字节前所花费的毫秒数。也就是说:通过这个数据我们能知道我们接口的效率如何?那这跟我们今天所讲的东西有关系吗?

现在我写了一个接口,用于返回数据,一种从数据库去取数据,一种是从Redis中取数据,结果其实早就可以预料到,但是如果想知道差距到底有多大。请继续浏览下去吧。

先说一下对比的条件:首先Redis和Mysql都是部署在远程服务器上(同一台)。其次接口是相同,在Service层开始区分以哪种形式获取数据(代码如下)。最后他们值是相同的,我已经将数据库返回的数据存到Redis中。

 public List<XcxKnowVO> getKnow(int id) {
        if (redisCache.getObj("getKnow") != null && id == 2) {
            List<XcxKnowVO> xcxKnowVOS = (List<XcxKnowVO>) redisCache.getObj("getKnow");
            return xcxKnowVOS;
        } else {
            return xcxKnowDao.getKnow();
        }

    }

第一次测试(这一次两种请求都是第一次连接,在测试一种后,重启服务再测试第二种,保证条件大致是相同的)。

结果:我们发现初次加载,Mysql耗时用了2.67s。而redis用了847.84ms。他们都是初次加载,在第一次请求后,我重启了服务然后在访问redis数据源(效果如下)

Mysql:2.67s

redis:847.84ms

第二次测试(每种请求都试过一次后,也就是建立连接后,我们再刷新一次)。

结果是:我们发现mysql用了996.98ms。而redis用了114.77ms。(效果图如下)

Mysql:

Redis:

虽然Mysql在第二次时间大大缩短,但是同Redis相比,仍然是有差距的。在不同的服务器上可能差距会不同,这个跟服务器的硬件也是有关系的。说到这里你们想知道上面的差距代表了什么吗?

用一个例子来说明这种效果代表着什么:

人眼的反应速度大约是十分之一秒,或者更高,但最高不超过三十左右。一般认为在24分之一。反应时间。

也就是说100ms左右的加载速度,人眼看到的基本上就是秒加载了。

这里的对比并不是说Mysql不好,而且这个对比也是有一定的问题,因为本人的SQL查询语句可能优化并不是特别好。同时我们也要知道NoSQL也是有它本身的缺陷:

1. 不提供对SQL的支持:如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移成本;

2. 支持的特性不够丰富:现有产品所提供的功能都比较有限,大多数NoSQL数据库都不支持事务,也不像MS SQL Server和Oracle那样能提供各种附加功能,比如BI和报表等。

好了,既然我们知道Redis查询速度要比直接查询Mysql要快,那么如何合理的在项目中运用Redis呢?请继续关明天的文章,今天就讲到这里,希望大家能有一个充实的一周。


那么今天小程序更新的题库是什么呢?

今天小程序更新的题目是:

1.Redis集群方案什么情况下会导致整个集群不可用?

2.Redis支持的Java客户端都有哪些?官方推荐用哪个

3.Jedis与Redisson对比有什么优缺点?

4.说说Redis哈希槽的概念?

5.Redis集群会有写操作丢失吗?为什么?

本文分享自微信公众号 - 每天学Java(gh_fddfb9d03324),作者:每天学Java

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis入门总结(大神慎入)

    “ 从Redis的安装到项目集成的两篇文章中,我们已经简单的了解到何如去用Redis的,再然后通过Redis和Mysql的查询性能对比和项目中如何合理运用Red...

    每天学Java
  • 如何合理的在项目中运用Redis

    “ 在昨天推送的文章中,我们能够明显的看到访问Redis存储的数据,比访问MySQL中存储的数据要快很多,但是我们也强调了Redis的一些缺点,那么在实际的项目...

    每天学Java
  • Linux部署Redis(单机版)

    “ 当数据库数据量过大的时候,大量的IO操作会成为网站性能的瓶颈,而Redis可以大量减少与数据库的交互,提高网站性能。”

    每天学Java
  • Redis 3.0.0正式版发布,全新的分布式高可用数据库

    我是攻城师
  • 为什么一线大厂面试必问redis,有啥好问的?

    除了5种常用类型,还有bitmaps、hyperloglogs 、geospatial等类型。

    Java学习录
  • 广告点击数实时统计:Spark StructuredStreaming + Redis Streams

    某广告公司在网页上投递动态图片广告,广告的展现形式是根据热点图片动态生成的。为了收入的最大化,需要统计每个广告的点击数来决定哪些广告可以投放的更长时间,哪些需要...

    王知无
  • 腾讯云与英特尔打造进阶版Redis 释放硬件红利

    点击上方蓝字每天学习数据库 2019年4月3日,英特尔发布了英特尔® 傲腾TM 数据中心级持久内存,能够在几近内存级别的带宽和时延下,提供超持久化、超大的内存...

    腾讯云数据库 TencentDB
  • 我为什么用ES做Redis监控,不用Prometheus或Zabbix?

    Redis当下很流行,也很好用,无论是在业务应用系统,还是在大数据领域都有重要的地位;但Redis也很脆弱,用不好,问题多多。2012年以前都是以memcach...

    jeanron100
  • 单线程的Redis为什么这么快?

    https://blog.csdn.net/xlgen157387/article/details/79470556

    黄泽杰
  • 案例:Redis命令不当 引起数据库雪崩 造成数百万损失

    最近的互联网线上事故发生比较频繁,9月19日网上爆料出顺丰近期发生了一起线上删库事件,在这里就不介绍了。

    Debian社区

扫码关注云+社区

领取腾讯云代金券