0
点赞
收藏
分享

微信扫一扫

Redis数据结构之动态字符串SDS

动态字符串SDS

我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。

不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:

V获取字符串长度的需要通过运算

V非二进制安全

V不可修改

Redis数据结构之动态字符串SDS_字符串

Redis构建了一种新的字符串结构,称为简单动态字符串( Simple Dynamic String) ,简称SDS

例如,我们执行命令:

Redis数据结构之动态字符串SDS_Redis_02

那么Redis将在底层创建两个SDS,其中一个是包含"name" 的SDS,另一个是包含“虎哥“的SDS。

Redis是C语言实现的,其中SDS是一个结构体(类似JAVA中的类),源码如下:

Redis数据结构之动态字符串SDS_Redis_03

例如,一个包含字符串"name" 的sds结构如下:

Redis数据结构之动态字符串SDS_Redis动态字符串_04

SDS之所以叫做动态字符串,是因为它具备动态扩容的能力,例如一个内容为"hi" 的SDS:

Redis数据结构之动态字符串SDS_字符串_05

假如我们要给SDS追加一段字符串",Amy",这里首先会申请新内存空间:

◆如果新字符串小于1M,则新空间为扩展后字符串长度的两倍+1;

◆如果新字符串大于1M,则新空间为扩展后字符串长度+1M+1,称为内存预分配

Redis数据结构之动态字符串SDS_字符串_06

优点

①获取字符 串长度的时间复杂度为0(1)

②支持动态扩容

③减少内存分配次数

④二进制安全

举报

相关推荐

0 条评论