Redis源码剖析--数据库db

按照Redis源码剖析–源码结构解析一文中给自己规定的六个阶段来学习Redis。目前前三个阶段的学习以及完成了,这些都是和系统的耦合性比较小的部分,所以看起来也比较轻松。从这篇博客开始,就进入到第四阶段的源码剖析了。Redis的各个功能的实现将会顺着我们的逐步深入而变得清晰明了,如果读者跟着我的步伐一起学习,到了这一刻,想必也是兴奋的。废话也不多说了,前面所有的数据结构都是为后面的功能实现做铺垫。那么今天,就来啃掉数据库实现这块硬骨头。

阅读更多
Redis源码剖析--有序集合t_zset

今天来剖析一个比较有意思的数据类型—— 有序集合zset,说实话,它的源码真的是多,而且繁琐,不过,其中的一部分在Redis源码剖析–跳跃表zskiplist中分析过了。有序集合到底是什么呢?有序集合里面存放的元素都自带一个分值,根据这个分值来对元素进行排序,从而使其成为一个有序的集合。接下来,枯燥的Read Code时间到了。

阅读更多
Mac下安装Redis以及配置python的Redis库

之前由于是学习Redis的源码风格,一直都没有对它进行较多的使用和实践,以至于源码分析的过程中,总是会带来一些疑惑和不解。于是,结合最近学得python,打算用python和redis来干点什么,虽然说现在还不知道这个「什么」究竟是什么。但是,工欲善其事必先利其器,先把它安装好,跑起来再说吧。

阅读更多
Redis源码剖析--哈希t_hash

不知不觉,从第一篇写Redis源码分析开始,已经过了快一个月了,想想自己的进度,简直慢的吓人啊,这样下去不行,后面得加快脚步了。今天分析的是Redis的又一个数据类型—哈希,哈希键的底层编码形式有OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_HT两种,其中,前者的底层数据结构为压缩列表,后者的底层数据结构为字典。如有对这两个结构不清楚的,可以点击跳转去温故复习一下。

阅读更多
Redis源码剖析--集合t_set

今天来看看Redis的另一个数据类型—集合set。在RedisObject一篇中,有介绍到集合对象的底层有两种编码形式,分别是OBJ_ENCODING_INTSET(底层数据结构为整数集合)和OBJ_ENCODING_HT(底层数据结构为字典),如果对整数集合Intset字典dict不熟悉的,可以点击跳转去复习一下。下面,就一起去剖析一下set的实现源码吧。

阅读更多
Redis源码剖析--列表t_list

上一篇博客Redis源码剖析–快速列表 带大家一起剖析了quicklist这个底层数据结构的实现原理。Redis对外开放的列表list结构就是采用quicklist作为底层实现(在新版本的Redis源码中,不再采用ziplist和sdlist两种结构,而是统一采用quicklist)。有关列表键的实现源码在t_list.c文件中,大家可以边看源码边看这篇博客,一起来理解。

阅读更多
Redis源码剖析--快速列表quicklist

RedisObject这一篇博客中,有介绍到list结构的底层编码类型有OBJ_ENCODING_QUICKLIST,当时就发现这个底层数据结构被我遗漏了。昨天花了点时间补了补这个知识,看完发现这货就跟STL中的deque的思想一样,顿时觉得又是一个实现超级繁琐但很实用的数据结构。今天就带大家一起来看看这个“二合一”的数据结构。

阅读更多
Redis源码剖析--字符串t_string

前面一直在分析Redis的底层数据结构,Redis利用这些底层结构设计了它面向用户可见的五种数据结构,字符串、哈希,链表,集合和有序集合,然后用redisObject对这五种结构进行了封装。从这篇博客开始,带你一点点分析五种数据类型常见命令对应的源码实现,慢慢地解开Redis的面纱。

阅读更多
Redis源码剖析--对象object

前面一系列的博客分析了Redis的基本数据结构,有动态字符串sds双端链表sdlist字典dict跳跃表skiplist整数集合intset压缩列表ziplist等,这些数据结构对于用户来说是不可见的。

Redis在这些数据结构的基础上构建了对用户可见的五种类型,分别是string、hash、list、set和zset,为了更方便的使用这五种数据类型,Redis定义了RedisObject结构体来表示它们。今天,我们就一起来看看RedisObject是如何构建的!(如果底层结构不熟悉的,可以点击上述)

阅读更多
Redis源码剖析--压缩列表ziplist

压缩列表(ziplist)是由 一系列特殊编码的内存块构成的列表,其是Redis的列表建和哈希键的底层实现之一。和整数集合一样,二者都是为Redis节省内存而开发的数据结构。

ziplist可以用来存放字符串或者整数,其存储数据的特点是:比较小的整数或比较短的字符串。Redis的列表建,哈希键,有序集合的底层实现都用到了ziplist。

阅读更多