23.redis为啥这么快?
1.redis为什么那么快:
- 绝大部分请求时纯粹的内存操作(非常快速)
- 采用单线程,避免了不必要的上下文切换和竞争
- 非阻塞IO,内部采用epoll,epoll中的读、写、关闭、连接都转为了事件,然后利用epoll的多路复用特性,避免io代价
2.redis的线程模型:
redis内部使用文件事件处理器(file event handler),这个文件事件处理器是单线程的,所以redis才叫做单线程的模型。它采用io多路复用机制同时监听多个socket,根据socket上的事件来选择对应事件处理器进行处理。
文件事件处理器的结构包含4个部分:
- 多个socket
- io 多路复用程序
- 文件事件分派器
- 事件处理器(连接应答处理、命令请求处理、命令回复处理器)
多个socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是io多路复用程序会监听多个socket,会将socket产生的事件放入队列中进行排队,事件分派器每次从队列中取出一个事件,把该事件交个对应的事件处理器进程处理。
这里看看redis单线程处理请求流程
1)首先接受客户端的socket请求,多路复用器将socket转給连接应答处理器;
2)连接应答处理器AE_READABLE事件与命令请求处理器想关联(这里是把socket事件放入一个队列中)
3)命令请求处理从socket中读到指令,在内存中执行,并将AE_READABLE事件与命令回复处理关联
4)命令回复处理器将结果返回给socket,并接触关联。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~