1. 程式人生 > 其它 >Redis 10 點陣圖

Redis 10 點陣圖

參考源

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 天是打卡的狀態。