redis
文章平均质量分 76
harleyliu
这个作者很懒,什么都没留下…
展开
-
Redis源码剖析--简单动态字符串sds
Redis 没有直接使用 C 语言传统的字符串表示, 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示。Redis中所有的键都是用sds格式来保存的, 包括一部分值的保存,也是用的sds格式。SDS的定义sds.h中的定义如下:/* * 类型别名,用于指向 sdshdr 的 buf 属性 */原创 2017-07-31 12:10:42 · 328 阅读 · 0 评论 -
Redis源码剖析-链表list
Redis另一个基础的数据结构是链表,C并没有内置的链表结构,因此Redis自己实现了一个列表。除了链表键之外, 发布与订阅、慢查询、监视器等功能也用到了链表, Redis 服务器本身还使用链表来保存多个客户端的状态信息, 以及使用链表来构建客户端输出缓冲区。List结构双端链表结点定义如下:typedef struct listNode { struct listNode *prev; /原创 2017-07-31 15:38:15 · 453 阅读 · 0 评论 -
Redis源码剖析-dict字典
改换一下策略,不直接介绍源码,打算先整体介绍一下思路,然后再根据源码解释具体的实现。如图所示,一个dict字典中由两个hashtable组成,分别为ht[0]和ht[1],用到的基本上都是ht[0]。 那么ht[1]什么时候用到呢?因为hash算出来的索引值是有可能重复的,也就是说不同的dictEntry有可能位于同一个hashtable的槽内,如果拥有的dictEntry的数量和slot的数量的比原创 2017-08-02 16:05:34 · 323 阅读 · 0 评论 -
Redis源码剖析--跳跃表
跳跃表(skiplist)是一种有序数据结构, 它通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的。跳跃表支持平均 O(\log N) 最坏 O(N) 复杂度的节点查找, 还可以通过顺序性操作来批量处理节点。在大部分情况下, 跳跃表的效率可以和平衡树相媲美, 并且因为跳跃表的实现比平衡树要来得更为简单, 所以有不少程序都使用跳跃表来代替平衡树。Redis 使用跳跃表作为有序集原创 2017-08-25 10:10:02 · 293 阅读 · 0 评论 -
Redis源码剖析-dict遍历算法
先贴一下整体的代码unsigned long dictScan(dict *d, unsigned long v, dictScanFunction *fn, dictScanBucketFunction* bucketfn,原创 2017-08-23 14:27:57 · 320 阅读 · 0 评论 -
Redis源码剖析--压缩列表
压缩列表(ziplist)是列表键和哈希键的底层实现之一。 Redis的列表键,哈希键,有序集合的底层实现都用到了ziplist。当列表键中包含比较少的元素,并且元素都是数字或者比较小的字符串的时候, redis会用压缩列表来作为列表键的底层实现。当哈希键的键和值都是比较小的整数或者较短的字符的时候,也是用压缩列表来作为底层实现。 因为压缩列表也能够节省内存。原创 2017-09-07 10:44:13 · 389 阅读 · 0 评论 -
Redis源码剖析--整数集合
整数集合(intset)是集合键的底层实现之一: 当一个集合只包含整数值元素, 并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现。原创 2017-08-30 11:45:39 · 258 阅读 · 0 评论