ZeeCoder

欢迎关注我的个人博客站点,网址:zcheng.ren

排序:
默认
按更新时间
按访问量

Redis源码剖析--源码结构解析

找工作那会儿,看了黄建宏老师的《Redis设计与实现》,对redis的部分实现有了一个简明的认识。在面试过程中,redis确实成为了面试官考核我的一个亮点,恰好以后的工作又与redis有着千丝万缕的联系,于是就想趁着毕业前的这段时间把redis的源代码研究一下,为以后的工作打个良好的基础。 Re...

2016-12-09 17:11:54

阅读数:971

评论数:0

C++对象模型的那些事儿之二:对象模型(下)

前言上一篇博客C++对象模型的那些事儿之一为大家讲解了C++对象模型的一些基本知识,可是C++的继承,多态这些特性如何体现在对象模型上呢?单继承、多重继承和虚继承后内存布局上又有哪些变化呢?多态真正的底层又是如何实现呢?本篇博客就带大家全面理解一下C++对象模型,从而理解上述疑惑。引例还是以上篇博...

2016-08-11 15:07:40

阅读数:723

评论数:1

记录生活,记录学习----我的2016

过着2017年的日子,思考着2016年人生的变化,或许,最大的变化是懂得记录学习,记录生活吧。2016年,博客进入了我的生活,从年初的寥寥数篇博客,到现在CSDN积累了200多篇,也许是因为「过于勤奋」,CSDN给了我博客专家的称号。博客地址:Zeecoder’s CSDN Blog2016年,无...

2017-01-08 16:11:07

阅读数:2238

评论数:6

Redis源码剖析--列表list

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

2016-12-20 22:42:58

阅读数:597

评论数:0

Redis源码剖析--快速列表quicklist

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

2016-12-20 22:42:23

阅读数:1644

评论数:1

Redis源码剖析--字符串t_string

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

2016-12-20 22:41:47

阅读数:541

评论数:0

Redis源码剖析--对象object

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

2016-12-15 16:32:46

阅读数:2204

评论数:0

Redis源码剖析--整数集合Intset

本系列博客文章已经分析了Redis的大部分数据结构,包括动态字符串,双端链表,字典,跳跃表等,这些数据结构都非常强大实用,但是在内存消耗方面也非常“巨大”。Redis的数据都是存放在内存上面的,所以对内存的使用要求及其苛刻,Redis会想方设法的来节省内存。假设有一组集合1,2,3,6,5\\{1...

2016-12-09 20:10:41

阅读数:821

评论数:0

Redis源码剖析--基数统计hyperloglog

Redis中hyperloglog是用来做基数统计的,其优点是:在输入元素的数量或者体积非常非常大的时候,计算基数所需的空间总是固定的,并且是很小的。在Redis里面,每个Hyperloglog键只需要12Kb的大小就能计算接近2^64个不同元素的基数,但是hyperloglog只会根据输入元素来...

2016-12-09 20:10:18

阅读数:1947

评论数:1

Redis源码剖析--跳跃表zskiplist

跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问的目的。跳跃表在插入、删除和查找操作上的平均复杂度为O(logN),最坏为O(N),可以和红黑树相媲美,但是在实现起来,比红黑树简单很多。> 说起跳跃表,在前段时间面试中可帮了我的大忙。腾讯一面的时候面...

2016-12-09 20:09:55

阅读数:816

评论数:0

Redis源码剖析--字典dict

字典是Redis中的一个非常重要的底层数据结构,其应用相当广泛。Redis的数据库就是使用字典作为底层实现的,对数据库的增、删、查、改都是建立在对字典的操作上。此外,字典还是Redis中哈希键的底层实现,当一个哈希键包含的键值对比较多,或者键值对中的元素都是比较长的字符串时,Redis就会使用字典...

2016-12-09 20:09:26

阅读数:800

评论数:0

Redis源码剖析--双端链表Sdlist

请持续关注我的个人博客:https://zcheng.ren 今天来分析Redis的一个基本数据结构–双端链表,其定义和实现主要在sdlist.h和sdlist.c文件中。其主要用在实现列表键、事务模块保存输入命令和服务器模块,订阅模块保存多个客户端等。 # sdlist的数据结构 Redis为...

2016-12-09 17:23:02

阅读数:590

评论数:0

Redis源码剖析--动态字符串SDS

请持续关注我的个人博客:https://zcheng.ren Redis没有使用C语言的字符串结构,而是自己设计了一个简单的动态字符串结构sds。它的特点是:可动态扩展内存、二进制安全和与传统的C语言字符串类型兼容。下面就从源码的角度来分析一下Redis中sds的实现。(sds的源码实现主要在sd...

2016-12-09 17:19:50

阅读数:714

评论数:0

Redis源码剖析--内存分配

请持续关注我的个人博客:https://zcheng.ren 深受侯捷老师的《STL源码剖析》一书的影响,在该书中开篇就对STL的空间配置器进行了一个详尽的介绍。以应用的角度而言,空间配置器是最不需要介绍的,它总是隐藏在一切组件的背后;可是,就源码分析而言,空间配置是最为关键的,也是分析源码之路的...

2016-12-09 17:18:28

阅读数:1138

评论数:0

带你深入理解STL之Set和Map

在上一篇博客中,讲到了STL中关于红黑树的实现,理解起来比较复杂,正所谓前人种树,后人乘凉,RBTree把树都种好了,接下来就该set和map这类关联式容器来“乘凉”了。STL的set和map都是基于红黑树实现的,和stack和queue都是基于deque一样,它们仅仅是调用了RBTree提供的接...

2016-09-09 15:28:47

阅读数:4366

评论数:2

带你深入理解STL之RBTree

最近一直忙于校招的笔试,STL的深入理解系列也耽搁了好几天,再加上!红黑树真的是超级超级难理解,超级超级复杂,参考了好多博客上的大神的理解才稍微明白一点,勉强入个门,下面请以一个菜鸟的角度跟着我一起学习STL的红黑树吧。概述红黑树是平衡二叉搜索树的一种,其通过特定的操作来保持二叉查找树的平衡。首先...

2016-09-06 14:55:54

阅读数:3445

评论数:1

腾讯2017暑期实习生笔试题解题答案汇总

构造回文题目给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需...

2016-09-03 15:56:52

阅读数:1868

评论数:1

带你深入理解STL之Stack和Queue

上一篇博客,带你深入理解STL之Deque容器中详细介绍了deque容器的源码实现方式。结合前面介绍的两个容器vector和list,在使用的过程中,我们确实要知道在什么情况下需要选择恰当的容器来满足需求和提升效率。一般选择的准则有如下几条: 如果需要随机访问一个容器,vector比list要好 ...

2016-08-26 21:51:19

阅读数:2526

评论数:0

带你深入理解STL之Deque容器

在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点。vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操作符,节省空间。但是其在分配的内存不够的情况下,需要对容器整体进行重新分配、拷贝和释放等操作,而且...

2016-08-26 11:43:24

阅读数:4668

评论数:0

带你深入理解STL之List容器

上一篇博客中介绍的vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,很好的支持了随机存取,但由于是连续空间,所以在中间进行插入、删除等操作时都造成了内存块的拷贝和移动,另外在内存空间不足时还需要重新申请一块大内存来进行内存的拷贝。为了克服这些缺陷,STL定义了另一种容器List,...

2016-08-24 17:29:27

阅读数:3308

评论数:0

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