【redis】事件
来源:互联网 发布:联想网络同传edu8.0.1 编辑:程序博客网 时间:2024/05/16 06:23
redis是单进程单线程的服务器,在服务端是使用多路io复用技术实现的,也就是说是基于事件实现的。
redis分为两种类型的事件,文件时间和时间事件。
文件事件:也就是传统的io操作,基本分为连接,读取,写入和关闭。
不同的客户端发来各种各样的请求,redis的多路复用程序会把请求分解为不同的事件,然后将socket和事件一起打包放入队列中,交给事件分离器处理,事件分离器会把各个事件交给对应的处理器处理。过程如下图:
io多路复用程序会监听不同的socket,只要有事件发生,就会打包放入队列:
最后交给分离器去消费,可以看到这里是顺序执行的,这就是redis可以做分布式锁的原因,分布式的程序最终会在redis这里排队。
下面看下redis文件事件的处理器。主要有三类。
应答处理器,主要是对accept函数的封装,监听的事件类型是连接,一旦有连接发生,这个处理器就会创建一个套接字,并且在套接字上添加新的事件监听和相应的处理器。
命令请求处理器,当客户端调用了write以后,即发送了命令过来,这时服务器要读取命令,对应的事件类型是read,是对底层套接字read函数的封装,读取命令,放入缓冲区中,让后面的命令执行器执行相应的命令。
命令应答处理器,当客户端执行了read等待服务器返回结果时会触发,对应的事件类型是write,是对底层套接字write函数的封装,服务器执行了客户端的请求,这时就要返回结果。
所以,一次完整的redis请求为:
时间事件:
有两类,一类是定时事件,只执行一次,另一类是周期事件,执行多次
时间事件的属性有三个:id,when,handler
服务端会维护一个时间事件的列表,指针是time_events。
然后服务端有一个processTimeEvents函数,会周期性地遍历这个时间事件列表,一旦需要执行,那么就会执行该事件的处理函数,执行完以后,如果是周期事件,那么就会更新事件的when,再次加入到列表里,否则就扔出列表:
关于时间事件,redis内部有一个很重要的函数就是周期性执行的,serverCron函数,它会:
可以说它就是一个周期性时间事件的处理函数。
- redis 事件
- Redis 事件
- redis事件
- redis 事件
- Redis事件
- 【redis】事件
- Redis 事件(1) -- 文件事件
- Redis 事件(2) -- 时间事件
- redis的事件机制
- 深入浅出redis事件框架
- redis的事件框架
- redis 事件处理
- redis的事件机制 .
- Redis 事件处理
- Redis事件驱动库
- Redis源码-事件库
- Redis事件驱动
- Redis 事件简述
- github怎样修改用户名
- Ldap Api
- 98. Validate Binary Search Tree
- Opencv图像处理实现的虚拟16车摆阵列算法
- LoadRunner参数化情况分析
- 【redis】事件
- 冒泡排序算法
- 实现异地登录后当前登录被顶掉的功能(类似QQ异地登录) 退出当前App
- C#中 #if #endif的使用
- 博客这件事
- 盒子模型(二)——line box
- Flask零基础到项目实战(二)第一个flask程序
- 《Javascript DOM编程艺术》读书笔记
- OPENSWAN I方打印