redis源码解析,不定期更新记录

[2015.9] redis 代码拉于 github


1. event loop

一张图来描述redis的事件循环:


2. command table

【待写】

3. store struct

/* 5中数据类型 */
#define OBJ_STRING 0
#define OBJ_LIST 1
#define OBJ_SET 2
#define OBJ_ZSET 3
#define OBJ_HASH 4


/* 多种编码方式,即多种存储结构 */
#define OBJ_ENCODING_RAW 0     /* Raw representation */
#define OBJ_ENCODING_INT 1     /* Encoded as integer */
#define OBJ_ENCODING_HT 2      /* Encoded as hash table */
[not use any more]#define OBJ_ENCODING_ZIPMAP 3  /* Encoded as zipmap */
[not use any more]#define OBJ_ENCODING_LINKEDLIST 4 /* Encoded as regular linked list */

#define OBJ_ENCODING_ZIPLIST 5 /* Encoded as ziplist */
#define OBJ_ENCODING_INTSET 6  /* Encoded as intset */
#define OBJ_ENCODING_SKIPLIST 7  /* Encoded as skiplist */
#define OBJ_ENCODING_EMBSTR 8  /* Embedded sds string encoding */
#define OBJ_ENCODING_QUICKLIST 9 /* Encoded as linked list of ziplists */


/* 数据类型和编码方式的使用条件和相互转换 */
OBJ_STRING [如SET命令]
        OBJ_ENCODING_RAW     字符串长度小于等于44
        OBJ_ENCODING_EMBSTR  字符串长度大于44
        OBJ_ENCODING_INT     数字类型,当值能存在一个指针中时,以该类型保存,否则,即大整数,就用OBJ_ENCODING_RAW类型
OBJ_LIST [如LPUSH命令]
        OBJ_ENCODING_QUICKLIST   用作队列的存储
OBJ_SET [如SADD命令]
        OBJ_ENCODING_HT          当不是整数的时候采用dict存储,当INTSET中新来一个非INT时,以及当INTSET成员个数超过一定值时转成dict存储
        OBJ_ENCODING_INTSET      当是整数时采用整数集合,当INTSET中新来一个非INT时,以及当INTSET成员个数超过一定值时转成dict存储
OBJ_ZSET [如ZADD命令]
        OBJ_ENCODING_SKIPLIST    有序集合,当ziplist中的数据个数超过限制,或者新来一个长度大于限制的值则转成skiplist存储
        OBJ_ENCODING_ZIPLIST     当开始时,成员个数较少,单个成员的体积都较小则用ziplist,否则转成skiplist
OBJ_HASH [如HSET命令]
        OBJ_ENCODING_ZIPLIST     当成员大小小于等于指定值,或者成员个数小于等于指定值都采用这个
        OBJ_ENCODING_HT          当成员大小大于指定值,,或者成员个数大于指定值都采用这个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值