简单动态字符串
Posted huan30
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单动态字符串相关的知识,希望对你有一定的参考价值。
Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。
当Redis需要的不仅仅是一个字符串面量,而是一个可以被修改的字符串值时,Redis就会使用SDS来表示字符串值,比如在Redis的数据库里,包含字符串值得键值对在底层都是由SDS来实现得。
客户端执行命令
set msg "hello world"
那么Redis将在数据库中创建一个新得键值对,其中
键值对得键是一个字符串对象,对象得底层实现是一个保存着字符串“msg”的SDS
键值对的值也是一个字符串对象,对象的底层实现是一个保存着字符串“hello world”的SDS
又比如,客户端执行命令
rpush fruits “apple” “banana” “cherry”
那么Redis将在数据库中创建一个新的键值对,其中
键值对的键是一个字符串对象,对象底层实现是一个保存了字符串“fruits”的SDS
键值对的值是一个列表对象,列表对象包含了三个字符串对象,这三个字符串对象分别由三个SDS实现:第一个SDS保存着字符串“apple”,第二个SDS保存着字符串“banana”,第三个SDS保存着字符串“cherry”
除了用来保存数据库中的字符串值之外,SDS还被用作缓冲区:AOF模块zhong的AOF缓冲区,以及客户端状态中的输入缓冲区,都是由SDS实现的。
一、SDS的定义
结构如下图
free 属性的值为0,表示这个SDS没有分配任何未使用空间
len 属性的值为5,表示这个SDS保存了一个五字节长的字符串
buf 属性是一个char类型的数组,最后一个字节保存了空字符“