六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 211|回复: 0

Redis源码解析1

[复制链接]

升级  36%

32

主题

32

主题

32

主题

秀才

Rank: 2

积分
104
 楼主| 发表于 2012-12-22 21:44:44 | 显示全部楼层 |阅读模式
Redis源码解析1 - 程序框架

<div class="postbody"><div id="cnblogs_post_body">前言

Redis(REmote DIctionary Server)是一个由Salvatore Sanfilippo写的key-value存储系统。
它有以下特点:

  • 性能极高 – Redis能支持超过 100K+ 每秒的读写频率
  • 丰富的数据类型 – Redis支持二进制兼容的 string、list、set、zset、hash 等数据结构
  • 原子 – Redis的所有操作都是原子性的
  • 事务 - 支持多条指令合并成事务执行
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性
  • 脚本 - 新版本Redis支持lua脚本,可以实现更复杂的逻辑
总体结构

Redis是一个单线程的服务器(除了写磁盘会开子进程,VM管理会开线程,先忽略这两块)
所以,它的服务器启动流程非常清晰,看下图,不再赘述



事件循环

1. 数据结构

通过 aeEventLoop 结构来表示一个事件框架,分析如下:
<div class="cnblogs_code"> 1 typedef struct aeEventLoop { 2     int maxfd; // 最大句柄号,只有select模型会用到 3     long long timeEventNextId; // timer事件的ID,初始化为0,使用时递增 4     aeFileEvent events[AE_SETSIZE]; // 所有注册的事件,通过aeCreateFileEvent函数增加,aeDeleteFileEvent函数删除。注意,该数组以 fd 为下标进行存取 5     aeFiredEvent fired[AE_SETSIZE];  // 当前帧激活事件,aeApiPoll函数将活跃事件加入到该数组。注意,该结构只保存fd,通过fd到events中取实际event指针 6     aeTimeEvent *timeEventHead; // timer事件链表 7     int stop; 8     void *apidata; /* This is used for polling API specific data */ 9     aeBeforeSleepProc *beforesleep;10 } aeEventLoop;
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表