redis set 佔多少內存? bitmap呢?

背景

判斷一個id是否存在,是用redis set好還是用redis bitmap好呢?
(id的個數只有100個的情況下)

一些理論知識

1、在元素比較少的時候,set是不會用hash的結構的,而是使用ziplist的方式存儲,判斷元素是否存在需要遍歷;
2、小的數字(<=9999)是不需要額外的存儲空間的,會整個redis共享這些數字;

實踐

redis set

每次往set添加一個<=9999的數字,佔用的內存增加:2Byte
在這裏插入圖片描述
可以算到,添加到100個id,60+100*2=260

bitmap

在這裏插入圖片描述
設置一個100位的bitmap,佔用內存80Byte

在這裏插入圖片描述
用字符的形式打印bitmap,有12個字符;

關於bit和內存的關係,應該也不是直接按字節數分配的內存。具體計算方式其實還是得看源碼。0
在這裏插入圖片描述

結論

理論上 當我們拿到需求的時候 可以看下id的最大範圍(確定bitmap的大小),再預估一下集合中的id個數(set裏的個數),根據這兩者的情況在redis裏操作一下可以看到內存使用量的區別。

但是實際上如果不是對性能或者內存有特別高的要求的話,大多數情況應該還是根據業務的內容來決定把,如果原來要存的id就不是數字,而是uuid,是個字符串,那使用bitmap的時候就比較費勁了,還得一個一個地做換算,很費勁,這時候可能還是會選擇set。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章