不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • Langchain
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • Langchain
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • MySQL

  • Redis

    • 01.Redis安装
    • 02.Redis基础
    • 03.Redis底层存储 ✅
    • 04.各种数据类型操作
    • 05.Redis连接和基本操作
    • 06.Redis线程模型 ✅
      • 01.Redis 线程模型
        • 1、线程模型概述
        • 2、6.0前单线模式
        • 3、6.0为什么引入IO多线程
        • 1、引入原因
        • 2、引入后工作流程
    • 07.Redis持久化 ✅
    • 08.Redis集群 ✅
    • 09.雪崩穿透击穿
    • 10.Redis锁代码
    • 11.Redis缓存
    • 12.部署Redis主从
    • 13.Redis的cluster配置
    • 14.Redis哨兵模式
    • 15.Redis淘汰策略 ✅
    • 16.CAP ✅
  • Elasticsearch

  • Kafka

  • Etcd

  • MongoDB

  • TiDB

  • RabbitMQ

  • 数据库
  • Redis
xiaonaiqiang
2024-03-15
目录

06.Redis线程模型 ✅常识原理

Redis 使用单线程 Reactor 模型处理命令,主要通过主线程完成客户端请求的接收、解析、数据操作和响应发送。

6.0 版本之前,Redis 仅使用单线程处理所有任务,而 6.0 后引入了多线程来处理 I/O 操作,提升了网络性能。

多线程仅用于网络 I/O,如数据的读取和写入,核心的命令执行仍由单线程完成,确保数据操作的安全性与一致性。

这种改进提高了 Redis 的吞吐能力,特别适合高并发场景。

# 01.Redis 线程模型

# 1、线程模型概述

  • Redis 底层是 Reactor模型,Reactor模型有三种

    • 单线程Reactor模型
    • 多线程Reactor模型
    • 主从Reactor模型
  • Redis 单线程理解

    • Redis单线程主要指Redis-server主线程,不是说Redis生命周期只有一个线程

    • Redis单线程,指的是命令处理、逻辑处理在一个单线程中

    • 接收客户端请求-->解析请求 -->进行数据读写等操作-->发送数据给客户端 是主线程完成

    • 而是其主线程(即下图的任务队列以及事件分派器)为单线程

# 2、6.0前单线模式

  • 1)建立连接(连接事件)

    • 1、建立连接
      • 客户端尝发送TCP连接请求,连接请求被操作系统内核接收并放入等待队列
      • IO多路复用器监控等待队列,发现新连接请求,将其放入事件队列,等待被处理
    • 2、文件分派器
      • 文件分派器将会从事件队列中取出这个新的连接请求,将其分配给连接应答器(acceptor)处理
    • 3、连接应答器
      • 连接应答器的任务是接受新的连接请求,建立新的socket连接
      • 连接应答器将新的socket放入IO多路复用器监控的文件描述符集合,并向IO多路复用器发送一个读就绪信号
  • 2)处理客户端请求(读事件)

    • 客户端发送请求到Redis服务器时,请求被IO多路复用器标记为读事件
    • IO多路复用器接收到读事件后,会将其放入事件队列中
    • Redis主线程会从事件队列中取出读事件,然后调用相应的事件处理器来处理
    • 读事件处理器将请求数据解析成Redis命令和参数,根据命令类型调用相应的命令处理函数来处理
    • 命令处理完毕后,Redis会生成一条回复消息,并将其标记为一个写事件,等待被发送回客户端
  • 3)数据发送给客户端(写事件)

    • 当有数据需要发送回客户端时,这个发送操作会被标记为一个写事件
    • IO多路复用器会将写事件放入事件队列中
    • 主线程会从事件队列中取出写事件,调用相应的事件处理器来处理这个事件
    • 对于写事件,Redis会调用写事件处理器,将回复消息写入到socket,然后发送给客户端
  • 注1:

    • 读事件和写事件都是异步处理的,不会因为一个读事件或写事件阻塞住
    • 而是会将事件放入事件队列,然后继续处理其他的事件
  • 注2:下图“写发送队列”指的是返回数据给客户端,这个过程需要写入到 socket

# 3、6.0为什么引入IO多线程

# 1、引入原因

  • 在 Redis 6.0 版本之后,也采用了多个 I/O 线程来处理网络请求

  • 因为随着网络硬件的性能提升,Redis的性能瓶颈有时会出现在网络 I/O 的处理上

  • 所以为了提高网络 I/O 的并行度,Redis 6.0对于网络 I/O 采用多线程来处理

  • 但是对于命令的执行,Redis 仍然使用单线程来处理

  • 即多线程处理网络IO(``read、decode和encode、send`阶段)

  • 主线程使用单线程,执行命令处理业务逻辑

# 2、引入后工作流程

  • 主线程:执行命令,将结果写入队列

  • 工作线程:读取请求数据、从队列中读取数据到 socket、关闭 socket 等

原因:Redis 的数据结构和操作都不是线程安全的,如果同时有多个线程对数据进行读写,可能会导致数据的不一致

  • 6.0 后依然需要一个主线程,可以有多个工作线程处理用户 I/O
  • 1)工作线程接收到客户端请求,从 socket 中读取请求数据
  • 2)主线程解析出请求命令和参数,执行请求命令,获取或修改数据,然后生成响应数据
  • 3)主线程将响应数据写入一个中间队列,然后唤醒工作线程
  • 4)工作线程从中间队列中取出响应数据,然后将数据写入 socket,发送给客户端

参考 (opens new window)

#转载
05.Redis连接和基本操作
07.Redis持久化 ✅

← 05.Redis连接和基本操作 07.Redis持久化 ✅→

最近更新
01
05.快递Agent智能体
06-04
02
200.AI Agent核心概念
06-04
03
105.Agent智能体梳理
06-04
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式