Redis网络模型

redis为什么快

1.主要原因是因为redis是基于内存操作的,比起直接操作磁盘速度快好几倍

2.基于内存的数据库瓶颈主要是在网络io这一块,redis网络模型 采用io多路复用技术能够高效的处理并发连接。

3.redis使用单线程执行命令,可以避免上下文切换带来的消耗,同时使用多线程处理网络io。

什么是io多路复用?

在这之前我们先了解一下io,网络io又可以为,BIO( 阻塞 io),NIO( 非阻塞 io) AIO( 异步 io)

BIO:当我们应用层想去获取数据时,由于操作系统还没有我们想要的数据,此时recvfrom函数会一直等待直到能获取数据,这个等待的过程就像被阻塞了一样。

NIO:当我们每一次调用recvfrom函数获取数据时,由于数据不存在,操作系统会直接返回结果,并不断的发起recvfrom直到获取数据。就像你们追心爱的女神一样,尽管被拒绝多次,还不停的示爱,总觉得他一定会返回你想要的结果。缺点就是不断的recvfrom做无用的功浪费资源。

什么又是多路复用呢?

如果我们每一个获取数据的请求都交给一个线程处理,我们应用层肯定是有并发请求的,显然我们操作系统共享资源肯定是不足够的。此时我们的计算机行业伟人'牛顿'提出一个想法,让一个线程去监听多个事件fd。什么又是事件fd呢,你可以简单理解成我们每一个io请求在操作系统都有一个存放的地址,我们可以根据这个fd去找到该地址有没有存放数据。

AIO **:**应用程序发起异步 I/O 请求。内核启动 I/O 操作,应用程序可以继续执行其他任务。I/O 操作完成后,内核通知应用程序(回调函数)。应用程序处理 I/O 结果,如读取数据或发送响应。

相关推荐
DCTANT11 分钟前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
AI、少年郎2 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄2 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
DataGear3 小时前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
weixin_438335403 小时前
分布式锁实现方式:基于Redis的分布式锁实现(Spring Boot + Redis)
数据库·redis·分布式
暮乘白帝过重山3 小时前
为什么要写RedisUtil这个类
redis·开发·暮乘白帝过重山
码不停蹄的玄黓3 小时前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志
Qdgr_3 小时前
价值实证:数字化转型标杆案例深度解析
大数据·数据库·人工智能
数据狐(DataFox)4 小时前
SQL参数化查询:防注入与计划缓存的双重优势
数据库·sql·缓存
Arthurmoo4 小时前
Linux系统之MySQL数据库基础
linux·数据库·mysql