Redis单线程为什么能这么快

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

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

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

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

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

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

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

accept → 建立连接成功 1

recv → 接受数据成功 2

parse

套接字是默认阻塞的

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

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

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

IO多路复用

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

→进行封装→Reactor模型

相关推荐
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里5 天前
java中的继承和多态的区别
java
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕5 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖5 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时5 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读5 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang5 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车5 天前
C/C++ 为什么需要编译器?
开发语言·c++