文章目录

  • 事件、服务器、客户端、多线程
    • 1 文件事件
    • 2 时间事件
    • 3 客户端
    • 4 服务器
    • 5 多线程

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

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

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

1 文件事件

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

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

2 时间事件

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

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

3 客户端

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

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

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

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

4 服务器

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

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

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

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

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

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

5 多线程

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

// 配置文件// 多线程配置,默认是禁用的
io-threads-do-reads yes|no
// 设置线程数
io-threads <num>

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

  1. Redis教程:事件、客户端和服务器

    1 事件 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事情: 文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务 ...

  2. Redis | 第6章 事件与客户端《Redis设计与实现》

    第6章 事件与客户端 前言 1. 事件 1.1 文件事件 1.1.1 I/O 多路复用程序的实现 1.1.2 事件类型与 API 1.1.3 文件事件的处理器 1.2 时间事件 1.2.1 API 1 ...

  3. redis(12)--事件,客户端,服务器

    目录 事件 文件事件 读事件 写事件 同时关联写事件和读事件 时间事件 实现 服务器常规操作 事件的执行与调度 客户端 客户端属性 套接字描述符 名字 标志 输入缓冲区 命令与命令参数 命令的实现函数 ...

  4. java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part6(Redis的应用场景、Redis是单线程的速度还快、Redis线程模型:Reactor模式、事件、发布订阅、管道)~整起

    PART1-1:为什么Redis是单线程的 Redis单线程是指: Redis的网络IO和键值对读写是由一个线程来完成的.这也是 Redis 对外提供键值存储服务的主要流程.Redis的其他功能,比如 ...

  5. 基于事件的 NIO 多线程服务器--转载

    JDK1.4 的 NIO 有效解决了原有流式 IO 存在的线程开销的问题,在 NIO 中使用多线程,主要目的已不是为了应对每个客户端请求而分配独立的服务线程,而是通过多线程充分使用用多个 CPU 的处 ...

  6. 基于事件的 NIO 多线程服务器

    2019独角兽企业重金招聘Python工程师标准>>> JDK1.4 的 NIO 有效解决了原有流式 IO 存在的线程开销的问题,在 NIO 中使用多线程,主要目的已不是为了应对每个 ...

  7. 基于事件的NIO多线程服务器

    JDK1.4的NIO有效解决了原有流式IO存在的线程开销的问题,在NIO中使用多线程,主要目的已不是为了应对每个客户端请求而分配独立的服务线程,而是通过多线程充分使用用多个CPU的处理能力和处理中的等 ...

  8. tcp和udp多线程的epoll服务器+客户端源代码 - brucema的个人空间 - 开源中国社区

    tcp和udp多线程的epoll服务器+客户端源代码 - brucema的个人空间 - 开源中国社区 tcp和udp多线程的epoll服务器+客户端源代码

  9. redis 服务器/客户端安装与配置

    redis 服务器/客户端安装与配置 1 redis server 1.1 获取redis源码包 //官网 http://redis.io/ wget -c http://redis.googleco ...

最新文章

  1. 全球及中国页岩气市场供需前景与投资盈利分析报告2021版
  2. Micropython教程之TPYBoardv102 DIY蓝牙智能小车实例
  3. nodejs 快速搭建接口
  4. 动态规划下的巴什博弈
  5. AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔)
  6. PyTorch1.0 教程 例子和书籍
  7. [另开新坑] 算导v3 #26 最大流 翻译
  8. linux网络命令详解
  9. 计算机专业男生宿舍,实拍大学男生宿舍,男生们不是玩电脑游戏,就是瘫在床上看手机!...
  10. Spring.NET教程(三)——对象的创建(基础篇)
  11. DevExpress之TreeList绑定复杂数据类型
  12. 最新版2017安装教程
  13. C语言游戏开发——反弹球
  14. ARINC429硬件层初探
  15. html遮罩层动画制作,教你用Flash遮罩层制作漂亮的文字效果
  16. nginx的几个超时时间
  17. 董路:当“边缘人”来到舞台中央
  18. java实时获取android网速_Android中获取实时网速(2)
  19. “磁”话有理(七)——磁集成类型之电感与电感集成
  20. 赴美生子入境经验汇总

热门文章

  1. “中文编程”会是解决中国程序员编程效率的秘密武器,成为中国软件工程的“银弹”么?...
  2. tomcat源码分析(一)- tomcat源码导入IDEA并正常启动
  3. ASP.NET MVC 使用 Log4net 记录日志
  4. python自带的用于解析HTML的库HtmlParser
  5. redis-3.0.0_rc5的RPM包制定
  6. cocos2d-x3.10 适配 IPV6
  7. java操作Excel之POI(4)利用POI实现数据的批量导出
  8. ListT清除重复某一项
  9. mysql left join 右表数据不唯一的情况解决方法
  10. 1.0Tensorflow中出现编译问题的解决方案