Redis中的GETBIT和SETBIT

Redis是in-memery的數據庫,其優點不言而喻。
詳細能夠閱讀一下官網的介紹。https://redis.iomysql

其主要有五種數據類型:strings,lists,sets,hashes。
在學習到strings類型的常見命令的時候,對GETBITSETBIT的意義並非很是瞭解,因此就搜索了一下相關文章。看到一篇介紹GETBITSETBIT的應用的文章,感受很是強大,記錄以下:redis

咱們在登錄某些博客網站或者視頻網站的時候,網站每每會記錄咱們是否閱讀了某篇文章,或者是觀看了某個視頻。sql

若是用傳統的mysql數據庫實現,若是用戶數量多,文章和視頻也多的狀況下,那麼則會給數據庫帶來很大的壓力。數據庫

而用Redis的GETBIT和SETBIT則會簡單得多。
咱們以視頻爲例,咱們用bitmap來記錄用戶們是否已經觀看了某一個視頻,一個視頻對應一個bitmap。例如ide

key:   video:1201
value: 000000...0000

key以視頻英文名video+冒號+id標記。
value就是一個bitmap。一位(bit)有兩種可能,0或者1。0表明未看,1表明已經看過了。
而位置(offset)表明的就是user id。例如第200位就表明user_id爲200的用戶是否觀看過id爲1201的視頻。學習

設置

# SETBIT key offset value

SETBIT video:1201 200 1
# 上面的命令就是設置ID爲200的用戶,已經看過了ID爲1201的視頻。

查詢

# GETBIT key offset
GETBIT video:1201 200
# 上面的命令就是查詢ID爲200的用戶是否觀看了ID爲1201的視頻

固然您也能夠一個用戶對應一個bitmap,bitmap中的位表明一個視頻是否已經被觀看。網站

另外文章中也將到目前很是流行的打卡或者是登錄記錄也能夠用類似的設計實現。
例如用一個bitmap記錄全部用戶的登錄狀況,bitmap中的一位表明一個用戶當天是否有登錄,0表明沒登錄,1表明有登錄。
天天生成一個bitmap。設計

經過統計多天bitmap就能夠實現統計活躍用戶之類的操做了。code

相關文章
相關標籤/搜索