动态字符串SDS
我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。
不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:
V获取字符串长度的需要通过运算
V非二进制安全
V不可修改
Redis构建了一种新的字符串结构,称为简单动态字符串( Simple Dynamic String) ,简称SDS。
例如,我服务器托管网们执行命令:
那么Redis将在底层创建两个SDS,其中一个是包含”name” 的SDS,另一个是包含“虎哥“的SDS。
Redis是C语言实现的,其中SDS是一个结构体(类似JAVA中的类),源码如下:
例如,一个包含字符串”name” 的sds结构如下:
SDS之所以叫做动态字符串,是因为它具备动态扩容的能力,例如一个内容为”hi” 的SDS:
假如我们要给SDS追加一段字符串”,Amy”,这里首先会申请新内存空间:
◆如果新字符串小于1M,则新空间为扩展后字符串长度的两倍+1;
◆如果新字符串大于1M,则新空间为扩展后字符串长度+1M+1,称为内存预分配。
优点
①获取字符 串长度的时间复杂度为0服务器托管网(1)
②支持动态扩容
③减少内存分配次数
④二进制安全
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: go1.6.2 linux/amd64 的一个bug: gcc: 无法识别的选项‘-no-pie’
如果你的linux是中文版的。 即:执行 # echo $LANG 命令,返回的是 zh_CN.UTF-8 则会出现这个bug, 如果是 en_US.UTF-8 则没有这个问题。 这个bug的一个例子: # go get -u github.com/mat…