SDS(Simple Dynamic String)

Posted 大尾巴狼的IT技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDS(Simple Dynamic String)相关的知识,希望对你有一定的参考价值。

 

 

+--------+-------------------------------+-----------+
| Header | Binary safe C alike string... | Null term |
+--------+-------------------------------+-----------+
         |
         Pointer returned to the user.

 

1、如果字符串长度小于2^5(32),类型SDS_TYPE_5;

2、如果字符串大于2^5(32),小于2^8(256),类型SDS_TYPE_8;

3、如果字符串大于2^8(256),小于2^16(65536),类型SDS_TYPE_16;

4、如果字符串大于2^16(65536),小于2^32(4294967296),类型SDS_TYPE_32;

5、如果大于2^32(4294967296),类型SDS_TYPE_64;

static inline char sdsReqType(size_t string_size) {
    if (string_size < 1<<5)
        return SDS_TYPE_5;
    if (string_size < 1<<8)
        return SDS_TYPE_8;
    if (string_size < 1<<16)
        return SDS_TYPE_16;
    if (string_size < 1ll<<32)
        return SDS_TYPE_32;
    return SDS_TYPE_64;
}

 

 

 计算动态字符长度,

static inline size_t sdslen(const sds s) {
    unsigned char flags = s[-1];
    switch(flags&SDS_TYPE_MASK) {
        case SDS_TYPE_5:
            return SDS_TYPE_5_LEN(flags);
        case SDS_TYPE_8:
            return SDS_HDR(8,s)->len;
        case SDS_TYPE_16:
            return SDS_HDR(16,s)->len;
        case SDS_TYPE_32:
            return SDS_HDR(32,s)->len;
        case SDS_TYPE_64:
            return SDS_HDR(64,s)->len;
    }
    return 0;
}

 

 

 

下面代码是计算SDS头部的长度,

static inline int sdsHdrSize(char type) {
    switch(type&SDS_TYPE_MASK) {
        case SDS_TYPE_5:
            return sizeof(struct sdshdr5);
        case SDS_TYPE_8:
            return sizeof(struct sdshdr8);
        case SDS_TYPE_16:
            return sizeof(struct sdshdr16);
        case SDS_TYPE_32:
            return sizeof(struct sdshdr32);
        case SDS_TYPE_64:
            return sizeof(struct sdshdr64);
    }
    return 0;
}

 

以上是关于SDS(Simple Dynamic String)的主要内容,如果未能解决你的问题,请参考以下文章

Simple Dynamic Strings(SDS)源码解析和使用说明一

redis源码学习simple dynamic strings(简单动态字符串 sds)

redis源码学习simple dynamic strings(简单动态字符串 sds)

Redis源码解析01: 简单动态字符串SDS

HDU 4972 A simple dynamic programming problem

HDU 4972 - A simple dynamic programming problem