自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

菜鸟的学习之路

莫问前程

  • 博客(12)
  • 收藏
  • 关注

原创 Redis源码学习简记(十 一)t_set与t_zset原理与个人理解

        这次把两个set放在一起来说吧。经过前面的hash与list的分析,这两个的实现感觉其实比前面的要简单一些的。        首先来说一下这个t_set吧。这个set的实现主要是由intset与dict两种编码模式实现的。其中intset只能存储整型,而且是有序存储的。而dict就是前面熟知的字典实现的hash。来看看一些set的基本实现吧。从其创建可以看到,如上所说的也就两种编码...

2018-04-25 15:58:59 1469

原创 Redis源码学习简记(十)t_list原理与个人理解

       对于链表,我看的这个版本的redis只使用quicklist作为存储方式。这种数据结构结合了ziplist的存储空间的高效与双向链表的灵活的特性。在看api中,对于这个双向链表的使用,看起来其实更像队列的实现,基本上都是围绕push和pop的操作。那么知道了链表的实现的数据结构,那么就来看看redis中的api是怎么写的。链表的push操作/* The function pushes...

2018-04-21 11:07:37 502

原创 Redis源码学习简记(九)t_hash原理与个人理解

        对于redis的基本数据结构,经过一个多星期的分析大概是明了了。接下来根据计划是分析t_前缀的大量的接口函数。这里面就比底层数据更加接近用户的逻辑代码了。其实本人比较期待的后面集群,服务器等这些代码的实现。话不多说,马上来分析一下吧。    这部分的代码并没有头文件。直接一个c文件里面包含了所有的函数,我经过整理后,根据比较合适的阅读顺序来发每一个函数吧。这部分的函数主要做的工作都...

2018-04-15 17:18:01 2086

原创 Redis源码学习简记(八)quicklist原理与个人理解

        在看t_list的时候发现,少研究了一个数据结构。还是先把这个快链分析一下,再看后面的东西。quicklist是3.2版本新增加的,所以看着网上博客学习很容易会忽略掉。#define OBJ_ENCODING_LINKEDLIST 4 /* No longer used: old list encoding. */        旧版本的linkedlist基本上是被淘汰掉了,而是...

2018-04-12 16:15:34 2585

原创 Redis源码学习简记(七)object原理与个人理解

        object是redis中的封装系统。其把string,list,set,zset与hash封装成一个统一的对象,命名为robj。该数据结构中,存储了类型,编码,引用次数,数据与LRU替换算法的一些数据。具体先看看这个数据结构的定义,在server.h中定义。 //redis属于key-value 数据库 //nosql数据库,这种映射关系使用dict用来维护 //而dict实...

2018-04-11 19:54:57 736

转载 redis阅读顺序

作者:Zeech链接:https://www.zhihu.com/question/28677076/answer/134193549来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。找工作那会儿,看了黄建宏老师的《Redis设计与实现》,对redis的部分实现有了一个简明的认识。在面试过程中,redis确实成为了面试官考核我的一个亮点,恰好以后的工作又与redis有着...

2018-04-11 10:50:16 756

原创 Redis源码学习简记(六)intset原理与个人理解

intset是一个对内存空间锱铢必较的有序set。使用一段连续的内存空间存储一段数据。看起来有点像数组的形式。数据结构typedef struct intset { uint32_t encoding;//编码的方式 分为int16 int32 int64 uint32_t length;//数据的个数 int8_t contents[];//存储数据的点。int8_t与c...

2018-04-10 20:53:02 447

原创 Redis源码学习简记(五)skiplist跳跃表原理与个人理解

        跳跃表的实现异常精妙,其本质是一个有序链表。结合了概率学,利用内存换时间,使得链表查找达到了o(logn)的速度。媲美红黑树。不过使用的空间应该要多于红黑树。但是其实现比红黑树简单很多,不存在红黑树纷繁复杂的左旋,右旋的操作。今天让我们来看看跳跃表的具体实现吧。同理先撸一下其数据结构。数据结构/* ZSETs use a specialized version of Skiplis...

2018-04-09 16:17:55 348

原创 Redis源码学习简记(四)ziplist与zipmap压缩编码原理与个人理解

把两个放在一起说主要是两个都是为了内存的压缩,使得将所有的东西都放在了char*的数组中。根据自定义的一些编码规则,实现增删改查的操作。里面涉及大量的位操作,自定义的decode(解码)和encoding(编码)的操作。我觉把原理与数据结构理解一下就好,具体的位操作,实现起来有点复杂。为了压缩空间,redis把几乎每一bit的空间使用了。ziplist数据结构其本质是一个超长的字符串。|  zlb...

2018-04-08 16:25:48 1202 1

原创 Redis源码学习简记(三)dict哈希原理与个人理解

Redis哈希的实现比较难理解,为了提升性能,采用分治的思想。当哈希桶需要扩容的时候,并不是直接全部更新,而是定义两个哈希表,新表旧表。当处于扩容状态时,每进行一次插入或查找操作就进行一次更新操作,即把原始表的一个数据移到新的表中。当所有数据迁移完成后,新表变成旧表,旧表变成新表。这样在扩容的过程就变成了分步进行。减少了因扩容而产生的长时间等待。具体的实现,代码见,仔细看了代码后,了解会深很多。先...

2018-04-08 10:31:25 941

原创 Redis源码学习简记(二) adlist原理与个人理解

redis中的adlist实质上是一个双向链表。里面实现了自己的iterator(包含正负方向)。作者对于链表写的真的是流畅,看得赏心悦目。没有一句多余的,很值得学习。数据结构总体来说分为三个数据类型。list结构体,用于存储链表头结点,尾节点,使用者自定义的复制,释放与匹配函数(利用函数指针实现),还有长度。typedef struct list { listNode *head; ...

2018-04-07 17:12:45 214

原创 Redis源码学习简记(一) sds原理与个人理解

2018/4/7    从今天开始,记录学习Redis源码的一些笔记,写一些自己的理解与总结。主要以概念和自己觉得重要的东西为主。希望能在一个月内看完。首先开篇先看redis中sds链表的实现。数据结构其数据结构异常简单typedef char *sds;就一个字符串指针。/* Note: sdshdr5 is never used, we just access the flags byte d...

2018-04-07 16:17:47 598 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除