redis的文件事件处理器】的更多相关文章

前言     C10K problem提出了一个问题,如果1w个客户端连接到server上,间歇性的发送消息,有哪些好的方案?     其中的一种方案是,每个线程处理多个客户端,使用异步I/O和就绪通知机制,redis无疑是一个很好的榜样 redis的特点和C10K proble的契合点     内存数据库:     单线程支持上w个客户端连接:     高并发,单机支持10w并发数:     低时延,局域网内大多数时延低于3ms. redis的文件事件处理器 四个关键组成     套接字.I/…
redis的文件事件:即与io相关的事件. /* File event structure */ typedef struct aeFileEvent { int mask; /* one of AE_(READABLE|WRITABLE) */ aeFileProc *rfileProc; //读网络数据处理函数 aeFileProc *wfileProc; //写网络数据处理函数 void *clientData; } aeFileEvent; 所有的文件事件放在aeEventLoop的数组…
整体概述 客户端属性 套接字描述符 标志 输入缓冲区 命名及命令参数 命令的实现函数 输出缓冲区 客户端的创建与关闭 创建普通客户端 关闭普通客户端 参考链接 Redis 源码简洁剖析系列 整体概述 Redis 一个服务器可以和多个客户端建立网络连接,每个客户端都可以向服务器发送命令请求,服务器接收客户端的命令,处理后将结果返回给客户端. Redis 的文件事件处理器使用 I/O 多路复用,Redis 使用单线程单进程处理命令请求,与多个客户端进行网络通信. 每个连接了 Redis 服务器的客户…
1. 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库: struct redisServer { // ... redisDb *db; /* 一个数组,保存着服务器中的所有数据库 */ // ... int dbnum; /* 创建多少个数据库,由服务器配置的database选项决定,默认为16个数据库,0-15 */…
事件 redis服务器是事件驱动的,事件分为文件事件与时间事件 文件事件是服务器通过套接字与客户端连接,两者之间的通信会产生相应的文件事件,服务器监听并处理这些事件完成网络操作: 时间事件是指redis服务器的定时操作 redis基于reactor模式的文件事件处理器以单线程方式运行,并使用I/O多路复用程序来监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器.: 文件事件处理器由四部分组成: 套接字 I/O多路复用程序:监听多个套接字产生的文件事件并放到一个队列,然后以有…
entinel是redis高可用的解决方案,sentinel系统(N个sentinel实例,N >= 1)可以监视一个或者多个redis master服务,以及这些master服务的所有从服务:当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求. 1. sentinel初始化 可以使用命令 redis-sentinel /path/to/sentinel.conf 或者 redis-server /path/to/sen…
Redis 数据结构与内存管理策略(下) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.List.Hash.Set.Zset 案例:沪江团购系统大促 hot-top 接口 cache 设计 Redis 内存数据结构与编码 OBJECT encoding key.DEBUG OBJECT key 简单动态字符串(simple dynamic string) 链表(linked list) 字…
前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的是Redis数据的单机备份问题(从内存到硬盘的备份):而主从复制则侧重解决数据的多机热备.此外,主从复制还可以实现负载均衡和故障恢复. 这篇文章中,将详细介绍Redis主从复制的方方面面,包括:如何使用主从复制.主从复制的原理(重点是全量复制和部分复制.以及心跳机制).实际应用中需要注意的问题(如数…
前言 只有光头才能变强 好的,今天我们要上黄金段位了,如果还没经历过青铜和白银阶段的,可以先去蹭蹭经验再回来: 从零单排学Redis[青铜] 从零单排学Redis[白银] 看过相关Redis基础的同学可以知道Redis是单线程的,很多面试题也很可能会问到"为什么Redis是单线程的还那么快". 这篇文章来讲讲单线程的内部的原理. 文本力求简单讲清每个知识点,希望大家看完能有所收获 一.基础铺垫 在讲解Redis之前,我们先来一些基础的铺垫,有更好的阅读体验. 1.1网路编程 我们在初学…
最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 I/O 多路复用(mutiplexing)部分的实现非常干净和优雅,在这里想对这部分的内容进行简单的整理. 几种 I/O 模型 为什么 Redis 中要使用 I/O 多路复用这种技术呢? 首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导…