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,并接触关联。

posted on   太白金星有点烦  阅读(34)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示