本篇文章带大家一起了解一下redis数据结构中的String类型,并聊聊redis的kv存储结构,希望对大家有所帮助!
Redis常用作分布式KV缓存,很多人仅仅只会使用,却不知道底层却有着很多不为人知的秘密。【相关推荐:Redis视频教程】
String类型
String作为Redis支持的最基础的数据类型,首先我们来看下String,他的数据结构和存储是怎么样的。
重新定义SDS 去存储String
众所周知,redis是用c语言进行编写的,而c语言是没有String类型的,只有char[],并且在初始化的是时候就必须大小指定类型后就不能改变。为了实现动态增加和扩展等功能,如incr命令,append命令,所以redis就自己定义维护了一个SDS(Simple Dynamic String)来实现这些功能。
我们先来看一下redis源码中定义的数据结构,这里有5种类型,目的是为了节省空间。
1、len:获取char[]的长度,需要遍历数组,len(char[])时间复杂度O(n);
2、alloc:c语言没有String类型, 只有char[],且char[]必须先分配空间长度,char[]预先分配了长度,数据增长后需要扩容;
3、falgs:总是占用一个字节。其中的最低3个bit用来表示header的类型。header的类型共有5种,在sds.h中有常量定义。
4、buf[]:c语言的char数组,用’