《Redis官方教程》- 事件库

为什么需要一个事件库(Event Library)?

让我们通过一系列Q&A来弄明白。

Q:你期望网络服务器都做些什么事情?
A:在它监听的端口上等待连接的到来,然后接收(accpet)它们。

Q:调用accept会产生一个描述符,我该怎么处理它?
A:先保存这个描述符,然后对它进行非阻塞(non-blocking)的读写(read/write)操作。

Q:为什么读写操作必须用非阻塞的方式呢?
A:如果服务器阻塞在文件(在Unix世界socket也是文件)I/O操作上,这期间它还怎么处理其他连接的请求呢?

Q:我想我必须在socket上做很多次非阻塞操作去看它什么时候准备好,是这样吗?
A:是的,这就是事件库为你所做的工作,现在你明白了。

Q:那事件库是怎么做到的呢?
A:使用操作系统的轮询(polling)机制以及定时器(timer)。

Q:有没有开源的事件库能完成你说的这些功能?
A:当然有,libeventlibev就是这样的事件库。

Q:Redis用开源事件库来处理Socket I/O吗?
A:不,因为一些原因Redis使用自己的事件库。

时间: 2024-10-27 09:42:38

《Redis官方教程》- 事件库的相关文章

《Redis官方文档》翻译邀请

并发编程网定期组织翻译官方指南,十一月组织翻译Redis官方文档, 官方地址,有兴趣的同学可以通过评论领取,每次领取一节,翻译完后再领取其他章节.如果翻译超过10篇文章,并发网会赠送一本作者签名的<JAVA并发编程的艺术>. 如何交稿?直接在并发网注册账号后点新建文章,参考我要投稿. 介绍 admin.md     (ethfoo领取) benchmarks.md   (looyup已领取) clients.md  (mircle123领取) cluster-spec.md  (carlvin

《Redis官方文档》Redis事件库

原文链接 译者:cndpzc Redis实现了自己的事件库,代码在ae.c中.想要理解Redis事件库的工作原理,最好的方法就是去理解Redis如何使用它. 事件循环初始化 redis.c中的initServer函数初始化了redisServer结构体变量的众多成员,其中一个就是Redis事件循环(event loop)el: 1 aeEventLoop *el initServer调用aeCreateEventLoop(定义在ae.c)初始化server.el的成员.aeEventLoop的定

《Redis官方文档》事件库

究竟为什么需要一个事件库呢?让我们通过下面一系列问答来了解为什么. 问:你希望网络服务器持续不断地做什么事? 答:监听端口上进来的连接请求并接收它们. 问:调用套接字的Accept方法产生一个描述符,我们用这个描述符做什么? 答:保存这个描述符,并在它上面完成一次非阻塞读写操作. 问:为什么读写操作必须是非阻塞式的? 答:如果文件操作(在Unix系统中甚至于套接字都被描述成一个文件)是阻塞式的那么当它在一次文件I/O操作中被锁定时它怎么可能接收另外一个请求 问:我猜我必须在套接字上做很多次非阻塞

《Redis官方文档 》sentinel

原文链接 Redis Sentinel 文档 Redis Sentinel为Redis提供了高可用解决方案.实际上这意味着使用Sentinel可以部署一套Redis,在没有人为干预的情况下去应付各种各样的失败事件. Redis Sentinel同时提供了一些其他的功能,例如:监控.通知.并为client提供配置. 下面是Sentinel的功能列表: 监控(Monitoring):Sentinel不断的去检查你的主从实例是否按照预期在工作. 通知(Notification):Sentinel可以通

《Redis官方文档》用Redis构建分布式锁

原文链接  译者:yy-leo   校对:方腾飞(红体标记重点) 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但是这些库实现的方式差别很大,而且很多简单的实现其实只需采用稍微增加一点复杂的设计就可以获得更好的可靠性. 这篇文章的目的就是尝试提出一种官方权威的用Redis实现分布式锁管理器的算法,我们把这个算法称为RedLock,我们相信这个算法会比一般的普通方法更加安全可靠.我们也

《Redis官方文档》Redis集群教程

原文链接 译文链接 译者: tiffany 这篇教程是Redis集群的简要介绍,而非讲解分布式系统的复杂概念.它主要从一个使用者的角度介绍如何搭建.测试和使用Redis集群,至于Redis集群的详细设计将在"Redis集群规范"中进行描述. 本教程以redis使用者的角度,用简单易懂的方式介绍Redis集群的可用性和一致性. 注意: 本教程要求redis3.0或以上的版本. 如果你打算部署redis集群,你可以读一些关于集群的详细设计,当然,这不是必须的.由这篇教程入门,先大概使用一下

《Redis官方文档》持久化

原文链接 译者:Alexandar Mahone 这篇文章从技术层面描述了Redis持久化,建议所有读者阅读.如果希望更多了解Redis持久化和持久性保障,建议阅读Redis持久化揭秘. Redis 持久化 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集. AOF 文件中的命令全部以 Redis 协议的格

《Redis官方文档》Redis调试指南

原文链接      译者:Adeline Redis开发过程中十分注重其稳定性:我们尽一切努力来保证每一个版本的稳定,不出现突然崩溃等情况.但是即使在我们百分百的努力下,仍然没办法保证百分百的无bug. Redis出现崩溃时,会生成一个详细的报告来描述当时的情景,但是有时候只看报告还不够,而且Redis的核心开发团队可能也没办法独立重现你出现崩溃时候的场景:在这种情况下,我们需要用户能够重现这个情景来帮助我们. 这个指南讲解了如何使用GDB来获得Redis开发者可能用到的信息. GDB是什么?

《Redis官方文档》Data types—数据类型

原文链接 String类型(字符串类型) String 是Redis中最基本的类型.Redis中的String 类型是二进制安全的,也就是说在Redis中String类型可以包含各种数据,比如一张JPEG图片或者是一个序列化的Ruby对象.一个String类型的值最大长度可以是512M. 在Redis中String有很多有趣的用法,比如: 把String当做原子计数器,这可以使用INCR家族中的命令来实现:INCR, DECR, INCRBY. 使用APPEND命令来给一个String追加内容.

《Redis官方文档》发布和订阅

发布/订阅(Pub/Sub) SUBSCRIBE.UNSUBSCRIBE 和 PUBLISH 这三个命令实现了发布/订阅消息模式(引用自维基百科),发送者(发布者)并不是直接发送它们的消息给指定的接收者(订阅者),而是将消息发布到特定的消息通道,并且不需要知道订阅者(如果有的话)的任何信息.订阅者可以订阅一个或多个感兴趣的消息通道,同时也只会收到他们感兴趣通道的信息,而不用去关心是谁发布的.这种发布者与订阅者的解耦,使其具备更强的扩展性并得到一个更加动态的网络拓扑. 例如为了订阅通道foo和ba