Redis基础(七)——事件、服务器、客户端、多线程

事件、服务器、客户端、多线程

Redis基于Reactor模式开发了一套高效的事件处理模型,通过IO多路复用程序监听来自客户端的大量连接

Redis服务器是一个事件驱动程序,分为文件事件时间事件

1 文件事件

服务器对套接字的操作称为文件事件,当被监听的套接字准备好执行连接应答、读取、写入、关闭等操作时,与操作相对应的文件事件就会产生,文件事件分派器会调用关联的事件处理器来处理事件

  • 文件事件处理器使用IO多路复用监听多个套接字
  • 当客户端向服务器发起连接时,将触发连接应答处理器执行,并创建套接字
  • 当客户端向服务器发起命令请求时,将引发命令请求处理器执行
  • 然后使用命令回复处理器将命令写入套接字传给客户端

img

2 时间事件

服务器执行特定定时操作称为时间事件

  • 定时事件:让程序在指定事件之后执行一次
  • 周期性事件:让程序每隔指定时间就执行一次

3 客户端

一个服务器可以与多个客户端建立网络连接,服务器使用单线程单进程的方式处理命令请求

服务器状态结构使用链表连接多个客户端状态,新添加的客户端状态会放置链表末尾

输入缓冲区记录了客户端发起的命令请求,缓冲区大小不超过1GB

客户端有固定大小和可变大小的输出缓冲区,固定大小缓冲区的最大大小为16KB,可变大小缓冲区最大大小不能超过服务器设置的硬性限制,如果大小超过了服务器设置的硬性限制,那么客户端会被关闭;如果客户端在一定时间内,一直超过服务器设置的软性限制,客户端也会被关闭

4 服务器

客户端向服务器发送命令过程

  • 客户端向服务器发送命令请求
  • 服务器接收并处理命令请求,产生命令回复
  • 服务器将命令回复发送给客户端
  • 客户端接收命令回复,并打印给用户

服务器的serverCron函数默认每隔100毫秒执行一次,主要工作包括

  • 更新服务器状态信息
  • 处理服务器接收信号
  • 管理客户端资源和数据库状态
  • 检查并执行持久化操作

服务器从启动到能够处理客户端的命令请求需要执行

  • 初始化服务器状态
  • 载入服务器配置
  • 初始化服务器数据结构
  • 还原数据库状态
  • 执行事件循环

5 多线程

Redis6.0引入多线程主要是为了提高网络IO读写性能

// 配置文件

// 多线程配置,默认是禁用的
io-threads-do-reads yes|no
// 设置线程数
io-threads <num>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值