舉個例子:現在要儲存500w個key/value對,(dba1,dba1)(dba2,dba2)…
500w個key:
使用字串型別(500w個key):431.73m
使用hash(5000個hash,每個長度1000):436.23m
使用hash(10000個hash,每個長度500):95.16m
為什麼同樣要存500w個內容,記憶體使用卻大不相同?
首先,hash儲存使用的redis底層資料結構為ziplist或者hashmap
ziplist是記憶體連續分配的,沒有碎片,消耗記憶體較小,但是查詢效率較低,所以適合資料量不大的時候使用
hashmap則消耗的記憶體比較大,但是查詢效率高,適合資料量比較大的時候使用
如何控制hash在儲存過程中是如何選擇使用哪種結構?
zset-max-ziplist-entries 512 #配置元素個數最多512個
zset-max-ziplist-value 64 #配置value最大為64位元組
list-max-ziplist-entries 512 #配置元素個數最多512個
list-max-ziplist-value 64 #配置value最大為64位元組
hash-max-zipmap-entries 512 #配置欄位最多512個
hash-max-zipmap-value 64 #配置value最大為64位元組
所以,建議使用hash的時候,field不要超過512(預設),這樣比較節省記憶體空間,同樣在並不大的數量級下查詢效率雖然低,但也高於在上萬的hash裡使用hashmap查詢內容 各型別佔記憶體空間大小
各種型別值在所點記憶體空間一覽表 整型 int,long,char sizeof int 4 這裡以位元組為單位,int 型佔4位元組,剛好乙個32位機的暫存器位長 sizeof unsigned int 4 加個unsigned標誌不會改變記憶體空間大小 sizeof int 4 sizeof c...
檔案的大小與記憶體空間
乙個檔案的大小就是其實際內容具有的位元組數,以byte為衡量單位,只要內容不發生變化,就不會改變。乙個檔案的所佔空間是由每個磁碟的簇與檔案大小決定的,對於每乙個不同的磁碟,它會有不同的簇 分配單元 allucation cluster 而具體計算所佔空間的公式為 簇數 floor 檔案大小 每個分配...
C 中類所佔記憶體空間大小
學習虛繼承知識的時候,無意中發現了關於c 類所需記憶體的面試題,通過sizeof 計算類所需的記憶體位元組數。當時自己就懵了,因為學習c 的時候,就知道類在宣告時是不會分配記憶體空間的還以為自己學習的東西出錯,還來才知道sizeof 作用 sizeof是 c c 中的乙個操作符 operator 簡...