Redis是in-memery的資料庫,其優勢不言而喻。
詳細可以閱讀一下官網的介紹。 https://redis.io
其主要有五種資料型態:strings,lists,sets,hashes。
在學習到strings類型的常見指令的時候,對GETBIT
和SETBIT
的意義並不是非常了解,所以就搜尋了一下相關文章。看到一篇介紹GETBIT
和SETBIT
的應用程式的文章,感覺非常強大,記錄如下:
我們在登陸某些部落格網站或影片網站的時候,網站往往會記錄我們是否閱讀了某篇文章,或是觀看了某個影片。
如果用傳統的mysql資料庫實現,如果使用者數量多,文章和影片也多的情況下,那麼就會給資料庫帶來很大的壓力。
而用Redis的GETBIT和SETBIT則會簡單得多。
我們以視頻為例,我們用bitmap來記錄用戶們是否已經觀看了某一個視頻,一個視頻對應一個bitmap。例如
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就可以實現統計活躍用戶之類的操作了。