當我讀取redis源代碼時,我發現redis只在little endian中存儲內存數據。提取這些數據時,必須將其轉換爲本地機器字節順序。如在ziplist.c:爲什麼redis僅在小端存儲內存數據?
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中的方式並不那麼有效。
或者我誤解了一些東西?
我可以寫入數據或從磁盤讀取數據,它們與內存中的字節順序相同。這對於具有不同字節順序的機器來說是不利的,但在實踐中很少見,您可以將一個字節順序標誌保存在磁盤文件中並避免錯誤。處理字節順序非常麻煩! – zadecn