Redis
文章平均质量分 84
ZeeCoder
这个作者很懒,什么都没留下…
展开
-
Redis源码剖析--源码结构解析
找工作那会儿,看了黄建宏老师的《Redis设计与实现》,对redis的部分实现有了一个简明的认识。在面试过程中,redis确实成为了面试官考核我的一个亮点,恰好以后的工作又与redis有着千丝万缕的联系,于是就想趁着毕业前的这段时间把redis的源代码研究一下,为以后的工作打个良好的基础。 Redis简介redis全称REmote DIctionary Server,是一个由Salvatore S原创 2016-12-09 17:11:54 · 1812 阅读 · 0 评论 -
Redis源码剖析--快速列表quicklist
在RedisObject这一篇博客中,有介绍到list结构的底层编码类型有OBJ_ENCODING_QUICKLIST,当时就发现这个底层数据结构被我遗漏了。昨天花了点时间补了补这个知识,看完发现这货就跟STL中的deque的思想一样,顿时觉得又是一个实现超级繁琐但很实用的数据结构。今天就带大家一起来看看这个“二合一”的数据结构。 quicklist是Redis在3.2版本加入的新数据结构,其是原创 2016-12-20 22:42:23 · 4679 阅读 · 1 评论 -
Redis源码剖析--字符串t_string
前面一直在分析Redis的底层数据结构,Redis利用这些底层结构设计了它面向用户可见的五种数据结构,字符串、哈希,链表,集合和有序集合,然后用redisObject对这五种结构进行了封装。从这篇博客开始,带你一点点分析五种数据类型常见命令对应的源码实现,慢慢地解开Redis的面纱。字符串概述字符串是Redis中最为常见的数据存储类型,其底层实现是简单动态字符串sds,因此,该字符串类型是二进制安全原创 2016-12-20 22:41:47 · 1530 阅读 · 0 评论 -
Redis源码剖析--对象object
前面一系列的博客分析了Redis的基本数据结构,有动态字符串sds、双端链表sdlist、字典dict、跳跃表skiplist、整数集合intset和压缩列表ziplist等,这些数据结构对于用户来说是不可见的。Redis在这些数据结构的基础上构建了对用户可见的五种类型,分别是string、hash、list、set和zset,为了更方便的使用这五种数据类型,Redis定义了RedisObject结原创 2016-12-15 16:32:46 · 2708 阅读 · 0 评论 -
Redis源码剖析--整数集合Intset
本系列博客文章已经分析了Redis的大部分数据结构,包括动态字符串,双端链表,字典,跳跃表等,这些数据结构都非常强大实用,但是在内存消耗方面也非常“巨大”。Redis的数据都是存放在内存上面的,所以对内存的使用要求及其苛刻,Redis会想方设法的来节省内存。假设有一组集合1,2,3,6,5\\{1,2,3,6,5\\},如果采用上述的数据结构来存储的话,必然会付出昂贵的内存代价,因此,Redis在这原创 2016-12-09 20:10:41 · 1234 阅读 · 0 评论 -
Redis源码剖析--基数统计hyperloglog
Redis中hyperloglog是用来做基数统计的,其优点是:在输入元素的数量或者体积非常非常大的时候,计算基数所需的空间总是固定的,并且是很小的。在Redis里面,每个Hyperloglog键只需要12Kb的大小就能计算接近2^64个不同元素的基数,但是hyperloglog只会根据输入元素来计算基数,而不会存储元素本身,所以不能像集合那样返回各个元素本身。基数统计什么是基数呢?基数是指一个集合原创 2016-12-09 20:10:18 · 3898 阅读 · 1 评论 -
Redis源码剖析--跳跃表zskiplist
跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问的目的。跳跃表在插入、删除和查找操作上的平均复杂度为O(logN),最坏为O(N),可以和红黑树相媲美,但是在实现起来,比红黑树简单很多。> 说起跳跃表,在前段时间面试中可帮了我的大忙。腾讯一面的时候面试官要求设计一个数据结构,里面的元素要求按一定顺序存放,能以最低的复杂度获取每个元素的名次,且增、删等操作的复原创 2016-12-09 20:09:55 · 1195 阅读 · 0 评论 -
Redis源码剖析--字典dict
字典是Redis中的一个非常重要的底层数据结构,其应用相当广泛。Redis的数据库就是使用字典作为底层实现的,对数据库的增、删、查、改都是建立在对字典的操作上。此外,字典还是Redis中哈希键的底层实现,当一个哈希键包含的键值对比较多,或者键值对中的元素都是比较长的字符串时,Redis就会使用字典作为哈希键的底层实现。Redis中的字典采用哈希表作为底层实现,在Redis源码文件中,字典的实现代码在原创 2016-12-09 20:09:26 · 1123 阅读 · 0 评论 -
Redis源码剖析--双端链表Sdlist
请持续关注我的个人博客:https://zcheng.ren今天来分析Redis的一个基本数据结构–双端链表,其定义和实现主要在sdlist.h和sdlist.c文件中。其主要用在实现列表键、事务模块保存输入命令和服务器模块,订阅模块保存多个客户端等。 # sdlist的数据结构Redis为双端链表的每一个节点定义了如下的结构体。// 链表节点定义typedef struct listNo原创 2016-12-09 17:23:02 · 1041 阅读 · 0 评论 -
Redis源码剖析--动态字符串SDS
请持续关注我的个人博客:https://zcheng.renRedis没有使用C语言的字符串结构,而是自己设计了一个简单的动态字符串结构sds。它的特点是:可动态扩展内存、二进制安全和与传统的C语言字符串类型兼容。下面就从源码的角度来分析一下Redis中sds的实现。(sds的源码实现主要在sds.c和sds.h两个文件中)# sds数据结构定义在sds.h文件中,我们可以找到sds的数据结构定原创 2016-12-09 17:19:50 · 2172 阅读 · 0 评论 -
Redis源码剖析--内存分配
请持续关注我的个人博客:https://zcheng.ren深受侯捷老师的《STL源码剖析》一书的影响,在该书中开篇就对STL的空间配置器进行了一个详尽的介绍。以应用的角度而言,空间配置器是最不需要介绍的,它总是隐藏在一切组件的背后;可是,就源码分析而言,空间配置是最为关键的,也是分析源码之路的第一步!Redis在内存分配方面,仅仅是对系统的malloc/free做了一层简单的封装,然后加上了异常原创 2016-12-09 17:18:28 · 2113 阅读 · 1 评论 -
Redis源码剖析--列表list
上一篇博客Redis源码剖析–快速列表 带大家一起剖析了quicklist这个底层数据结构的实现原理。Redis对外开放的列表list结构就是采用quicklist作为底层实现(在新版本的Redis源码中,不再采用ziplist和sdlist两种结构,而是统一采用quicklist)。有关列表键的实现源码在t_list.c文件中,大家可以边看源码边看这篇博客,一起来理解。List概述其实在[Redi原创 2016-12-20 22:42:58 · 1557 阅读 · 0 评论