0

0

Redis选择单线程的原因是什么

PHPz

PHPz

发布时间:2023-05-30 13:01:33

|

2316人浏览过

|

来源于亿速云

转载

一、Redis版本迭代

redis选择单线程的原因是什么

Redis2.6,支持lua脚本;

Redis3.0,支持集群;

Redis4.0,混合持久化,多线程异步删除;

Redis5.0,核心代码重构;

Redis6.0,多线程IO;

Redis7.0,Function、Multi-part-AOF;

二、Redis4.0之前为什么一直采用单线程?

1、Redis采用单线程模型方便开发和维护;

2、单线程模型也可以通过IO多路复用和非阻塞IO并发处理多客户端请求;

3、对于Redis来说,主要的性能瓶颈是内存和网络,而不是CPU;

三、Redis6.0引入多线程

Redis6.0之前,Redis从网络IO处理到实际的读写命令处理,都是单线程的,只不过在数据删除、数据持久化的时候使用的是多线程。

Redis的性能瓶颈主要是网络IO,因此,Redis6.0开始,采用多个IO线程来处理网络请求,提高网络请求处理的并行度。

四、Redis主线程和IO线程是如何完成请求的?

Redis选择单线程的原因是什么

1、服务端和客户端建立socket连接

主线程负责建立连接,并把socket放入全局等待队列,主线程通过轮询的方法将socket连接分配给IO线程。

2、IO线程读取并解析请求

主线程一旦把socket分配给IO线程,就会进入阻塞状态,等待IO线程完成客户端请求,此时,采用多个IO线程并行处理。

DaGaoPeng(大高朋网团购程序)
DaGaoPeng(大高朋网团购程序)

大高朋团购系统是一套Groupon模式的开源团购程序,开发的一套网团购程序,系统采用ASP+ACCESS开发的团购程序,安装超简,功能超全面,在保留大高朋团购系统版权的前提下,允许所有用户免费使用。大高朋团购系统内置多种主流在线支付接口,所有网银用户均可无障碍支付;短信发送团购券和实物团购快递发货等。 二、为什么选择大高朋团购程序系统? 1.功能强大、细节完善 除了拥有主流团购网站功能,更特别支

下载
3、主线程执行请求命令

IO线程解析完请求,主线程还是会以单线程的方式执行这些命令。

4、IO线程会写回socket和主线程清空全局队列

当主线程执行完请求命令后,会将结果写入缓冲区,主线程进入阻塞状态,等待IO线程将结果回写到socket中,并返回给客户端。

回写socket完毕后,主线程清空全局队列。

五、IO多路复用是什么?

IO多路复用,一种同步的IO模型,实现一个线程监视多个文件句柄,一旦某个文件句柄就绪就能够通知到对用的应用程序进行对应的读写操作,没有文件句柄就绪时,程序就会进入阻塞状态,释放CPU资源。

1、IO,操作系统层面指数据在内核态和用户态之间进行的读写操作;

2、多路,多个客户端socket连接;

3、复用,复用线程;

4、IO多路复用,使用单线程就能够同时处理多个客户端socket连接;

客户端socket对应的文件描述符FileDescriptor注册进epoll,epoll会监听哪些socket有消息,避免大量的无用操作。

此时socket采用非阻塞模式,整个过程只在调用select、poll、epoll时才会阻塞,收到客户端消息不会阻塞,这个进程就会被充分利用起来,这种模式一般被称为事件驱动,也就是reactor反应模式。

采用epoll的方式,最终目的是提高服务器的吞吐能力。

IO多路复用与epoll函数才是**“Redis为什么这么快?”**的直接原因。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

481

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

143

2025.12.24

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

143

2025.12.24

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

478

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

163

2023.10.07

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

973

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

633

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

480

2024.04.02

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

0

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号