redis
Shonm
用blog记录点点滴滴。。。成长的轨迹一步一个印
展开
-
redis 源码学习笔记
终于有时间来分析redis源码了。在github上找了一个循序渐进学习redis的实例库。第一部分就是学习redis的网络模型。之前研究skynet模型时有深入的学习网络模型,所以看这块还算轻松。网上有各种剖析redis网络模型的blog,我这里就不再班门弄斧了,仅仅记录学习的过程。学习redis网络模型时的代码如下:#include "ae.h" #include <stdio.h>...原创 2018-06-14 21:23:41 · 574 阅读 · 2 评论 -
redis 源码学习笔记--字符串
学习redis,字符串是最基础的结构之一。redis字符串设计的比较巧妙。由于他是基于c语言的,不像C++字符串类要实现各种构造函数,析构函数等等,整体设计很精炼。但是也有一些要注意的地方。字符串有长度len,可用长度free等数据。当然最关键的是数据buf。由于数据不是定长的,所以把len,free放在结构体的最前面,最后才放数据:struct sdshdr { // buf 中已占用空间的长...原创 2018-06-15 18:41:21 · 295 阅读 · 0 评论 -
redis 学习笔记--hash表的渐进式rehash
关于hash表,前面有文章介绍过,其原理并不难。 redis的数据库使用字典来作为底层实现的,对数据库的增删查改操作也是构建在对字典的操作之上。redis的字典使用hash表作为底层实现。 redis作为一个广泛使用的内存数据库,时间和空间效率都是至关重要的。为了使时间效率和空间效率达到最大化,redis中的hash表设计普通的hash表又有什么区别呢? 我们知道当hash表满员时(或负载因...原创 2018-07-02 18:41:33 · 4860 阅读 · 4 评论 -
redis 源码学习笔记--ziplist数据结构
Ziplist 是由一系列特殊编码的内存块构成的列表, 哈希键、列表键和有序集合键初始化的底层实现皆采用 ziplist。学习ziplist结构意义重大,本篇试着剖析ziplist的结构。本着学习的目的,快速掌握重点,这里放弃实现ziplist所有编码结构,以短字符串(长度<=63)编码为例来说明ziplist的结构。一个典型的ziplist结构分布如下:area |<-...原创 2018-06-27 22:43:00 · 792 阅读 · 0 评论 -
redis 源码学习笔记--双向列表
在redis中List列表中,主要功能有:1 向指定的列表插入(弹出)数据,方向可以向前插入(弹出),也可以朝后插入(弹出)。指令为lpush,rpush,lpop,rpop2 获取给定索引的元素,给定索引可以是区间(start, stop),指令为lindex,lrange3 获取列表的长度,指令为llen要想实现上述功能,首先想到的是链表。要做到两头插入或弹出,必须要有两个指针,分别指向链表的...原创 2018-06-28 17:17:45 · 302 阅读 · 0 评论 -
redis 源码学习笔记--跳跃表简单编码实现
要理解SkipList,得先从LinkedList说起。LinkedList 增删查改的时间复杂度都是O(N),它最大的问题就是通过一个节点只能reach到下一个节点(Double LinkedList 是一种改进方案),那么改进的思路就是通过一个节点reach到多个节点,例如下图:这种情况下便可将复杂度减小为O(N/2)。这是一种典型的空间换时间的优化思路。SkipList则 更进一步,采用了分...原创 2018-07-04 12:25:08 · 306 阅读 · 0 评论