Redis之简单动态字符串&链表
2018-03-06 17:08
211 查看
Redis之简单动态字符串
ps:今天一口气看了redis的动态字符串,链表,字典的底层实现,对与其中的一些想法感觉很精妙 (很久没有用我的C++了 突然有点想它 嘻嘻嘻)
首先进行说明一下,redis的底层都是用c语言实现的 应该是为了追求卓越的内存读取修改的能力所以选择了比较底层的语言。
众所周知,c语言的字符串是以‘/0’为结尾的,在redis中仍然保持了这个特点,这是为了可以方便直接调用一些c语言关于处理字符串的库函数而做准备的。
在redis中并不经常使用c的字符串,大多数时候只是把它作为一些字符串常量来使用(日志的打印等),redis自己设计了一种高效率的的动态字符串(SDS)
下面来介绍一下SDS的优点:
1. 常数复杂度获取字符串长度(主要是用结构体中的len属性)
2. 杜绝缓冲区溢出(因为有free字段可以知道当前还有多少空间)
3. 减少修改字符串长度所需要的内存分配
4. 二进制安全(因为C语言中只有认为空字符是结尾,所以c语言的字符串只能存储文本内容,而在SDS中可以通过len得知真正的字符长度因此可以存储各种类型的二进制类型,比如图片啊,视频什么的)
5. 兼容c的字符串库函数
下面来看一下SDS结构体的具体实现,就会发现一切都是顺理成章的了:
Redis之链表
先说实现,其实没有太多的特别之处,就是一种带有头尾节点的双端链表,但是redis中链表真是一个好处多多的东西,可以实现消息的发布与订阅,慢查询,监视器等功能。
Redis的链表是由一个list数据结构来管理的,list数据结构中保存了链表的头尾节点,并且头结点的前驱指向NULL,尾节点的后继指向NULL。所以这个链表是一个无环的链表,另外list还保存了链表长度,所以这个链表长度查询的效率是O(1)的。
链表的优点就不再进行过多的详述了,高效率的头尾操作,不使用连续空间巴拉巴拉
ps:今天一口气看了redis的动态字符串,链表,字典的底层实现,对与其中的一些想法感觉很精妙 (很久没有用我的C++了 突然有点想它 嘻嘻嘻)
首先进行说明一下,redis的底层都是用c语言实现的 应该是为了追求卓越的内存读取修改的能力所以选择了比较底层的语言。
众所周知,c语言的字符串是以‘/0’为结尾的,在redis中仍然保持了这个特点,这是为了可以方便直接调用一些c语言关于处理字符串的库函数而做准备的。
在redis中并不经常使用c的字符串,大多数时候只是把它作为一些字符串常量来使用(日志的打印等),redis自己设计了一种高效率的的动态字符串(SDS)
下面来介绍一下SDS的优点:
1. 常数复杂度获取字符串长度(主要是用结构体中的len属性)
2. 杜绝缓冲区溢出(因为有free字段可以知道当前还有多少空间)
3. 减少修改字符串长度所需要的内存分配
4. 二进制安全(因为C语言中只有认为空字符是结尾,所以c语言的字符串只能存储文本内容,而在SDS中可以通过len得知真正的字符长度因此可以存储各种类型的二进制类型,比如图片啊,视频什么的)
5. 兼容c的字符串库函数
下面来看一下SDS结构体的具体实现,就会发现一切都是顺理成章的了:
struts sdshdr{ //记录buf中已经使用的字节的长度 不包括'/0' int len; //记录buf中还没有使用的字节长度 int free; //字节数组 用于保存字符串 char buf[]; } ;
Redis之链表
先说实现,其实没有太多的特别之处,就是一种带有头尾节点的双端链表,但是redis中链表真是一个好处多多的东西,可以实现消息的发布与订阅,慢查询,监视器等功能。
Redis的链表是由一个list数据结构来管理的,list数据结构中保存了链表的头尾节点,并且头结点的前驱指向NULL,尾节点的后继指向NULL。所以这个链表是一个无环的链表,另外list还保存了链表长度,所以这个链表长度查询的效率是O(1)的。
链表的优点就不再进行过多的详述了,高效率的头尾操作,不使用连续空间巴拉巴拉
相关文章推荐
- Redis的简单动态字符串SDS、链表
- redis 数据结构 简单动态字符串和链表
- redis 笔记01 简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表
- Redis内部数据结构详解之简单动态字符串(sds)
- redis数据结构-简单动态字符串(sds)
- Redis深入之简单动态字符串
- Redis-简单动态字符串
- Redis源码分析(五)——简单动态字符串(sds)
- Redis 源码解析 string内部实现原理之简单动态字符串SDS
- Redis源码分析二、Redis简单动态字符串
- 【26-Redis设计与实现-简单动态字符串】
- Redis源码剖析(十)简单动态字符串sds
- 图解Redis之数据结构篇——简单动态字符串SDS
- (一)redis源码学习之简单动态字符串(SDS)
- redis 系列3 简单动态字符串 SDS
- Redis 简单动态字符串
- 结合redis设计与实现的redis源码学习-2-SDS(简单动态字符串)
- Redis源码剖析和注释(二)--- 简单动态字符串
- 《Redis设计与实现》阅读:Redis底层研究之简单动态字符串SDS
- Redis中的简单动态字符串