首页>软件资讯>常见问题

常见问题

Redis不同版本的线程模型

发布时间:2025-11-17 09:54:25人气:0

redis不同版本线程模型特点


版本
线程模型特点
Redis 3.x
单线程的,存在 大key 删除问题
Redis 4.x
支持了部分多线程操作,主要是为了解决 3.x 的大key操作导致的超时性能问题
Redis 6.x
是多线程的。目的是降低网络IO的时间消耗



Redis 3.x 单线程为什么这么快“基于内存操作,Redis的所有数据都在内存中,因此所有的运算都是内存级别的,性能高。 2. 数据结构简单,Redis的数据结构是为自身专门量身打造的,而这些数据结构的查找和操作的时间复杂度都是 O(1)。 3. 多路复用和非阻塞I/O,Redis使用I/O多路复用功能来监听多个socket连接客户端,这样就可以使用一个线程来处理多个情况,从而减少线程切换带来的开销,同时也避免了I/O阻塞操作,从而提高了Redis的性能 4. 避免上下文切换,单线程模型避免了不必要的上下文切换和多线程竞争,避免多线程切换带来的时间和性能上的开销,而且单线程不会线程互斥等待的问题。

为什么单线程Redis如此快.png

单线程性能这么高,为什么要引入多线程?Redis中的写入和读取速度非常快,并且CPU使用率从来不是Redis关心的问题。 根据Redis官方文档,在普通Linux系统上运行时,Redis每秒最多可以处理100万个请求。但是现在的tps限制在10W,问题在哪?网络IO限制瓶颈来源于网络I/O, 即使在网络连接中采用了IO多路复用的epoll机制, Redis中的处理时间大部分浪费在等待网络I/O上。 虽然多线程架构允许应用程序通过上下文切换并发处理任务,但这对Redis的性能增益很小,因为大多数线程最终会在I/O中被阻塞。


Redis性能.png

在6.0之前,Redis性能很高,但是如果想继续提升吞吐量,瓶颈不是CUP而是网络IO,简单一点说,网络IO是请求入口,如果入口一直就这么大,后面的命令执行再快,也没有办法,所以在6.0新增了网络IO多线程,扩大流量入口。Redis6的线程模型在Redis6中,引入多线程处理网络IO,注意是多线程处理网络IO,模型如下


模型.png

在Redis 6中引入了多线程进行IO读取响应操作。单线程和多线程的性能对比

线性对比.png

对比.png


从图中可以看到多线程IO比单线程性能高了近2倍。



上一条:Redis缓存一致性问题

下一条:Redis优化性能