redis源码阅读-链表
C语言程序由于没有标准库的存在,各种造轮子。Redis为了满足需求,同样写了一个链表。
实现文件在adlist.h/adlist.c中。
结构体定义
和普通的C写的双向链表差不多。没有什么特点。
|
|
redis源码阅读-动态字符串sds
Redis没有使用c语言的字符串结构,自己设计了一个简单的动态字符串。特点是:修改时大小不足则扩容,大小足够直接使用不缩小。末尾使用‘\0’,与c语言字符串兼容。
sds的源代码在sds.h与sds.c中。
sds的定义
|
|
SDS这样设计的优点:
- 重用部分C字符串库函数的函数。
- 在常数复杂度的情况下获取字符串长度(以下代码)。
- 杜绝缓冲区溢出,通过获取空余空间函数,来进行处理(sdscat函数)。
- 减少字符串内存的重分配。不足则分配更大的空间,足够也不减少空间,而是记录新的len、free值。
- 二进制兼容。C字符串以空字符结尾,而某些二进制数据中间可能存在空字符。SDS兼容该种数据。
读书摘录-程序员的思维方式
2.2 德雷福斯模型的5个阶段
2017-01-24
但是,如果给新手提供与情境无关的规则去参照,他们就会变得能干起来。也就是说,需要这种形式的规则:“当X发生时,执行Y。”换言之,需要一份指令清单。 图2-2 玉米饼食谱,不过你知道需要烹饪多长时间吗 这就是呼叫中心的工作原理。你可以雇用一大批对当前技术没有很多经验的人,然后让他们按照一个决策树按部就班地执行下去。
3.3 L型和R型的特征
2017-02-06
事实上,综合是一项非常强大的学习技术,以至于麻省理工学院媒体实验室的尼葛洛庞蒂在Don’t Dissect the Frog, Build It [Neg94]中建议,真正想要了解一只青蛙,传统的解剖不是办法,更好的方式是构造一只青蛙。 也就是说,要求学生构造一个具有青蛙特征的生物。这是一种伟大的方式,可以真正了解到,什么使青蛙成之为青蛙,以及青蛙如何适应其特定环境。这是一个综合学习的绝佳例子。
4.4 收获R型线索
2017-02-08
这种方法为什么会起作用?我认为这是因为晨写让毫无防备的大脑倾倒想法。早上刚起床时,你还没有像你想的那样清醒。潜意识仍然占主角。你还没有提起所有防备,也还未适应有限的现实世界。你可以直接连通R型,至少一小会儿。
2017-02-08
你需要培养一种非目标驱动的思维方式。正如庞加莱所做,把一切都写在纸上(或者编辑器中,如果你必须得这么做的话),然后不去管它。不要试图思考。记住它,如布朗所说,不要关注它。只要简单地记住它。让事实和问题自由地搅和、浸泡(我们将在8.2节讨论这一话题)
redis源码阅读-内存分配
redis的内存分配主要就是对malloc和free进行了一层简单的封装。具体的实现在zmalloc.h和zmalloc.c中。
内存分配器的选择
redis支持多种内存分配器,可以选择的分配器tcmalloc、jemalloc、dlmalloc、malloc/malloc.h(apple),这几个分配器自带内存大小的记录。如果不进行设置,则默认使用malloc进行分配。