由于我需要为我正在处理的项目使用键值存储,所以我最近一直在关注键值存储(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)?
答案 0 :(得分:1)
我非常怀疑这是一个错误。我的猜测是,Salvatore选择这个(int)因为“内存优化/速度/避免演员”,以及实际上这个值不能超出范围的事实。可能是字节序也是一个因素。
Redis的高级可变长度字符串类型绝对没有64k的限制。在某些情况下,我使用了超过100MB(单键)的字符串。
阅读docs:字符串值最长可达512 MB。