Redis 10 點陣圖
阿新 • • 發佈:2022-05-24
參考源
https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0
版本
本文章基於 Redis 6.2.6
概述
Redis 從 2.2 版本增加了 Bitmap(點陣圖)
當需要統計使用者一年的某些資訊,如活躍或不活躍,登入或不登入,打卡或沒打卡。
如果使用普通的 key / value儲存,則要記錄 365 條記錄,如果使用者量很大,需要的空間也會很大。
Redis 提供了 Bitmap 點陣圖這種資料結構,Bitmap 就是通過操作二進位制位來進行記錄,即為 0 和 1。
如果要記錄 365 天的打卡情況,使用 Bitmap 表示的形式大概如下:0101000111000111......
這樣 365 天相當於 365 bit,又 1 位元組 = 8 bit , 所以相當於使用 46 個位元組即可。
BitMap 就是通過一個 bit 位來表示某個元素對應的值或者狀態,其中的 key 就是對應元素本身。
實際上底層也是通過對字串的操作來實現的。
賦值
單項賦值
setbit
setbit key offset value
設定 key 的第 offset 位為 value (1 或 0)
使用 bitmap 來記錄一週的打卡記錄(1 為打卡,0 為沒打卡)
127.0.0.1:6379> setbit sign 0 1 (integer) 0 127.0.0.1:6379> setbit sign 1 0 (integer) 0 127.0.0.1:6379> setbit sign 2 0 (integer) 0 127.0.0.1:6379> setbit sign 3 1 (integer) 0 127.0.0.1:6379> setbit sign 4 1 (integer) 0 127.0.0.1:6379> setbit sign 5 0 (integer) 0 127.0.0.1:6379> setbit sign 6 0 (integer) 0
取值
單項取值
getbit
getbit key offset
獲取 offset 設定的值,未設定過預設返回 0。
# 檢視週四是否打卡
127.0.0.1:6379> getbit sign 3
(integer) 1
# 檢視週六是否打卡
127.0.0.1:6379> getbit sign 5
(integer) 0
統計
bitcount
bitcount key [start, end]
統計 key 上位為 1 的個數
統計這周打卡的記錄
127.0.0.1:6379> bitcount sign
(integer) 3
只有 3 個值為 1,即只有 3 天是打卡的狀態。