Redis多线程还是单线程(看这篇就够了)

数据库 Redis
Redis 从 Redis 6.0 开始引入了多线程 I/O 模型,以提高在处理网络事件和文件 I/O 操作时的性能和并发能力。多线程 I/O 模型允许 Redis 更好地利用多核 CPU,通过多个辅助线程来分担负载,提高了并发性能。

Redis单线程

Redis所谓的单线程并不是所有工作都是只有一个线程在执行,而是指Redis的网络IO和键值对读写是由一个线程来完成的。

Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理。

如下图所示:

图片图片

Redis 的核心网络模型一直是一个典型的单 Reactor 模型,利用 epoll/select/kqueue 等多路复用技术,在单线程的事件循环中不断去处理事件。

可以看出Redis对CPU计算力的要求并不迫切,相反单线程机制让 Redis 内部实现的复杂度大大降低,同时降低了因为上下文切换和资源竞争造成的性能损耗。

Redis 6.0多线程

以上便是 Redis 的核心网络模型,这个单线程网络模型一直到 Redis v6.0 才改造成多线程模式。

那既然单线程这么好用,为什么Redis 6.0要引入多线程模式?

很简单,就是 Redis 的网络 I/O 瓶颈已经越来越明显了。

Redis 最初选择单线程网络模型的理由是,CPU 通常不会成为性能瓶颈,因此单线程足够了。

但是,近年来底层网络硬件性能越来越好,Redis 的性能瓶颈逐渐体现在网络 I/O 的读写上,单个线程处理网络 I/O 读写的速度跟不上底层网络硬件执行的速度。

图片图片

Redis 使用了单线程的 I/O 模型,主要负责处理客户端请求和执行命令,这意味着 Redis 在处理 I/O 操作时是阻塞的,当有大量的客户端连接时,可能会导致性能瓶颈。

既然读写网络的 read/write 系统调用占用了Redis 执行期间大部分CPU 时间,那么要想真正做到提速,必须改善网络IO性能。

所以,Redis6.0 版本之后,Redis 正式在核心网络模型中引入了多线程,也就是所谓的 I/O threading,至此 Redis 真正拥有了多线程模型。

图片图片

Redis 6.0 引入了多线程 I/O 模型,这是为了更好地利用多核 CPU 和提高 I/O 操作的并发性能。

虽然主线程仍然是单线程的,但在处理网络事件和文件 I/O 操作时,Redis 使用了多个辅助线程来分担负载。

Redis多线程模型总结

Redis 从 Redis 6.0 开始引入了多线程 I/O 模型,以提高在处理网络事件和文件 I/O 操作时的性能和并发能力。

多线程 I/O 模型允许 Redis 更好地利用多核 CPU,通过多个辅助线程来分担负载,提高了并发性能。

主线程仍然是单线程的,但后台工作线程用于执行 I/O 操作,例如处理客户端连接、数据读写以及持久化操作。

总的来说,Redis 的多线程设计主要用于优化 I/O 操作和提高并发性能,而主要的命令处理仍然由单个线程负责,以确保数据的一致性。

这个设计使得 Redis 在大多数情况下能够以极高的性能和低延迟响应请求,特别适用于缓存、消息队列和数据存储等用途。

责任编辑:武晓燕 来源: mikechen的互联网架构
相关推荐

2021-06-11 11:28:22

多线程fork单线程

2020-11-09 09:33:37

多线程

2023-08-17 14:12:17

2020-09-23 13:37:25

Redis6.0

2023-12-01 08:18:24

Redis网络

2023-09-25 08:32:03

Redis数据结构

2023-10-04 00:32:01

数据结构Redis

2020-11-17 10:20:53

Redis多线程单线程

2022-01-04 11:11:32

Redis单线程Reactor

2020-09-14 08:45:58

多线程模型面试

2019-08-16 09:41:56

UDP协议TCP

2021-09-30 07:59:06

zookeeper一致性算法CAP

2009-07-10 09:05:20

SwingWorker

2022-03-29 08:23:56

项目数据SIEM

2021-05-07 07:52:51

Java并发编程

2021-01-28 11:17:49

Python爬虫单线程

2019-10-29 20:13:43

Java技术程序员

2024-03-26 00:00:06

RedisZSet排行榜

2024-08-27 11:00:56

单例池缓存bean

2017-03-30 22:41:55

虚拟化操作系统软件
点赞
收藏

51CTO技术栈公众号