![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 87
gqtcgq
这个作者很懒,什么都没留下…
展开
-
Redis源码解析:02链表
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,因为Redis使用的C语言并没有内置这种数据结构,所以Redis自己实现了链表。 链表在Redis中的应用非常广泛,比如列表的底层实现之一就是链表。当一个列表中包含的元素比较多时,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表的底层实现。 除了列表之外,Redis中的发布与订阅、原创 2016-01-05 21:23:45 · 744 阅读 · 0 评论 -
Redis源码解析:01简单动态字符串SDS
Redis没有直接使用C字符串(以’\0’结尾的字符数组),而是构建了一种名为简单动态字符串( simple dynamic string, SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。在Redis里面,C字符串只会作常量值,比如打印日志:redisLog(REDIS_WARNING,"Fatal: Can't initialize Background Jobs.");原创 2015-12-30 20:55:42 · 1274 阅读 · 1 评论 -
Redis源码解析:03字典
字典是一种用于保存键值对(keyvalue pair)的抽象数据结构。在字典中,一个键和一个值进行关联,就是所谓的键值对。字典中的每个键都是独一无二的,可以根据键查找、更新值,或者删除整个键值对等等。 字典在Redis中的应用相当广泛,如Redis的数据库就是使用字典来作为底层实现的,对数据库的增、删、查、改操作也是构建在对字典的操作之上的。比如下面的命令:redis> SE原创 2016-01-17 20:29:48 · 963 阅读 · 0 评论 -
Redis源码解析:05跳跃表
一:基本概念 跳跃表是一种随机化的数据结构,在查找、插入和删除这些字典操作上,其效率可比拟于平衡二叉树(如红黑树),大多数操作只需要O(log n)平均时间,但它的代码以及原理更简单。跳跃表的定义如下: “Skip lists are data structures that use probabilistic balancing rather than原创 2016-01-31 08:46:18 · 2493 阅读 · 0 评论 -
Redis源码解析:06整数集合
整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。 intset可以保存类型为int16_t,int32_t,int64_t的整数值,并且保证集合中不会出现重复元素。 整数集合的结构体定义在intset.h中:typedef struct intset {原创 2016-02-14 08:57:18 · 673 阅读 · 0 评论 -
Redis源码解析:07压缩列表
压缩列表(ziplist)是列表键和哈希键的底层实现之一。当列表键只包含少量列表项,并且每个列表项要么是小整数值,要么是长度较短的字符串时;或者当哈希键只包含少量键值对,并且每个键值对的键和值要么是小整数值,要么是长度较短的字符串时,那么Redis就会使用压缩列表来做为列表键或哈希键的底层实现。 压缩列表是Redis为了节约内存而开发的,可用于存储字符串和整数值。它是一个顺原创 2016-02-21 17:32:06 · 1088 阅读 · 0 评论 -
Redis源码解析:18Hiredis同步API和回复解析API代码解析
Redis的sentinel模式使用了Hiredis代码,Hiredis是redis数据库一个轻量级的C语言客户端库。它实现的向Redis发送命令的API函数redisCommand,使用方法类似于printf。因此只要熟悉redis命令,就可以很容易的使用该函数将redis命令字符串,转换成统一请求协议格式之后,发送给Redis服务器。 Hiredis库包含三类API:同步操原创 2016-05-08 09:55:22 · 5949 阅读 · 3 评论