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

Redis真的是单线程的吗?

Redis提及它的优势点就是它的速度非常快。当我们提及Redis是否是单线程的时候我们可能会回答它的设计就是单线程访问内存存储的数据所以很快。但是你有没有考虑过为什么它的架构使用单线程?为什么隔壁的MySQL虽然访问的不是内存但是使用的还是多线程呢?以及Redis真的就是单线程的吗?

我们在说到这个问题的时候就要分清Redis6.0之前和之后的版本来讨论了。

Reids6.0之前版本:

Redis 6.0之前在I/O层面的传输采用的是Redis服务器单线程获取,业务服务器使用Socket池将业务数据并行的传输给Redis的缓冲区中,然后Redis单线程使用epll_wait()来获取数据。

“接收数据 → 解析命令 → 执行命令 → 发送响应”整个流程全部由同一个主线程串行完成

任何一个步骤耗时过长(如 KEYS、SORT 等慢命令)都会阻塞后续所有请求

Redis6.0之后版本:

其实在Redis4.x版本已经在负责处理客户端请求的线程单线程,但是开始加了一些多线程的内容比如异步删除;在Reids6.x中全面支持了多线程。但是这个多线程也是在网络I/O中接受数据使用多线程,在命令执行中还是单线程的进行。

为什么就算是到了6.x版本仍然是单线程进行命令的处理呢?

如果想要使用多线程带来的遍历就得设计一个完美的多线程的架构方案,单线程的优势是不用考虑多线程带来的线程不安全的问题,并且redis直接操作内存已经很快了并且还有高效的数据结构,比如跳表,哈希进行查询。所以它的性能瓶颈可能只是在网络传输中比较慢。

http://www.dtcms.com/a/313844.html

相关文章:

  • 跟着顶刊学写论文-摘要1
  • codeBuddy IDE 使用教程
  • Web 开发 12
  • ZYNQ-按键消抖
  • labview解析S7协议
  • Neo4j 社区版 Mac 安装教程
  • Django集成图片验证码功能:基于django-simple-captcha实现
  • 数据结构----排序
  • EdgeView for macOS:解决图像管理痛点的利器
  • c# 属性操作(2)
  • PyCharm代码规范与代码格式化插件安装与使用:pylint和autopep8
  • javacc学习笔记 01、JavaCC本地安装与测试
  • C++-异常
  • Go语言实战案例:编写一个简易聊天室服务端
  • 从零开始的云计算生活——项目实战
  • 【Pytorch✨】LSTM04 l理解长期记忆和短期记忆
  • 计算机视觉(1)-图像采集设备选型全景表(工业 + 医疗 + 车载)
  • 编程算法:技术创新与业务增长的核心驱动力
  • 【Spring AI快速上手 (一)】ChatModel与ChatCilent构建对话
  • Rust:如何开发32位的DLL动态库
  • 单向链表(补充)与linux虚拟机网络配置
  • JS--获取事件的子元素与父元素
  • ZooKeeper 深度实践:从原理到 Spring Boot 全栈落地
  • 【unitrix】 7.1 二进制位加法(bit_add.rs)
  • 哪些第三方 Crate 可以直接用?
  • Mac桌面仿制项目--让ai一句话生成的
  • Qt 使用QtXlsx库处理Excel文件
  • Druid学习笔记 01、快速了解Druid中SqlParser实现
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:General Purpose I/O (GPIO)通用输入 / 输出
  • Linux文件权限管理全解