当前位置: 首页 > news >正文

Redis--多路复用

🧩 一、什么是“客户端连接”?

所谓 客户端连接 Redis,指的是:

一个程序(客户端)通过网络连接到 Redis 服务端(比如 127.0.0.1:6379),建立一个 TCP 连接,双方可以互相发送消息(命令/结果)。

这个“客户端”可以是:

  • 你写的 Java 项目(比如用 Jedis、Lettuce);

  • 你用 redis-cli 工具;

  • Python、Node.js、Go 写的服务,只要它访问 Redis,就是一个客户端。


🎯 什么时候会建立客户端连接?

  1. 你第一次在代码里用 Redis 时,比如:

Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.get("user:1");

这行代码就会主动建立一个 TCP 连接到 Redis!

  1. 多个线程/服务同时访问 Redis,每个线程或连接池里的连接,都会和 Redis 建一个连接。

  2. Redis 客户端连接是**“长连接”**(不是请求完就断),多个命令会复用同一个连接。


🖥 举个例子:

假设你有一个电商系统:

  • 10 个接口要查 Redis 的库存信息;

  • 每个接口用的是独立的连接;

  • 那么 Redis 就会有 10 个客户端连接。

这些连接 Redis 会“记住”,维护它们的 socket,等有命令发过来就处理。


🔁 有多路复用 vs 没有多路复用,有啥区别?

✅ 有多路复用(Redis 的方式)

  • Redis 用一个线程监听所有客户端连接;

  • 哪个连接来了命令,就处理哪个;

  • 没有命令的连接挂起,不浪费资源;

  • 高效、轻量,单线程高并发。

❌ 没有多路复用(传统方式)

  • 每个连接都起一个线程;

  • 10 个连接就 10 个线程,1000 个连接就 1000 个线程;

  • 线程太多会造成系统开销大、调度慢、CPU 压力大;

  • 容易性能下降、响应慢。


📌 打个比方

  • 有多路复用:你是前台接待员,戴了高科技耳机(epoll),可以同时监听 1000 个客户叫你,一旦有人说话你就回应;

  • 没多路复用:你请了 1000 个接待员,每人守一个窗口,可能大多数人都在发呆,还要发工资(消耗资源)。

✅ 什么是 Redis 的多路复用?

Redis 的多路复用是一种基于事件驱动的 I/O 机制,用于在单个线程中同时监听和处理多个客户端连接的读写事件。

它的核心原理是利用操作系统提供的 I/O 多路复用接口(如 epollkqueue),实现:

  • 在一个线程里同时监听上千个 socket(即客户端连接);

  • 哪个连接有数据就处理哪个,其他连接保持挂起,不占用资源。

Redis 通过 ae 模块实现了对不同操作系统多路复用接口的统一封装。


🌟 有什么好处?

好处说明
1. 高并发单线程就能同时处理成千上万客户端连接,不需要开多个线程
2. 性能高减少线程切换和上下文开销,CPU 利用率高
3. 编程简单所有命令在一个线程中顺序执行,避免了加锁和线程安全问题
4. 响应快所有请求都是内存级操作,搭配非阻塞 I/O,响应非常迅速


📌统一回答:

Redis 的多路复用是一种基于 I/O 多路复用机制的事件驱动模型,它允许 Redis 在一个线程中同时监听多个客户端连接的读写事件。底层通过 epoll(Linux)、kqueue(macOS)等实现,从而做到高并发、高性能的处理请求。它的好处是减少资源占用、避免线程切换,同时保持了 Redis 命令的原子性和简单性。

http://www.xdnf.cn/news/1173151.html

相关文章:

  • CI/CD与DevOps集成方法
  • 删除远程分支上非本分支的提交记录
  • ElasticSearch基础数据管理详解
  • 基于Python(Django)+MongoDB实现的(Web)新闻采集和订阅系统
  • 数据结构自学Day13 -- 快速排序--“挖坑法”
  • Java冒泡排序的不同实现
  • 阿里云ODPS十五周年重磅升级发布:为AI而生的数据平台
  • Leetcode力扣解题记录--第54题(矩阵螺旋)
  • 负压产生电路分析
  • HakcMyVM-Luz
  • 前端实现可编辑脑图的方案
  • 【世纪龙科技】汽车专业数字课程资源-新能源汽车维护与故障诊断
  • 亚远景-传统功能安全VS AI安全:ISO 8800填补的标准空白与实施难点
  • ​多线程 + io_uring 实现高效大文件写入
  • MCP:UVX的安装
  • JS逆向基础( AES 解密密文WordArray和Uint8Array实战②)
  • 在线深凹槽深检测方法都有哪些 —— 激光频率梳 3D 轮廓检测
  • 【Word Press基础】创建一个动态的自定义区块
  • 探索大语言模型(LLM):提升 RAG 性能的全方位优化策略
  • 主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时间细胞对NLP中的深层语义分析的积极影响和启示
  • OpenCV(01)基本图像操作、绘制,读取视频
  • 【趣味解读】淘宝登录的前后端交互机制:Cookie-Session 如何保障你的账户安全?
  • 网络基础DAY18-动态路由协议基础
  • Python笔记之跨文件实例化、跨文件调用、导入库
  • 基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(下)
  • 用Phi-3 Mini微调实现英文到尤达语翻译
  • SpringCloud sentinel服务熔断 服务降级
  • 希尔排序cc
  • 电子电气架构 --- 汽车软件全生命周期
  • Cesium绘制圆锥