Redis如果是单线程的,怎么会这么快呢?

If Redis is single Threaded, how can it be so fast?

我目前正在尝试了解 Redis 的一些基本实现。我知道 redis 是单线程的,我已经偶然发现了以下问题:Redis is single-threaded, then how does it do concurrent I/O?

但是我还是觉得我没理解对。 Afaik Redis 使用单线程反应器模式。因此,如果我没有理解错的话,就会有一个观察者(处理 FDs/Incoming/outgoing 连接)将要完成的工作委托给它注册的事件处理程序。他们做实际的工作并设置例如。他们的响应作为事件发送给观察者,观察者将响应传回给客户。但是,如果客户端的请求 (R1) 花费大约 1 分钟,会发生什么情况。另一个客户端创建另一个(快速)请求(R2)。然后 - 由于 Redis 是单线程的 - 在 R1 完成之前,R2 不能委托给正确的处理程序,对吗?在多线程环境中,您可以在单个线程中启动每个处理程序,因此 "main" 线程只是接受和响应 io 连接,所有其他工作都在自己的线程中执行。

如果它真的只是对 io 处理和处理程序逻辑进行排队,它永远不会像现在这样快。我在这里错过了什么?

除了可能 Redis 中的大多数操作在不到 ~ 毫秒~ 几微秒内完成这一事实之外,你没有遗漏任何东西。长 运行 操作在执行期间确实会阻塞服务器。

假设有 10,000 个用户在 hmget 上进行实时数据拉取,每个用户 10 秒,而在另一端,服务器使用 hmset 进行广播,redis 只能在最后一个可用队列中发布集合。

Redis 仅适用于排队和处理有限的处理,例如插入惰性最后登录信息,但不适用于实时信息广播,在这种情况下,memcached 将是正确的选择。 Redis 是单线程的,类似于 FIFO。