数据结构
文章平均质量分 68
YangGangAVA
这个作者很懒,什么都没留下…
展开
-
结合redis设计与实现的redis源码学习-3-链表
在上一篇中,我们了解了redis的基础数据结构SDS,在redis中,基本上所有的数据都是以SDS的形式存储的,无论是long还是int。 在有了基础数据类型后,我们就要了解它是怎样在redis中使用的,今天我们来分析redis链表的实现。 在学习的过程中基本是复习对链表的操作,只是有一些实现方法和理念解决了运行速度和适用环境的问题。 redis的链表具有以下特点: 1、双端:获取某个节点的原创 2017-09-24 15:48:32 · 246 阅读 · 0 评论 -
结合redis设计与实现的redis源码学习-4-dict(字典)
redis字典实现,一不小心把markdown草稿删了,找到缓存中的直接复制过来了。原创 2017-09-28 22:51:11 · 308 阅读 · 0 评论 -
结合redis设计与实现的redis源码学习-5-skiplist(跳跃表)
跳跃表示一种有序的数据结构他通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的,平均访问速度O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作类批量处理节点。 在redis中,在实现有序集合键和在集群节点中用作内部数据结构时用到了跳跃表。 跳跃表的特点:1、redis中的跳跃表实现由zskiplist和zskiplistNode两个结构组成,其原创 2017-09-28 23:40:39 · 284 阅读 · 0 评论 -
结合redis设计与实现的redis源码学习-6-intset(整数集合)
整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个结合的元素数量不多时,redis就会使用整数集合作为集合建的底层实现。它可以保存类型为int16_t,int32_t,int64_t的整数值,并且保证集合中不会出现重复元素。 整数集合具有以下特性: 1、整数集合的底层实现是数组,这个数组以有序,无重复的方式保存集合元素,在需要时,会根据新添加元素的类型来改变这个数组的类型;原创 2017-10-10 23:58:19 · 226 阅读 · 0 评论 -
结合redis设计与实现的redis源码学习-8.0-object(对象)
重点来了! 在前面的几个章节里,我们陆续学习了redis用到的所有主要数据结构,但是redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,包含字符串对象,列表对象,哈希对象,集合对象和有序集合对象这五种类型的对象,美中对象都用到了至少一中前面的数据结构。 通过这五种不同的对象,redis可以在执行命令之前根据对象的类型来判断一个对象是否可以执行给定的命令原创 2017-10-15 23:42:19 · 288 阅读 · 0 评论 -
结合redis设计与实现的redis源码学习-9-zipmap(压缩图)
在学习了所有redis设计与实现的数据结构后,我发现在redis中还有一些特殊的数据结构,今天我们来学习zipmap。 zipmap和ziplist比较相似,使用特殊的内存存储方法来提升个数较少的键值对。具有以下特点: 1、使用1个字节的len来存储元素个数,当长度大于最大值那么只能遍历获得size了; 2、len后面是key的长度,一般使用1个字节或者5个字节表示; 3、free用来表示v原创 2017-10-21 21:58:57 · 526 阅读 · 2 评论 -
结合redis设计与实现的redis源码学习-7-ziplist(压缩列表)
压缩列表是列表件和哈希键的底层实现之一,当一个列表件只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么redis就会使用压缩列表来做列表键的底层实现。 压缩列表的特点: 1、压缩列表是由一系列特殊编码的连续内存块组成的顺序型数据结构。 2、一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值。 3、添加新节点到压缩列表,或者从压缩列表中原创 2017-10-13 08:25:29 · 276 阅读 · 0 评论