请选择 进入手机版 | 继续访问电脑版

Redis中国用户组(CRUG)论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 615|回复: 0

Redis源码分析(三十四)--- redis.h服务端的实现分析(1)

[复制链接]
  • TA的每日心情
    开心
    2017-3-20 10:39
  • 签到天数: 90 天

    [LV.6]常住居民II

    358

    主题

    462

    帖子

    3650

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3650

    最佳新人活跃会员宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2016-4-18 09:21:32 | 显示全部楼层 |阅读模式

    上次刚刚分析过了客户端的结构体分析,思路比较简答,清晰,最后学习的是服务端的实现,服务端在Redis可是重中之重,里面基本上囊括了之前模块中涉及到的所有知识点,从redis的头文件就可以看出了,redis.h代码量就已经破1000+行了,而且都还只是一些变量,宏定义的声明,和一些方法原型的声明。所以,今天的总结跟昨天一样,先不做具体的实现学习,先从全局的角度思考,服务端的整体设计思路,这从头文件的声明正好可以学习。

    1. /* ----------------------- 声明了一下所需的头文件,主要为各种结构体的操作文件 -------------------- */  
    2. #include "ae.h"      /* Event driven programming library  事件驱动库*/  
    3. #include "sds.h"     /* Dynamic safe strings  动态字符串库 */  
    4. #include "dict.h"    /* Hash tables 哈希字典 */  
    5. #include "adlist.h"  /* Linked lists 普通双向链表 */  
    6. #include "zmalloc.h" /* total memory usage aware version of malloc/free 内存申请管理库 */  
    7. #include "anet.h"    /* Networking the easy way  网络操作库 */  
    8. #include "ziplist.h" /* Compact list data structure  压缩列表 */  
    9. #include "intset.h"  /* Compact integer set structure 整形set结构体 */  
    10. #include "version.h" /* Version macro  版本号文件*/  
    11. #include "util.h"    /* Misc functions useful in many places 同样方法类*/  
    12. #include "latency.h" /* Latency monitor API 延时监视方法 */  
    13. #include "sparkline.h" /* ASII graphs API  微线图库 */  
    14.   
    15. /* -----------------------------根据模块的不同,宏定义了不同的变量 ---------------- */  
    16. /* 1.Error codes Redis错误码*/  
    17. /* 2.Static server configuration  server中的一些静态变量值*/  
    18. /* 3.Protocol and I/O related defines  协议和I/O相关变量的定义*/  
    19. /* 4.Hash table parameters 哈希表的参数*/  
    20. /* 5.Command flags 命令行操作的flag定义*/  
    21. /* 6.Object types Object的类型,包括List,String,Hash等*/  
    22. /* 7.Objects encoding Object的编码类型*/  
    23. /* 8.Defines related to the dump file format RDB的保存格式,14位,32位等*/  
    24. /* 9.AOF states  AOF文件的状态*/  
    25. /* 10.Client flags 客户端的flag标示*/  
    26. /* 11.Client request types 客户端的请求类型,INLINE和MULTIBULK*/  
    27. /* 12.Client classes for client limits 客户端的类型*/  
    28. /* 13.Slave replication state replication状态*/  
    29. /* 14.List related stuff 列表位置,head或tail*/  
    30. /* 15.Sort operations 排序操作类型,升序或是降序等等*/  
    31. /* 16.Log levels 日志级别*/  
    32. /* 17.Anti-warning macro... 警告信息*/  
    33. /* 18.Append only defines 追加操作变量*/  
    34. /* 19.Zip structure related defaults ziplist压缩列表变量*/  
    35. /* 20.HyperLogLog defines HLLC的变量定义*/  
    36. /* 21.Sets operations codes 设置操作的操作码*/  
    37. /* 22.Redis maxmemory strategies Redis内存操作策略*/  
    38. /* 23.Scripting */  
    39. /* 24.Units 时间单位,微妙和毫秒*/  
    40. /* 25.SHUTDOWN flags */  
    41. /* 26.Command call flags, see call() function */  
    42. /* 27.Command propagation flags, see propagate() function */  
    43. /* 28.Keyspace changes notification classes. 通知类型*/  
    44.       
    45. /*-----------------------------------------------------------------------------
    46. * Data types 数据类型的相关定义
    47. *----------------------------------------------------------------------------*/  
    48. 1.typedef struct redisObject /* Redis Object对象 */  
    49. 2.typedef struct redisDb  
    50. 3.typedef struct multiCmd  
    51. 4.typedef struct multiState  
    52. 5.typedef struct blockingState  
    53. 6.typedef struct readyList  
    54. 7.typedef struct redisClient  /* Redis客户端结构体 */  
    55. 8.struct saveparam  
    56. 9.struct sharedObjectsStruct  
    57. 10.typedef struct zskiplistNode  
    58. 11.typedef struct zskiplist  
    59. 12.typedef struct zset  
    60. 13.typedef struct clientBufferLimitsConfig   
    61. 14.typedef struct redisOp  
    62. 15.typedef struct redisOpArray  
    63. 16.struct redisServer /* Redis服务端结构体的定义 */  
    64. 17.struct redisCommand /* Redis服务端Command命令结构体的定义 */  
    65.       
    66. /*-----------------------------------------------------------------------------
    67. * Functions prototypes 方法原型
    68. *----------------------------------------------------------------------------*/  
    69. /* 1.Utils 通用类的方法*/  
    70. /* 2.networking.c -- Networking and Client related operations 网络操作类方法*/  
    71. /* 3.List data type 列表操作方法*/  
    72. /* 4.MULTI/EXEC/WATCH... 命令执行方法*/  
    73. /* 5.Redis object implementation Redis Object对象方法*/  
    74. /* 6.Synchronous I/O with timeout I/O同步类方法*/  
    75. /* 7.Replication 主从复制方法*/  
    76. /* 8.Generic persistence functions 持久化加载的一些方法*/  
    77. /* 9.AOF persistence AOF日志文件持久化方法*/  
    78. /* 10.Core functions 核心类方法*/  
    79. /* 11.Sorted sets data type 排序set集合方法*/  
    80. /* 12.Set data type set类型数据操作方法*/  
    81. /* 13.Hash data type 哈希类型方法操作方法*/  
    82. /* 14.Pub / Sub 发布订阅方法*/  
    83. /* 15.Keyspace events notification ketSpace事件通知方法*/  
    84. /* 16.Configuration 配置类方法*/  
    85. /* 17.db.c -- Keyspace access API db相关的方法*/  
    86. /* 18.Sentinel */  
    87. /* 19.Scripting */  
    88. /* 20.Git SHA1 */  
    89. /* 21.Commands prototypes 命令原型方法*/  
    复制代码

    主要4个大模块

    1.引用头文件声明

    2.宏定义变量定义

    3.数据结构体的声明

    4.方法原型声明

    在这里特别提出,在 代码中遍地出现的RedisObject,RedisClient,RedisServer的结构定义,都是在这个文件中定义的。

    1. /* The actual Redis Object */  
    2. #define REDIS_LRU_BITS 24  
    3. #define REDIS_LRU_CLOCK_MAX ((1<<REDIS_LRU_BITS)-1) /* Max value of obj->lru */  
    4. #define REDIS_LRU_CLOCK_RESOLUTION 1 /* LRU clock resolution in seconds */  
    5. typedef struct redisObject {  
    6.     unsigned type:4;  
    7.     unsigned encoding:4;  
    8.     unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */  
    9.     int refcount;  
    10.     void *ptr;  
    11. } robj;  
    复制代码

    RedisClient,RedisServer的结构定义非常类似,里面包含了一堆的属性,长长的一排下来。


    转自:http://blog.csdn.net/androidlushangderen/article/details/40893901
    上一篇:Redis源码分析(三十三)--- redis-cli客户端命令行接口的实现2
    下一篇:Redis源码分析(三十五)--- redis.c服务端的实现分析(2)


    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    阿里云
    阿里云

    Archiver|手机版|小黑屋|Redis中国用户组 ( 京ICP备15003959号

    GMT+8, 2017-3-29 15:12 , Processed in 0.127928 second(s), 32 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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