当我阅读redis源代码时,我发现redis仅以小端存储内存数据。获取这些数据时,必须将它们转换为本地机器字节顺序。例如在 ziplist.c 中:
static int64_t zipLoadInteger(unsigned char *p, unsigned char encoding) {
int16_t i16;
int32_t i32;
int64_t i64, ret = 0;
if (encoding == ZIP_INT_8B) {
ret = ((int8_t*)p)[0];
} else if (encoding == ZIP_INT_16B) {
memcpy(&i16,p,sizeof(i16));
memrev16ifbe(&i16);
ret = i16;
} //......
return ret;
}
我认为以本地机器格式(LE或BE)存储内存数据的最有效方法,当必须将数据写入磁盘或从磁盘读取数据时,可以将数据转换为某种格式。因为内存中的数据操作比磁盘中的操作更多,所以我觉得redis中的方式不是那么有效。
还是我误解了什么?