基於Redisbitmap實現開關配置功能

2021-12-29 22:16:11 字數 793 閱讀 8676

bitmap apisetbit key offset value

對key所儲存的字串值,設定或清除指定偏移量上的位(bit)。

位的設定或清除取決於value引數,可以是0也可以是1。

當key不存在時,自動生成乙個新的字串值。

字串會進行伸展(grown)以確保它可以將value儲存在指定的偏移量上。

當字串值進行伸展時,空白位置以0填充。

offset引數必須大於或等於0,小於2^32(bit對映被限制在512mb之內)。

返回值: 指定偏移量原來儲存的位。

warning: 對使用大的offset的setbit操作來說,記憶體分配可能造成redis伺服器被阻塞。

warning: 當生成乙個很長的字串時,redis 需要分配記憶體空間,該操作有時候可能會

造成伺服器阻塞(block)。在2023年的macbook pro上,設定偏移量為536870911(512mb內

存分配),耗費約300毫秒,設定偏移量為134217728(128mb記憶體分配),耗費約80毫秒,

設定偏移量33554432(32mb記憶體分配),耗費約30毫秒,設定偏移量為8388608(8mb記憶體分配),

耗費約8毫秒。

getbit key offset

對key 所儲存的字串值,獲取指定偏移量上的位(bit)。

當offset比字串值的長度大,或者key不存在時,返回0。

返回值:字串值指定偏移量上的位(bit)。

需求場景

在很多業務場景中,我們都需要針對很多功能實現配置,比如以下場景:

基於Redis bitmap實現簽到功能

需求場景 bitmap 對於一些特定型別的計算非常有效。比如說,每當使用者在某一天上線的時候,我們就使用setbit,以使用者名稱作為key,將那天所代表的 的上線日作為offset 引數,並將這個offset 上的為設定為1。舉個例子,如果今天是 上線的第100天,而使用者 uid 10086 在...

redis bitmap實現去重

最近做乙個探針專案,需要判斷使用者是不是第一次被採集,原來直接使用redis的key value第一次快取,過了段時間發現這樣key會無窮無盡。使用布隆演算法實現去重,布隆演算法參考 漫畫 bitmap演算法 整合版 具體實現,針對具體使用者的mac做hash,hash生成的結果作為bitmap的o...

記一次Redis bitmap導致的miss問題

redis bitmaps 基礎概念 redis 記憶體淘汰機制 大致需求 指令碼批量匯入使用者資料到redis中,使用bitmap標記使用者是否在匯入的白名單中。使用者量級 億。key使用了分片處理,把key分成了10w個,每個key占用 1億 10w 1000 個bit。理想是key1用於標記u...