Redis动态字符串应该是unsigned int吗?为什么要保持自由而不是大小?

时间:2013-12-20 01:12:25

标签: c redis

由于我需要为我正在处理的项目使用键值存储,所以我最近一直在关注键值存储(Memcached,Redis)。在仔细阅读Redis的功能和浏览源代码时,我注意到Redis有一个动态字符串类型(很酷)。

struct {
    int len;
    int free;
    char buf[];
};

我之前使用过类似的方法,并且(高兴/愉快)看到类似的数据结构。但是有一些奇怪的行为。我对'free'而不是'size'语义感到惊讶,并且值为(int)而不是(unsigned int)。

元素len和free是否应声明为unsigned int?

什么会更好,一个成员'免费'存储剩余空间,或成员'大小'存储总分配大小?

Redis处理字符串的频率是多少(unsigned short int)? (64K)?

1 个答案:

答案 0 :(得分:1)

我非常怀疑这是一个错误。我的猜测是,Salvatore选择这个(int)因为“内存优化/速度/避免演员”,以及实际上这个值不能超出范围的事实。可能是字节序也是一个因素。

Redis的高级可变长度字符串类型绝对没有64k的限制。在某些情况下,我使用了超过100MB(单键)的字符串。

阅读docs:字符串值最长可达512 MB。