首页 > 其他 > 详细

Redis 3.0 SDS类型笔记

时间:2018-12-30 23:52:08      阅读:225      评论:0      收藏:0      [点我收藏+]

Redis 中的字符串没有使用 C语言中的字符指针(char *),而是使用了自定义的结构 sds。

 

文件:

sds.h  sds.c

 

结构:

struct sdshdr {
    
    int len; // 填充的字符串长度
    
    int free;  // buf 中未填充的空位置
    
    char buf[];  // 用于存放实际的字符串(包含为使用的空间),以 ‘\0‘ 结尾
};

基本结构如上所示,其中 buf 中为预分配的字符串空间,可能等于实际字符串所需空间长度,也可能大于实际的字符串长度

len 为实际的字符串长度,这样可以很方便的获取到字符串的长度,

free 为 buf 数组中为使用到的数组长度,可以防止数组越界

 

同时,文件中还维护了一个指针

typedef char *sds;  // 类型别名,实例指向数据结构中的 buf 空间

一般操作返回的都是这个指针,如果要获取整个sds,需要将指针向前移动 sizeof(struct sdshdr)个字节来获取到结构开头地址(void *),之后强转为 sdshdr 结构体指针

struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));

 

Redis 3.0 SDS类型笔记

原文:https://www.cnblogs.com/zawier/p/10201098.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!