Redis单线程为什么能这么快

1.Redis大部分操作发在内存中完成

2.选择了很多高效的数据结构,一种对象底层有几种实现以应对不同场景

3.Redis采用了多路复用机制,一个线程监听多个通道,能并发处理大量的客户端请求

每次客户端与服务端进行连接,会生成一个文件描述符file description

主要是第三点,单线程我们会在哪里阻塞,多路复用又帮了我们什么?

Redis在内存中处理数据,I/O是瓶颈之一

一般来说,客户端发送数据,我们需要三个过程来进行读取,分别是

accept → 建立连接成功 1

recv → 接受数据成功 2

parse

套接字是默认阻塞的

一般1和2都会产生时间进行阻塞

我们使用非阻塞模式,如果没数据,就不会阻塞在那里

然后我们通过一个循环来不断轮询(不断检查各个IP通道的状态,决定操作是否需要执行)

IO多路复用

每次IO操作触发,产生通知,通知就会触发另外一些操作

→进行封装→Reactor模型

相关推荐
AI人工智能+电脑小能手12 小时前
【大白话说Java面试题 第112题】【并发篇】第12题:AQS 中节点的入队时机有哪些?
java·开发语言·面试
摇滚侠12 小时前
SpringMVC 入门到实战 处理静态资源的过程 64
java·后端·spring·maven·intellij-idea
影寂ldy12 小时前
C# 泛型委托
java·算法·c#
摇滚侠12 小时前
MyBatis 入门到项目实战 MyBatis 核心配置文件 15-19
java·tomcat·mybatis
IT WorryFree12 小时前
Zabbix 7.4 API 可同步全量参数清单(同步第三方系统专用)
java·开发语言·zabbix
RoboWizard13 小时前
一块硬盘上架前要闯多少关?
java·服务器·数据库
码云骑士13 小时前
06-Python装饰器从入门到源码(上)-闭包与自由变量
开发语言·python
半夜燃烧的香烟13 小时前
docker 安装minio nginx,配置nginx根据文根路由minio展示图片
java·nginx·docker
吴阿福|一人公司13 小时前
深度解析 Python 类变量修改的命名空间隔离
java·服务器·数据结构
zzz_236813 小时前
【Java基础】链表的七十二变——从LRU缓存到手写浏览器前进后退
java·链表·缓存