前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 单线程模型 精讲

Redis 单线程模型 精讲

作者头像
AI码师
发布2022-12-22 10:16:41
4350
发布2022-12-22 10:16:41
举报

B站(乐哥聊编程)有完整配套视频,免费观看

为什么Redis是单线程?

这个是由Redis的实现机制决定的,Redis网络事件处理器是基于文件事件处理器实现的,这个文件事件处理器是单线程的,所以决定了Redis是以单线程运行

文件事件

构成组件

  • 多个socket
  • I/O多路复用程序
  • 文件事件分派器
  • 命令请求处理器
  • 命令回复处理器
  • 连接应答处理器
  • 时间处理器(做定时用)

I/O多路复用的实现

文件事件处理器

连接应答处理器

当Redis初始化时,程序会将连接应答处理器与服务端监听套接字的AE_READABLE事件关联起来,当有客户端通过socket连接服务端时,套接字就会产生AE_READABLE事件,引发连接应答处理器执行,并执行相应的套接字应答操作。

命令请求处理器

当一个客户端通第一步通过socket与服务端连接成功后,服务端将会把该socket的AE_READABLE事件和命令请求处理器关联起来,当客户端向服务端发起命令请求时,如 get xxx,set xxx,套接字就会产生AE_READABLE事件,关联的命令请求处理器就会被执行

命令回复处理器

当服务端需要给客户端响应时,服务端会将客户端套接字的AE_WRITABLE事件和命令回复处理器关联,当客户端准备好接受响应数据时,就会触发AE_WRITABLE事件,执行关联的命令回复处理器的程序,执行对应的套接字写入操作,当数据写入完毕,就会将客户端套接字的AE_WRITABLE事件和命令回复处理器解绑,但是客户端套接字的AE_READABLE事件还是会和命令请求处理器关联。

完整的客户端与服务端交互流程

1.server初始化后,在serversocket上注册AE_READABLE事件,并与连接应答处理器关联

2.客户端请求与服务端建立连接,server收到AE_READABLE事件,通过事件分发处理器,找到关联的连接应答处理器,执行应答程序,并且注在客户端的socket上注册AE_READABLE事件,并与命令请求处理器关联

3.客户端发起命令请求,如set a 1,server会收到AE_READABLE事件,通过事件分发处理器,找到关联的命令请求处理器,在内存中执行命令,并在client的套接字上注册AE_WRITABLE事件,并与命令回复处理器绑定

4.客户端告诉server自己准备好接受响应数据了,server会收到AE_WRITABLE事件,通过事件分发处理器,找到关联的命令回复处理器,将数据写入套接字,写入完毕,再将Ae_WRITABLE与命令回复处理器解绑。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐哥聊编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么Redis是单线程?
  • 文件事件
    • 构成组件
      • I/O多路复用的实现
        • 文件事件处理器
          • 连接应答处理器
          • 命令请求处理器
          • 命令回复处理器
      • 完整的客户端与服务端交互流程
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档