一.概述

  Redis服务器是一个事件驱动程序,服务器需要处理两类事件:1文件事件,2时间事件。文件事件是关于客户端与服务器之间的通信操作。时间事件是关于服务器内部的一些定时操作。本篇还是参照"Redis设计与实现"书,简要了解下Redis事件。

  1. 文件事件

    文件事件(file event)是服务器对套接字操作的抽象(套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点),通过套接字与客户端或者其它Redis服务器进行连接,服务端与客户端的通信产生相应的文件事件,服务器则通过监听并处理这些文件事件来完成一系列网络通信操作。

    Redis基于Reactor(反应器)模式开发了自己的网络事件处理器,这个处理器被称为文件事件处理器。文件事件处理器使用I/O多路复用程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器。

    当被监听的套接字准备好执行连接应答,读取,写入,关闭等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。

    文件事件处理器包括套接字,I/O多路复用程序,文件事件分派器,事件处理器。下面展示了四个组成部分。

    当多个套接字做连接,写入,读取,关闭等命令操作时,就会产生多个并发文件事件。I/O多路复用程序负责监听多个套接字放入队列中,然后通过队列,以有序,同步,每次一个套接字的方式向文件事件分派器传送, 当上一个套接字产生的事件被处理后,事件分派器会继续传送下一个套接字。

    下面简单描述一个通信过程:(1)当一个Redis客户端向服务器发起连接,那么监听套接字将产生ae_readable事件(该事件是指当客户端对套接字执行write,close,connect操作),触发连接应答处理器执行。 该处理器会对客户端的连接请求进行应答,然后创建客户端套接字,客户端状态。使得客户端可以向服务器发送命令请求。

    (2)执行客户端命令后将产生相应的命令回复,为了将这些命令回复传送回客户端,服务器会将客户端套接字的ae_writable事件(该事件是指客户端对套接字执行read操作)与命令回复处理器进行关联,当客户端尝试读取命令回复的时候,会触发命令回复处理器执行。

  2.时间事件

    时间事件(time event)是Redis服务器中的一些操作如serverCron函数,需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。时间事件分为两类: 1定时事件:让一段程序在指定的时间之后执行一次。2.周期性事件:让一段程序每隔指定时间表就执行一次。

    持续运行的Redis服务器需要定期对自身资源和状态进行检查和调整,从而确保服务器可以长期,稳定的运行,主要工作包括:

    (1) 更新服务器的各类统计信息,比如时间,内存占用,数据库占用情况等。

    (2) 清理数据库中的过期键值对。

    (3) 关闭和清理连接失败的客户端。

    (4) 尝试进行AOF和RDB持久化操作。

    (5) 如果服务器是主服务器,那么对从服务器进行定期同步。

    (6) 如果处于集群模式,对集群进行定期同步和连接测试。

    Redis服务器对周期性事件的方式运行redis.c/serverCron函数,直到服务器关闭为止。在配置上,用户通过修改hz选项来调整serverCron的每秒执行次数。默认是每秒执行10次。

    127.0.0.1:> config get hz
) "hz"
) ""

redis 系列18 事件的更多相关文章

  1. 【目录】redis 系列篇

    随笔分类 - redis 系列篇 redis 系列27 Cluster高可用 (2) 摘要: 一. ASK错误 集群上篇最后讲到,对于重新分片由redis-trib负责执行,关于该工具以后再介绍.在进 ...

  2. redis系列-14点的灵异事件

    概述 项目组每天14点都会遭遇惊魂时刻.一条条告警短信把工程师从午后小憩中拉回现实.之后问题又神秘消失.是PM喊你上工了?还是服务器给你开玩笑?下面请看工程师如何一步一步揪出真凶,解决问题. 如果不想 ...

  3. Java 集合系列18之 Iterator和Enumeration比较

    概要 这一章,我们对Iterator和Enumeration进行比较学习.内容包括:第1部分 Iterator和Enumeration区别第2部分 Iterator和Enumeration实例 转载请 ...

  4. Python操作redis系列之 列表(list) (四)

    # -*- coding: utf- -*- import redis r =redis.Redis(host=,password="ZBHRwlb1608") 1. Lpush ...

  5. redis 系列25 哨兵Sentinel (高可用演示 下)

    一. Sentinel 高可用环境准备 1.1 Sentinel 集群环境 环境 说明 操作系统版本 CentOS  7.4.1708  IP地址 172.168.18.200 网关Gateway 1 ...

  6. redis 系列20 服务器下

    二. serverCron函数 2.3 更新服务器每秒执行命令次数 serverCron函数中的trackOperationsPerSecond函数会以每100毫秒一次的频率执行,这个函数以抽样计算的 ...

  7. Python操作redis系列之 列表(list) (五)(转)

    # -*- coding: utf-8 -*- import redis r =redis.Redis(host=") 1. Lpush 命令将一个或多个值插入到列表头部. 如果 key 不 ...

  8. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  9. Python操作redis系列之 列表(list) (五)

    # -*- coding: utf- -*- import redis r =redis.Redis(host=,password=") 1. Lpush 命令将一个或多个值插入到列表头部. ...

随机推荐

  1. hbase_2

    ====HBase API========================================================= ** 配置maven依赖(pom.xml),不需要hado ...

  2. 周一干货~手把手教你安装 Visual Studio 安卓模拟器

    干货~手把手教你安装 Visual Studio 安卓模拟器 转 http://mini.eastday.com/mobile/171107134734194.html# 今天软妹为大家带来一篇来自M ...

  3. python3控制语句---选择结构语句

    python中的控制语句主要有if.if--else.if--slif--else.pass语句.其实python的控制语句与其他语言的控制语句工作原理基本一样.控制语句可以分为选择结构语句和循环结构 ...

  4. python-关于字典与列表的一个作业

    题目是这样的: 给定一个字典dict1,将其转换成dict2: dict1 = { 'fetal':[{u'key': u'sjzx_sy22_121.201.56.5', u'doc_count': ...

  5. AppImage格式安装包使用

    AppImage(以及前身klik和portablelinuxapps)不会安装传统意义上的软件(即它不会将文件放在系统中的所有位置). 它每个应用程序使用一个文件.每个都是自包含的:它包括应用程序所 ...

  6. PS2键盘扫描码:通码与断码

    键盘扫描码(实用于标准PC的101.102和104 键的键盘),按下发送通码,弹起发送断码. 说明: 第一类按键,通码为1字节,断码为 0xF0+通码 形式.如A键,其通码为 0x1C,断码为 0xF ...

  7. STS(Spring Tool Suite)下SSM(Spring+SpringMVC+Mybatis)框架搭建(二)

    继完成controller配置并使用controller实现页面跳转,现连接数据库进行登录. 在SSM框架中,使用Mybatis与数据库连接,因此需要配置关于mybatis的配置. 废话少说直接开始: ...

  8. ubuntu下安装pandas出现 compile failed with error code 1 in /tmp/pip_build_hadoop/pandas

    都是用pip装的,是不是应该用apt-get 装的呀 ubuntu下安装pandas (出现 compile failed with error code 1 in /tmp/pip_build_ha ...

  9. 浅谈C++ STL

    C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表.队列.栈. C++ 标准模板库的核心包括以 ...

  10. css实用属性

    background-size: 100% 100%;            背景通过拉伸实现填充 自适应 overflow: hidden;                              ...