
开源代码
文章平均质量分 76
还是要学会仰望
从头开始,学喜欢的技术,写踏实的博客,做上进的人
展开
-
memcached学习之总览
题记兴之所起,应立马辅以行动,方得始终。最近工作不是那么忙了,想找几份开源代码来提高下自己,一来可以提高下自己的知识面,二来可以学习良好的代码风格。因为之前的工作稍微了解过缓存系统,因此想借这次机会好好学习下缓存系统的设计以及构造,这里主要是想学习下memcached和redis两个系统,作为服务端缓存软件的佼佼者,它们都有着良好的性能以及优秀的代码架构,在接下来的时间里面,我想对两份源码阅读原创 2016-06-12 20:54:26 · 342 阅读 · 0 评论 -
redis之sds
类型介绍代码分析自定义类型struct sdshdr { //包含头信息的字符串结构体 unsigned int len; //申请的字符串长度 unsigned int free; //当前空闲的内存字节数 char buf[]; //真实存放字符串内容的地方 };定义变量代码分解sdsnewlen,根据字符串和初始长度新建一个sds原创 2016-07-04 00:02:33 · 769 阅读 · 0 评论 -
redis之ziplist
类型介绍代码分析自定义类型typedef struct zlentry { unsigned int prevrawlensize, prevrawlen; unsigned int lensize, len; unsigned int headersize; unsigned char encoding; unsigned char *p;}原创 2016-06-28 19:23:37 · 410 阅读 · 0 评论 -
redis命令解析之string类型
号外号外,新建Redis交流讨论群:332160890,欢迎加入!!redis的字符串string类型的编码有三种:OBJ_ENCODING_RAWOBJ_ENCODING_INTOBJ_ENCODING_EMBSTR1、setCommand(client *c)使用:SET key value [NX] [XX] [EX ]原创 2017-03-23 17:39:06 · 398 阅读 · 0 评论 -
redis命令解析之set类型
号外号外,新建Redis交流讨论群:332160890,欢迎加入!!集合类型的编码方式:OBJ_ENCODING_HT(SET)和OBJ_ENCODING_INTSET(INTSET)1、saddCommand(client *c)使用:SADD key value [value …]说明:添加数据到key对应的set中,如果key对应set不存在,则新建2、sremCo原创 2017-04-09 17:57:20 · 389 阅读 · 0 评论 -
redis持久化之AOF
号外号外,新建Redis交流讨论群:332160890,欢迎加入!!一、说明1.1AOF相关配置项配置项作用aof_rewrite_perc百分比阈值,当aof的增量超过这个阈值时,开始aof的rewrite操作aof_rewrite_min_size当aof的文件大小超过该值时原创 2017-03-24 16:09:12 · 695 阅读 · 0 评论 -
redis命令解析之hash类型
号外号外,新建Redis交流讨论群:332160890,欢迎加入!!哈希类型的两种编码方式:OBJ_ENCODING_HT和OBJ_ENCODING_ZIPLIST1、hsetCommand(client *c)使用:HSET key field value说明:如果key对应的哈希表不存在,则创建一个,然后再在该哈希表中插入field=> value键值对,如果该fi原创 2017-03-25 16:51:29 · 407 阅读 · 0 评论 -
区块链特辑
最近刚转岗从事区块链相关的研发工作,因此对区块链开始了探索学习阶段,在学习过程中,发现对于开源代码的研读大多处于初级阶段,而且很容易存在两种情况,一是描述简单,只介绍功能没有详细的结构,二是持续性不够,往往都是写了两三篇之后就停滞了,因此我想借自己学习的机会,将这些进行整理并广而告之,为区块链的学习者构建更好更方便的学习渠道。这个特辑将记录我的博客中所有关于区块链相关的文章,后续每新增一篇文章...原创 2018-07-02 01:24:35 · 487 阅读 · 0 评论 -
以太坊源码分析之 P2P网络(三、UDP底层通信)
区块链特辑 :https://blog.youkuaiyun.com/fusan2004/article/details/80879343,欢迎查阅,原创作品,转载请标明!这周工作有点小忙,部门区块链基础平台的开发开始进入节奏了,和上一篇间隔间隔有点久了,以后还是要坚持,不能刚开始就犯毛病了。上篇讲的是以太坊p2p网络的一个重点部分——节点发现,在介绍的时候提过,节点发现是通过udp的方式来进行的,这一篇就介...原创 2018-07-16 11:45:44 · 1715 阅读 · 0 评论 -
redis之adlist
类型介绍这部分是redis自定义的链表类型,该链表为双向链表,可以自定义存储类型,另外可以自定义释放、拷贝、对比函数等功能,提供的操作也比较丰富,包括创建、添加、插入、删除、索引等步骤,还拥有迭代器功能。代码分析自定义类型链表节点,双向链表typedef struct listNode { struct listNode *prev; struct listNo原创 2016-08-29 23:26:17 · 1252 阅读 · 0 评论 -
redis之zmalloc
zmalloc介绍这部分是用来申请内存的,之所以单独成了一部分在于redis希望能够将不同系统提供的api统一起来,另外还有一部分系统无法获取malloc数目,因此在这里也进行了一部分的封装;这部分内容很简单,实际上就是malloc, calloc, realloc, free几个操作的变形代码分析使用变量used_memory,已使用的内存数; malloc_thread_sa原创 2016-08-31 17:46:04 · 1120 阅读 · 0 评论 -
memcached学习之assoc部分
assoc部分的功能介绍这部分主要是一个hash表(hash函数采用Jenkins_hash),用于保存item数据的地址,主要是用来快速查找item信息,这是因为一般情况下缓存或存储数据库的读写频率是不一样的,读频率会很大,这样如果每次都采用遍历操作,会严重影响性能。其实这种做法和DB是很相似的地方,只不过真正的DB采用的树结构,这里由于在内存中存储,不涉及磁盘等细节,采用hash能够更加简原创 2016-06-14 13:36:56 · 1475 阅读 · 0 评论 -
memcached学习之slabs部分
slabs部分的功能介绍slabs部分的整体逻辑slabs部分的代码分解自定义类型typedef struct { //chunk_size, 单个数据块的大小 unsigned int size; /* sizes of items */ //单个slab中包含的item数量,其实也就是chunk的数目 unsigned int pe原创 2016-06-15 15:12:46 · 1036 阅读 · 0 评论 -
memcached学习之item部分
item部分的功能介绍item部分是memcached的存储结构,所有的读写修改等操作都是通过对item的处理来进行的,另外对于缓存来说,其能够使用的内存空间是有限的,如果将请求数少或者过期的数据清理后将内存腾出来也是必备的一个功能,这里面memcached的策略主要就是LRU方式和lazy expiration方法,这篇里面只会涉及lazy expiration方法;不考虑LRU方法的原因是原创 2016-06-16 18:37:11 · 1376 阅读 · 0 评论 -
memcached学习的整体流程
整体流程的介绍memcached的整体结构采用的是多线程框架,这也是为什么memcached中很多锁的原因,我个人对这一点不是很喜欢,一是因为看起来很复杂,二是感觉性能也会因此而受到影响;memcached的多线程框架采用的是一对多的策略,其中主线程主要用来监听新的网络连接,工作线程用来处理请求,主线程和工作线程是通过管道pipe来实现的。 在每个请求过程中,请求以及响应的过程都是通过一个状原创 2016-06-18 11:53:53 · 523 阅读 · 0 评论 -
memcached的LRU部分
LRU部分的功能介绍LRU部分的整体逻辑LRU部分的代码分解1、start_lru_maintainer_thread函数,;int start_lru_maintainer_thread(void) { int ret; pthread_mutex_lock(&lru_maintainer_lock); do_run_lru_maintainer_t原创 2016-06-18 15:05:41 · 1574 阅读 · 0 评论 -
redis之zipmap
类型介绍代码分析变量ZIPMAP_BIGLEN, zipmap的最大长度 ZIPMAP_END, zipmap的结束符 ZIPMAP_VALUE_MAX_FREE, zipmap的free部分最大长度函数zipmapNew,新建一个zipmap;unsigned char *zipmapNew(void) { unsigned char *zm = zmallo原创 2016-06-25 17:17:31 · 1087 阅读 · 0 评论 -
redis之dict
代码分析自定义类型typedef struct dictEntry { void *key; //键值 union { void *val; //自定义类型 uint64_t u64; int64_t s64; double d; } v; struct dictEntry *next;原创 2016-06-23 13:54:45 · 392 阅读 · 0 评论 -
redis命令解析之list类型
号外号外,新建Redis交流讨论群:332160890,欢迎加入!!链表类型的编码方式为:OBJ_ENCODING_QUICKLIST1、lpushCommand(client *c)使用:LPUSH key value [value …]说明:将一个或者多个value插入到key对应的链表的表头,如果不存在,则新建一个链表2、rpushCommand(client *原创 2017-03-28 14:42:01 · 340 阅读 · 0 评论 -
redis之intset
类型介绍intset是一个整型的数据集合,这里面的结构比较简单,实际上就是一个整型数组,在添加过程中,同样给该数组按照数据大小排序,这点在查找的时候比较容易,比较符合缓存的特点,另外,这里面同样给数据按照类型进行了区分,也是为了节省内容空间人为增加了程序的复杂度,但是回报还不错,实际操作过程中,许多情况下数据是同类型的,这样避免了都是用64位整型来保存数据;代码分析自定义类型t原创 2016-09-06 23:20:15 · 399 阅读 · 0 评论 -
以太坊源码分析之 P2P网络(五、p2p连接控制与消息处理(中))
区块链特辑 :https://blog.youkuaiyun.com/fusan2004/article/details/80879343,欢迎查阅,原创作品,转载请标明!承继前篇, 前一篇介绍了连接底层的一些细节,包括socket,握手等详细步骤,等待握手完成后,会调用startPeerSession抛向上层,这个时候连接表明已经建立了,从代码里面,为了表征这种连接的建立,会再定义一些数据结构来表达这种...原创 2018-09-06 10:05:14 · 861 阅读 · 0 评论