Skip to content

面试速答(先看这里)

**一句话结论:**Redis是基于内存的,MySQL是基于磁盘的(非Memory引擎),所以Redis要比MySQL快,一次RT要分两部分,一部分是网络交互的耗时,一部分是命令(SQL)执行的耗时。

60秒标准回答:

Redis是基于内存的,MySQL是基于磁盘的(非Memory引擎),所以Redis要比MySQL快,一次RT要分两部分,一部分是网络交互的耗时,一部分是命令(SQL)执行的耗时。但是不管怎么说,Redis都要比MySQL快得多

先说下纯命令(SQL)执行耗时情况

Redis的简单命令(如 GET 、 SET )执行耗时大概在 0.1ms~1ms (100-1000微秒)。 复杂命令(如 ZADD 、 HSET )的执行耗时大概在 1ms~5ms 左右

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **Redis命令执行耗时:**Redis的简单命令(如 GET 、 SET )执行耗时大概在 0.1ms~1ms (100-1000微秒)。
  • **MySQL的SQL运行耗时:**首先,对于MySQL来说,命中索引、命中buffer pool,无join等等都对性能有很大的影响。
  • **广域网(WAN):**同城数据中心(≤100km)

**记忆锚点:**Redis → MySQL → HTTP → SQL → buffer → 平均RTT

关键取舍:

  • 如果没有命中buffer pool,就需要去磁盘读取,这时候就需要更多的耗时了,一般我们认为一次查询如果超过1秒钟算是慢SQL了,所以, 一个正常的查询语句,应该在1000ms内返回,我们普遍认为200ms-500ms以内算是比较好的一个性能了。
  • (测试环境:标准架构(双副本),不启用集群, 8 GB) 测评地址: MySQL的SQL运行耗时 首先,对于MySQL来说,命中索引、命中buffer pool,无join等等都对性能有很大的影响。

加分表达:

  • 如果一个查询,直接命中buffer pool并且通过主键查询,那么可能在2ms以内也能返回。
  • 就是一次请求的往返时间,那么这个又咋算呢,可以给个大概的参考: 二、典型场景下的网络耗时 1. 局域网(LAN) 千兆以太网(同交换机) 0.1ms~0.5ms WiFi 6(近距离) 2. 广域网(WAN) 同城数据中心(≤100km) 跨省(如北京→上海) 20ms~30ms 跨国(如中国→美西) 100ms~150ms 卫星通信(如Starlink)…

追问准备:

  • 以上说的不包括任何的网络交互的时长,还要再加上网络耗时,那么网络耗时怎么算的呢?
  • RTT是什么呢?

典型回答 ​

Redis是基于内存的,MySQL是基于磁盘的(非Memory引擎),所以Redis要比MySQL快,一次RT要分两部分,一部分是网络交互的耗时,一部分是命令(SQL)执行的耗时。但是不管怎么说,Redis都要比MySQL快得多。

先说下纯命令(SQL)执行耗时情况。

Redis命令执行耗时 ​

Redis的简单命令(如GET、SET)执行耗时大概在0.1ms~1ms(100-1000微秒)。复杂命令(如**ZADD**、**HSET**)的执行耗时大概在1ms~5ms左右。

下图是阿里云给出的Redis和云上服务的对比图,可以看到,Redis的P99基本都在1毫秒以内的。(测试环境:标准架构(双副本),不启用集群, 8 GB)

image.png

测评地址:https://help.aliyun.com/zh/redis/support/performance-whitepaper-of-community-edition-instances

MySQL的SQL运行耗时 ​

首先,对于MySQL来说,命中索引、命中buffer pool,无join等等都对性能有很大的影响。但是还是能给出一些大致的范围的。

如果一个查询,直接命中buffer pool并且通过主键查询,那么可能在2ms以内也能返回。比Redis慢不了多少。

如果没有命中buffer pool,就需要去磁盘读取,这时候就需要更多的耗时了,一般我们认为一次查询如果超过1秒钟算是慢SQL了,所以,一个正常的查询语句,应该在1000ms内返回,我们普遍认为200ms-500ms以内算是比较好的一个性能了。

以上说的不包括任何的网络交互的时长,还要再加上网络耗时,那么网络耗时怎么算的呢?

网络耗时 ​

一次HTTP交互过程包括DNS解析、TCP握手、LS握手、HTTP请求、HTTP响应几个步骤了。那么一次请求(非HTTP 3.0的情况)就是:

plain
DNS解析(5ms~300ms)  
  → TCP握手(1.5×RTT)  
  → TLS握手(1×RTT)  
  → HTTP请求/响应(1×RTT)  
总耗时 = DNS + 3.5×RTT

大概3.5个RTT加上DNS解析的耗时了。

📄 ✅HTTP/2存在什么问题,为什么需要HTTP/3?

RTT是什么呢?就是一次请求的往返时间,那么这个又咋算呢,可以给个大概的参考:

二、典型场景下的网络耗时 ​

1. 局域网(LAN) ​

场景平均RTT
千兆以太网(同交换机)0.1ms~0.5ms
WiFi 6(近距离)1ms~5ms
企业内网跨机房1ms~2ms

2. 广域网(WAN) ​

场景平均RTT
同城数据中心(≤100km)1ms~5ms
跨省(如北京→上海)20ms~30ms
跨国(如中国→美西)100ms~150ms
卫星通信(如Starlink)20ms~50ms

3. 移动网络 ​

场景平均RTT
4G LTE30ms~100ms
5G SA(Sub-6GHz)10ms~30ms
5G毫米波(mmWave)1ms~10ms