摘要:
Explorer 一个key-value存储系统,带有客户端和服务器端。使用非常方便。 使用B+树作为存储引擎,客户端和服务器端使用TCP协议进行通信。 代码采用C++实现,底层将客户端和服务器通信封装成了一个网络库,里面还有些还不错的实现可供看看,比如线程池、工作队列、Reactor设计模式实现等 阅读全文
摘要:
对Redis最新版(3.2.9)的源码进行分析,并介绍一些使用方法。 Redis—初探Redis Redis—数据结构之sds Redis—数据结构之list 阅读全文
摘要:
STL—对象的构造与析构 STL—内存的配置与释放 STL—vector STL—vector空间的动态增长 STL—list 阅读全文
摘要:
1.使用libevent库 源码那么多,该怎么分析从哪分析呢?一个好的方法就是先用起来,会用了,然后去看底层相应的源码,这样比较有条理,自上向下掌握。下面用libevent库写个程序,每隔1秒输出一行信息。 test.c 2.event, event_base 经过第1步,下面开始看上面程序中的每一 阅读全文
摘要:
TCP的检验和 检验和目的 目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到检验和有差错,则TCP段会被直接丢弃。 TCP在计算检验和时,要加上一个12字节的伪首部。 伪首部 伪首部共有12字节,包含IP首部的一些字段,有如下信息:32位源IP地址、32位目的IP地 阅读全文
摘要:
Redis的列表对象底层所使用的数据结构其中之一就是list。 list Redis的list是一个双端链表,其由3部分构成:链表节点、链表迭代器、链表。这一设计思想和STL的list是一样的,STL的list也是由这三部分组成。需要特别说明的是Redis用C语言实现了list的迭代器,比较巧妙,下 阅读全文
摘要:
前面我们分析了vector,这篇介绍STL中另一个重要的容器list list的设计 list由三部分构成:list节点、list迭代器、list本身 list节点 list是一个双向链表,所以其list节点中有前后两个指针。如下: list迭代器 前面我们说过vector是利用其内存分配类型成员给 阅读全文
摘要:
Redis是一个Key Value数据库。Redis有5种数据类型:字符串、列表、哈希、集合、有序集合。而字符串的底层实现方法之一就是使用sds。以下描述中请读者注意区分sds是指简单动态字符串这一数据结构(用大写表示)还是sdshdr头部中buf数组的起始地址(用小写表示)。 SDS源码 如下源码 阅读全文
摘要:
前面介绍了STL对象的构造与析构以及内存的配置与释放,那具体的容器是怎么应用STL的空间配置器的呢?这篇先介绍STL的容器vector。 vector的数据成员 vector只有4个数据成员:3个迭代器、1个内存配置器。 STL会为每个容器都设置一个内存配置器的成员,这里的内存配置器就是前面介绍的S 阅读全文
摘要:
vector空间的动态增长 vector空间的动态增长 当添加元素时,如果vector空间大小不足,则会以原大小的两倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间。vector的空间动态增加大小,并不是在原空间之后的相邻地址增加新空间,因为vector 阅读全文
摘要:
上一篇我们介绍了STL对象的构造与析构,这篇介绍STL内存的配置与释放。 STL有两级空间配置器,默认是使用第二级。第二级空间配置器会在某些情况下去调用第一级空间配置器。空间配置器都是在allocate函数内分配内存,在deallocate函数内释放内存。 第一级空间配置器 第一级配置器只是对mal 阅读全文