当前位置:

首页 > 编程开发 > Redis线程模型是什么

Redis线程模型是什么

Redis Assistant
Redis Assistant

Redis Assistant 是一款为Redis设计的高效可视化管理与监控工具,提供多种操作模式,高效处理服务器数据。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

立即下载
¥19
Windows/macOS/Linux 2026-08-22
正版软件 Windows macOS软件 Linux 数据库管理工具

Redis它是一个单线程的,这一点需要去注意的。首先我们呢会有一个客户端,这个客户端在我们之前其实使用的是一个redisclient这样的一个工具去连接的redisserver。如果说我们后续再整合到java里面去的话,在java里面其实也会提供相应的客户端的。随后我们会有一个redisserver,这个其实就是我们的一个redis,它整个服务在启动以后,它是会有一个进程的。在我们的release里面,在内部它其实会有两个东西。首先一个它会有一个多路复用器,这个我们上节课已经是介绍过了,它是非阻塞的一个模

本文目录

    Redis线程模型是什么
    Redis它是一个单线程的,这一点需要去注意的。

    首先我们呢会有一个客户端,这个客户端在我们之前其实使用的是一个redis client 这样的一个工具去连接的redis server。
    如果说我们后续再整合到java 里面去的话,在java 里面其实也会提供相应的客户端的。

    随后我们会有一个redis server,这个其实就是我们的一个redis,它整个服务在启动以后,它是会有一个进程的。
    在我们的release 里面,在内部它其实会有两个东西。

    首先一个它会有一个多路复用器,这个我们上节课已经是介绍过了,它是非阻塞的一个模型。
    随后它其实还会有一个文件事件分配器,它专门是用于去分配一些事件的。

    在这个下面,它会分为三个不同的处理器,分别来看一下。

    首先呢有一个连接应答处理器,最后的是一个命令请求处理器,还有是一个命令回复处理器。

    如何去理解呢?首先我们先来看一个连接应答处理器。

    连接应答处理器的话,它的一个主要作用是要和我们的客户端去保持一个链接。
    像我们的一个redis server一旦启动了以后,其实呢我们就会有read 的这样的一个事件和我们的连接应答器会捆绑到一起。
    它的全称其实叫做AE_readable。你就可以把它理解为是一种标志啊,它会有这样的一个事件,这个事件是会和我们的连接应答处理器捆绑到一起的。

    最后当我们的一个客户端和咱们的server 要去建立连接的时候,这个其实也就是我们在一开始在命令行工具里面敲下了一个redis client,一开始的话肯定是需要和我们的server 去建立连接嘛。建立连接的时候,他其实就会发送一个read 标志,其实就是一个read 的时间,这个时候的话,在我们的redis server 里面,它其实会有一个叫做server socket。

    server socket 和我们的一个客户端socket 其实是对应的,他们是属于网络编程里面的一块内容,他们之间是一个socket 的通信。在我们接触到read 这样的一个事件了以后,随后我们呢就会交由咱们的多路复用器去进行处理吧。
    交给他去处理以后的话,其实他是一个非阻塞的,拿到了以后一旦接收,他就会把它放到我们这样的一个箭头里面去。

    这个箭头的话在这边其实我们可以称之为它是一个管道pipeline,或者我们也可以把它称之为是一个队列。它会往这里面丢,丢进去以后,这个世界呢其实就会到达我们的文件事件分配器。这个分配器当它识别到它是一个read 这样的事件以后,它就会和我们的这个连接应答处理器去做到一个匹配,也就是交由它去进行一个处理。
    它是一个read 相互进行一个匹配。
    这个时候的话其实就可以表明咱们的client 和server 这两端就是建立了一个连接。建立好连接了以后这个read 标识的话,这个事件它其实就会交由给我们的命令请求处理器。这个命令请求处理器的话,你就可以认为它是专门去处理请求的,也就是一个request。然后命令回复处理器,你可以把它理解为是一个response,也就是一个响应。

    随后我们在客户端可能要去,比方说我们要去set 一个值,对吧?set 一个值的话,比方说set name *** 这样子的话,其实它是一个命令嘛。
    这个命令的话它的一个世界类型其实也是一个read。随后呢经过server socket 再丢给多路复用器,拿到以后放到咱们的队列里面去再交由文件事件分配器。

    这个文件事件分配器拿到以后,它会进行一个判断吧,它会判断匹配是read的事件。它这个时候是一个read的事件的时候,就会让我们的命令请求处理器去处理咱们的命令。他就会去识别了呀,他会去识别当前就是一个set name ***,所以他就要去做一个处理。他要把我们用户所设置的一个内容,把这个键值做一个存储,存储到咱们的内存里面去。这个其实就是一个命令请求的处理,就是一个request 。

    当它处理完毕以后,随后的话它会分配一个white,也就是写的一个标识。这个写的标识的话,在这边的话,其实呢我们就可以把它作为响应。因为我们的一个请求其实在处理完毕之后,在我们输入完毕一个命令以后,可能会看到一个ok 对吧?这个ok 的话其实就相当于是我们的一个命令回复处理器回写给我们的一个内容。所以他会用到一个write写的一个标记。这样子我们的一个写的标记其实是会和我们命令回复处理器是捆在一起的。write 的话,其实它的全称是叫做AE_writable 这样的一个事件类型的。

    好,随后在我们的客户端这个地方,其实我们就需要去做一个回写也。就是ok 或者说我们在查询list,我们要展示list 里面所有的内容的时候,它其实是回写的一个情况。我们要把内容显示在控制台的下方,它是一个write 这样的一个事件类型。随后交由我们的多路复用器再丢给咱们的一个队列,让这个队列分配给我们的一个文件事件分配器的。这个时候会匹配咱们的web 事件。web 事件是匹配到了。

    随后的话,我们的命令回复处理器就会做一个回写。它会把我们的ok 啊或者说是我们的一个获得的一个list 数量,list 里面的内容等等。只要是一些需要展示的内容,他都会是作为一个response,就是把这个响应的内容回写给我们的一个客户端,在客户端上进行一个展示。在我们当前这整个模型里面的话,其实主要就是两个不同的事件,一个叫做readable 的,一个叫做writable 。

    当然我们现在设置的仅仅只是一个客户端,如果说我们会有多个客户端的话,他们的道理也都是一模一样的。这个其实就是release 的一个线程模型。初次接触的话是可能会比较的难以去理解,但是没有关系的。这张图的话其实也是可以辅助大家去加深这个意向。

    然后他整个处理的流程,也是可以跟着我所说的进行理解。为了便于大家的一个理解,我们在这里画一个图啊,来做一个举例。

    Redis线程模型是什么

    假设我们现在呢有一个KTV,这个KTV就是redis。

    然后呢我们有很多的顾客要去唱歌,要去唱歌的话,我们KTV里面肯定会有员工嘛,员工的话我们会分为两大类。
    第一个大类是门口的接待员,第二个是大堂经理。
    门口的接待员其实他就是一个多路复用器,大堂经理的话其实就是一个文件分配器。

    然后呢,我们的顾客肯定是有一些相应的请求吧,或者说是相应的需求,这个时候肯定是要询问我们的门口的接待员,让门口的接待员去做简单的一些处理。
    可能他要去看一下这个用户想要去参加什么样的活动,有没有优惠券等等。

    然后门口的接单员,如果说确定这个顾客要去唱歌的话,就可以说请往后面走,后面有一个通道。这个通道的话其实就是一个队列,你们排着队往这个通道走。走到里面的话,就是我们整个KTV的一个营业厅了。到营业厅里面它会有一个大堂经理,大堂经理的话会去处理我们的一个顾客真实的请求。

    随后在我们的一个KTV里面,其实我们的肯定会有一个包厢,每一个包厢的话是会去处理用户,去处理顾客不同的请求的了。在我们的这个包厢的内部呢,会有三个小姐姐或者小哥哥,他们呢是会为用户去处理不同的一些需求的。

    比方说第一个的话,他就专门是为顾客去开门的。开门这个动作就相当于是我们的一个客户端和release 去建立了一个链接。门打开以后,你就可以进来了,对吧?进来以后的话,这个小姐姐就不负责他相应的一些工作了,他就会把他交给我们的下面的一个人,下面的一个小姐姐或者小哥哥,就是专门为用户去处理一些请求的。

    比方说某一个顾客要点歌的,这个时候就会让点歌的人做一些相应的处理。这个处理的话就是打开电脑去点歌选歌。选完歌了以后,你得要响应给顾客吧。你有没有点好,对吧?你还要把一些话筒麦克风递给顾客,所以这个时候会有一个通知,有这样的一个小姐姐,这个小姐姐会把这个麦克风给到顾客。你现在可以去唱歌了,我们这个歌已经是为你点好了,你去唱吧。

    这个时候其实就完成了一个顾客在KTV里面点歌唱歌这一整个动作。这个其实也就是对应在我们之前,我们在release 这个线程模型里面所提及的某一个客户端执行的一个操作吧。首先是建立连接,然后呢去处理请求,随后呢去响应他的一个请求。这个总共这里是有三步操作。

    在我们这一块里面的话,整个大堂经理以及是他们点歌通知这一系列的操作的话,其实都是在我们的内部去做处理的。也就是基于我们的一个包厢。包厢的话,在我们的redis里面,咱们是不是可以把它作为是一个内存啊,因为redis一个存储读取等等的操作,其实都是基于内存的。所以在内存里面的话它是非常的快的。

    在我们的包厢里面的话,包厢里面你不管是去唱歌还是点一些水果啊,喝一些啤酒啊等等。其实都是基于我们内部的一个包厢去做操作的话,它的一系列的动作等等的话,完成度其实也是非常的快的。

    这个其实就可以为了我们的一个线程模型去做了朴素的理解。对于我们的redis 来讲的话,它其实是一个单线程模式。为什么使用单线程模型会非常的快呢?

    其实主要是有两点。
    第一点的话是我们的一个门口的接待员,其实也就是一个多路复用器。这个多路复用器的话,它是基于一个非阻塞的模型,所以呢它处理起来是非常的快的。它不会因为以前的一种阻塞模式,而一个一个的去等待去响应。现在使用了一个IO多路复用器这样的模型以后,其实它的一个处理效能是非常非常的快的。

    另外一部分就是我们的大堂经理这一块,这一块其实它是基于内存去做操作的。纯内存的操作的话,其实它是会非常非常的快的。

    当然使用了单线程以后,其实它的一个作用也说了,使用单线程的话,它是可以避免在多线程的时候。因为你多线程的话,你有可能会使用到它的一个上下文的一个切换。一旦切换的话,有可能会引起一些问题。另外呢也是可以避免一些相应的损耗的。所以当我们在使用干线模型的时候,它的一个并发性,它的效率是非常非常的高的。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    php72w redis,docker php7安装php-redis
    php72w redis,docker php7安装php-redis

    在Docker环境下为PHP安装Redis扩展:手动编译需下载源码、安装phpize、配置编译并安装,生成redis.so并在php.d目录新建redis.ini加载,重启PHP-FPM;也可直接yum安装php72w-pecl-redis,免手动编译。

    php 如何配置 redis,php 如何设置redis
    php 如何配置 redis,php 如何设置redis

    配置PHP的Redis扩展:先安装Redis服务,从GitHub下载phpredis源码,用phpize编译安装,修改php.ini添加extension=redis.so,重启php-fpm或Apache,通过phpinfo验证并连接Redis。

    c++如何将结构体序列化为Redis兼容的RESP协议格式【深度】
    c++如何将结构体序列化为Redis兼容的RESP协议格式【深度】

    C++结构体无法直接序列化为RESP协议,需手动将字段映射为*N数组嵌套$lenbulkstring形式。整数需转换为字符串并加:前缀,空字符串用$0\r\n,null用$-1\r\n。长度计算需精确到字节数,特别注意二进制安全,同时确保字段顺序与结构体定义一致。

    如何在Golang架构中部署Redict作为高能数据临时存储中转站
    如何在Golang架构中部署Redict作为高能数据临时存储中转站

    Redis作为跨服务临时状态枢纽,需按消息队列、缓存和原子状态三重角色设计。选型用List实现任务分发及延迟重试,Stream用于事件广播与位点回溯。go-redis/v8需配置MinIdleConns、MaxRetries及超时。数据写入应JSON序列化并带type标签、设合理TTL、将关键字段提至顶层。消费通过原子GET+DEL或processedkey

    TP8.0 高并发下库存超卖?Redis 原子递减结合数据库乐观锁控制
    TP8.0 高并发下库存超卖?Redis 原子递减结合数据库乐观锁控制

    在高并发秒杀场景下,利用Redis的减库存原子操作预扣减库存拦截超卖请求,再通过数据库乐观锁(版本号与库存校验)确保最终一致性,异常时回滚Redis库存并借助Lua脚本保证原子性,从而有效防止库存超卖。

    如何在 Go 中利用 go-redis 执行 Lua 脚本优化逻辑
    如何在 Go 中利用 go-redis 执行 Lua 脚本优化逻辑

    在Go中使用go-redis执行Lua脚本可借助原子性解决竞态问题,通过redis.Script封装脚本并自动处理SHA1缓存与重试。需注意KEYS必须为非空切片且所有键在Cluster模式下落在同一slot,ARGV以字符串传入并由tonumber转换。返回值需先检查错误再调用Val(),避免panic。

    TP6.0 基于 Redis SetNX 实现的简单互斥锁机制【并发】
    TP6.0 基于 Redis SetNX 实现的简单互斥锁机制【并发】

    先看一个典型场景:电商秒杀、库存扣减、定时任务重复调度——这些并发冲突在 TP6 应用里屡见不鲜。用 Redis 的 SETNX 做互斥锁,确实是轻量又直接的方案,但“能用”和“稳妥”之间,隔着三层硬功夫:原子加锁、身份校验、合理超时。这三条,差一条就翻车。 很多人第一次上手,直接写 SETNX 加

    TP6.0 如何处理高并发抢购?Redis 原子锁与队列削峰详解【秒杀】
    TP6.0 如何处理高并发抢购?Redis 原子锁与队列削峰详解【秒杀】

    高并发抢购中,Redis的DECR原子操作可安全扣库存;配合think-queue异步削峰,接口仅扣库存和推消息;分布式锁需用SETNXEX加唯一标识,释放时用Lua脚本校验;成功资格后须以数据库事务双写为准,失败时补回Redis库存。

    Golang 实现基于 Redis 的延时任务队列
    Golang 实现基于 Redis 的延时任务队列

    基于Redis的ZSET实现延时队列需解决并发重复消费、失败重试混乱、精度不足及内存爆炸等问题。通过Lua脚本保证取删原子性,使用毫秒级时间戳,对临时错误采用指数退避重试,永久错误记入独立哈希表,并限制最大延迟、定期清理过期任务、使用紧凑序列化格式。

    RedisInsight怎么修改Key的过期时间 Redis操作方法【步骤】
    RedisInsight怎么修改Key的过期时间 Redis操作方法【步骤】

    操作 Redis 的时候,改个 Key 的过期时间其实是个高频场景。特别是做运维排查或者临时调试那会儿,谁也不想反复切命令行窗口、背那些命令参数。好在 RedisInsight 这个图形工具把这事儿做得很顺手——三种方式任选,总有一种合你胃口。 在动手前,先确认一下 Key 当前的 TTL 状态是个

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?