Redis
sx666777888
这个作者很懒,什么都没留下…
展开
-
Redis学习笔记&源码阅读--跳跃表
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概念引子跳跃表这个概念在第一次接触时还是比较唬人的,我们先来聊聊它产生的背景。我们知道数组和链表的区别,数组是在内存上连续的且保存的数据一般是同类型的,随意我们可以通过指针进行随机访问,在做查询操作时就特别方便,这是它的优势,但是在做删除和新增时就略显笨重了,需要做大量的内存拷贝操作;相反,链表的内存并不是连续的,所以在新增和删除时都不需要拷贝内存,只需要做指针的改动操作就可以了,但是缺原创 2020-07-24 13:41:15 · 181 阅读 · 0 评论 -
Redis学习笔记&源码阅读--简单动态字符串
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概念简单动态字符串(Simple Dynamic Strings, SDS)是Redis的基本数据结构之一,用于存储字符串和整型数据。SDS兼容C语言标准字符串处理函数,且在此基础上保证了二进制安全。对于字符串,一般有两种保存方式,一种是使用’\0‘作为字符串的结束符,另一种是记录字符串的长度。SDS采用的是第二种方式来存储字符串,那么按照理解,SDS的结构大致如下所示:struct原创 2020-07-17 13:10:09 · 179 阅读 · 0 评论 -
Redis学习笔记&源码阅读--整数集合
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概念整数集合(intset)是一个有序的、存储整型数据的结构,当Redis集合类型的元素都是整数并且都处在64位有符号整数范围之内时,使用该结构体存储。在两种情况下,底层编码会发生转换。当元素个数超过一定数量之后(默认值为512),即使元素类型仍然是整型,也会将编码转换为hashtable;当增加非整型变量时,底层编码从intset转换为hashtable。整数集合在Redis原创 2020-07-13 13:12:41 · 144 阅读 · 0 评论 -
Redis学习笔记&源码阅读--字典-操作
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概述上文Redis学习笔记&源码阅读–字典-概念中我们已经介绍了字典的概念和源码层的结构,本节介绍对字典的各种基本操作。基本操作接下来结合源码看Redis是如何创建字典,以及对字典进行增删改查的。创建字典源码中创建字典的函数是dictCreate函数,源码如下:/*创建一个新的字典*/dict *dictCreate(dictType *type, vo原创 2020-07-11 15:02:59 · 147 阅读 · 0 评论 -
Redis学习笔记&源码阅读--字典间断遍历专题
非正文Redis中字典的间隔遍历的核心是reverse binary itreation,初步翻译为反转二进制迭代吧,反正别人也是这么翻译的????,这个算法很精妙,但是真的很难理解,单纯介绍这个主题就需要大量的篇幅,所以我把它抽离成一个专题,避免在我介绍字典操作的内容里占用大量的篇幅造成喧宾夺主的不良效果。我自己理解这个算法也借鉴了网上已有的很多博客和《Redis5设计与源码分析》,受益良多,我则是按照自己理解的角度来介绍和讲解这个算法,算是提供另一种视角吧,我也不敢保证从读者的食用效果。讲解这个原创 2020-07-11 14:34:56 · 229 阅读 · 0 评论 -
Redis学习笔记&源码阅读--字典-概念
申明概念字典主要是用来存储健值对的一种数据结构,详细的概念不赘述了,我相信你不是为了释义来看我的博客。在Redis中字典有如下特征:可以存储海量数据,键值对是映射关系,可以根据键以O(1)的时间复杂度取出或插入关联值。键值对中键的类型可以是字符串、整型、浮点型等,且键是唯一的。键值对中值的类型可为String、Hash、List、Set、SortedSet。《Redis5设计与源码分析》一书中对字典的核心组成进行了比较详细的讲解,大家有条件的建议去看看,我这里只是尝试简化梳理下。能够实现O原创 2020-07-02 08:59:19 · 149 阅读 · 0 评论 -
Redis学习笔记&源码阅读--压缩列表-操作
申明本文基于Redis源码5.0.8本文内容大量借鉴《Redis设计和实现》和《Redis5设计与源码分析》概述上文Redis学习笔记&源码阅读–压缩列表-概念中我们介绍了我们压缩列表的概念和对应源码中结构体,本节主要介绍对ziplist的各种基本操作。基本操作创建ziplist创建一个新的ziplist我们在前一篇概念那篇文章中已经在介绍ziplist结构时讲解过一次了,这里再贴下源码,不再讲解。/* Create a new empty ziplist. */unsigne原创 2020-06-27 19:25:06 · 341 阅读 · 0 评论 -
Redis学习笔记&源码阅读--压缩列表-概念
概念Redis使用字节数组表示一个压缩列表,压缩列表结构示意如下所示:zlbyteszltailzllenentry1…entryXzlend各字段的具体含义如下:zlbytes:压缩列表的字节长度,占4个字节,因此压缩列表最多有2^32-1个字节。zltail:压缩列表尾元素相对于压缩列表起始地址的偏移量,占4个字节。zllen:压缩列表的元素个数,占2个字节。zllen无法存储元素个数超过65535(2^16-1)的压缩列表,必须遍历整个压缩列表才能获取到元素个数原创 2020-06-19 13:00:35 · 272 阅读 · 0 评论