redis 系列18 事件

news/2024/7/17 16:15:22

一.概述

  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:6379> config get hz
    1) "hz"
    2) "10"

 

转载于:https://www.cnblogs.com/MrHSR/p/10053170.html


http://www.niftyadmin.cn/n/2606766.html

相关文章

ts学设计模式: 第一篇: 单例模式

模式定义 单例模式: 确保一个类只有一个实例, 并且提供一个全局访问的方法, 属于创建型模式。 模式结构图 代码实现 懒汉模式1. 懒汉模式中单例是在需要的时候才去创建的,如果单例已经创建,再次调用获取接口将不会重新创建新的对象,而是直接返…

在SpringBoot框架中使用拦截器

1.继承WebMvcConfigureAdapter类,覆盖其addInterceptors接口,注册我们自定义的拦截器 1 package com.eth.wallet.config;2 3 4 import com.eth.wallet.interceptor.MyInterceptor;5 import org.springframework.boot.SpringBootConfiguration;6 import org.springfr…

各种不同的词向量,在这里有整理

在这个地址: https://github.com/Embedding/Chinese-Word-Vectors 转载于:https://www.cnblogs.com/charlesblc/p/10073039.html

Thinking in Java 读书总结(一)

前言 之前有零散地阅读过TIJ,但是都是针对自己的问题去有针对性的阅读,没有从头梳理过Java的一些基础知识。从前段时间开始自己也开始了整体性地学习TIJ的过程,也从这篇博客开始把自己的一些感悟和理解总结起来,也希望能对大家和我…

ActiveMQ之队列和主题发布订阅实例

JMS 消息模型 JMS消息服务应用程序结构支持两种模型:点对点模型,发布者/订阅者模型。   (1)点对点模型(Queue) 一个生产者向一个特定的队列发布消息,一个消费者从这个队列中依次读取消息。 模型特点:只有…

nice和renice命令详解

基础命令学习目录首页 进程调度是linux中非常重要的概念。linux内核有一套高效复杂的调度机制,能使效率极大化,但有时为了实现特定的要求,需要一定的人工干预。比如,你希望操作系统能分配更多的CPU资源给浏览器进程,让…

Zookeeper学习(二) 安装和四字命令

前言 在刚开始没有接触zookeeper的具体应用前,光看别人的描述,其实对它的实际应用其实不是特别清晰,所以慢慢从其基础应用开始了解其底层原理是很重要也是很必要的。 首先,安装Zookeeper并了解一下Zookeeper的基础命令。这个过程是…

【记录】使用在线KMS激活win10系统

摘要 网上一些激活工具可能捆绑了木马、病毒。使用激活工具有风险。使用在线KMS来激活系统则没有这个风险。(自测至发布日期仍然可用) (有能力的请支持正版windows系统) 将kms服务器地址设置为kms.03k.org(在线可用的KMS服务器都可…