Bitmaps 並非實際的數據類型,而是定義在String類型上的一個面向字節操做的集合。由於字符串是二進制安全的塊,他們的最大長度是512M,最適合設置成2^32個不一樣字節。segmentfault
Bitmaps 的最大優點之一在存儲信息時極其節約空間。例如,在一個以增量用戶ID來標識不一樣用戶的系統中,記錄用戶的四十億的一個單獨bit信息(例如,要知道用戶是否想要接收最新的來信)僅僅使用512M內存。安全
127.0.0.1:6379> set hello big OK 127.0.0.1:6379> getbit hello 0 (integer) 0 127.0.0.1:6379> getbit hello 1 (integer) 1 127.0.0.1:6379> getbit hello 2 (integer) 1
127.0.0.1:6379> set hello big OK 127.0.0.1:6379> getbit hello 7 (integer) 0 127.0.0.1:6379> setbit hello 7 1 (integer) 0 127.0.0.1:6379> get hello "cig" 127.0.0.1:6379> setbit world 50 1 (integer) 0 127.0.0.1:6379> get world "\x00\x00\x00\x00\x00\x00 " 127.0.0.1:6379> setbit world 50 0 (integer) 1 127.0.0.1:6379> get world "\x00\x00\x00\x00\x00\x00\x00"
127.0.0.1:6379> set hello big OK 127.0.0.1:6379> bitcount hello (integer) 12 127.0.0.1:6379> setbit hello 7 1 (integer) 0 127.0.0.1:6379> bitcount hello (integer) 13 127.0.0.1:6379> bitcount hello 0 0 (integer) 4 127.0.0.1:6379> bitcount hello 0 1 (integer) 8 127.0.0.1:6379> bitcount hello 0 2 (integer) 13 127.0.0.1:6379> bitcount hello 1 1 (integer) 4 127.0.0.1:6379> bitcount hello 1 2 (integer) 9 127.0.0.1:6379> bitcount hello 2 2 (integer) 5
127.0.0.1:6379> set hello big OK 127.0.0.1:6379> set world big OK 127.0.0.1:6379> bitop and destkey hello world (integer) 3 127.0.0.1:6379> get destkey "big" 127.0.0.1:6379> bitop or destkey hello world (integer) 3 127.0.0.1:6379> get destkey "big" 127.0.0.1:6379> bitop not destkey hello (integer) 3 127.0.0.1:6379> get destkey "\x9d\x96\x98" 127.0.0.1:6379> bitop xor destkey hello world (integer) 3 127.0.0.1:6379> get destkey "\x00\x00\x00"
127.0.0.1:6379> set hello big OK 127.0.0.1:6379> bitpos hello 1 (integer) 1 127.0.0.1:6379> bitpos hello 0 (integer) 0 127.0.0.1:6379> bitpos hello 1 2 2 (integer) 17 127.0.0.1:6379> bitpos hello 1 2 3 (integer) 17 127.0.0.1:6379> bitpos hello 0 2 3 (integer) 16 127.0.0.1:6379> bitpos hello 0 0 3 (integer) 0 127.0.0.1:6379> bitpos hello 1 0 3 (integer) 1
數據類型 | 每一個userId佔用空間 | 須要存儲的用戶量 | 內存使用總量 |
---|---|---|---|
set | 32位(假設userId用的是integer) | 50,000,000 | 32位*50,000,000=200MB |
Bitmap | 1位 | 100,000,000 | 1位*100,000,000=12.5MB |
數據類型 | 每一個userId佔用空間 | 須要存儲的用戶量 | 內存使用總量 |
---|---|---|---|
set | 32位(假設userId用的是整型) | 100,000 | 32位*100,000=4MB |
Bitmap | 1位 | 100,000,000 | 1位*100,000,000=12.5MB |
Redis學習筆記 - 數據類型與API(1)Key
Redis學習筆記 - 數據類型與API(2)String
Redis學習筆記 - 數據類型與API(3)List
Redis學習筆記 - 數據類型與API(4)Set
Redis學習筆記 - 數據類型與API(5)Sorted Set
Redis學習筆記 - 數據類型與API(6)Hash
Redis學習筆記 - Slow Log 慢查詢日誌學習