不同類型數(shù)據(jù)結(jié)構(gòu)占用內(nèi)存對比:
1.整型:當list或set中存儲的元素為整型時:
當元素個數(shù)小于500個數(shù)字哮奇,使用Set占內(nèi)存空間最小整慎,redis底層實現(xiàn)使用了intset編碼;
當元素個數(shù)大于512個數(shù)字,使用Set占內(nèi)存空間最大,而且是list的數(shù)倍,redis底層實現(xiàn)使用了hashTable編碼允趟,hashTable內(nèi)存占用大,讀取速度快鸦致,相當于犧牲空間換時間潮剪。
test如下:
總結(jié):整型數(shù)據(jù),小于512使用SET分唾,其他使用LIST 抗碰;
說明:所有數(shù)據(jù)結(jié)構(gòu)的底層邏輯就是內(nèi)存大小和讀取速度總會有矛盾,所以數(shù)據(jù)結(jié)構(gòu)的選擇就是得在內(nèi)存和讀取速度上做出取舍绽乔,這種就比較考驗程序員的經(jīng)驗和是否有清晰的思路弧蝇。
2.String類型:當List或Set中存儲的元素為String類型時:
跟元素個數(shù)關(guān)系不大,根據(jù)測試,使用List占用內(nèi)存空間會比使用Set小很多看疗;
test如下:
總結(jié):如果量少沙峻,就幾個,用啥都無關(guān)緊要两芳,如果數(shù)據(jù)量略多摔寨,就使用List 而不要使用Set,因為Set為了去重和查詢怖辆,會占用很大空間是复。
3.對象類型:當使用redis存儲對象元素時,使用List存儲Json的方式竖螃,單個內(nèi)存體積相比較使用Hash拆分存儲為多個的內(nèi)存總和會更小淑廊,但如下圖,雖然拆分50個存HASH比Json搞一起存一個的多了一些內(nèi)存斑鼻,但搞一起容易形成一個BIGKEY,就是單個緩存占用內(nèi)存大(一般10K以上就算)蒋纬,所以還是建議首選HASH,Hash單個內(nèi)存小坚弱,更新方便,而且查詢更快
50個學(xué)生信息存儲关摇,內(nèi)存最小是分成50個HASH(單個只占291)荒叶,291*50 = 14550
100個學(xué)生信息存儲,內(nèi)存最小的是JSON字符串输虱,不過內(nèi)存到達了25479字節(jié)=24K,屬于BIGKEY
說明些楣,取Hash可使用Redis管道查詢
存:
管道查詢: