標籤:
zhanhailiang 日期:2014-12-21
bitmap api
SETBIT 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)。在2010年的Macbook Pro上,設定位移量為536870911(512MB內
存分配),耗費約300毫秒,設定位移量為134217728(128MB記憶體配置),耗費約80毫秒,
設定位移量33554432(32MB記憶體配置),耗費約30毫秒,設定位移量為8388608(8MB記憶體配置),
耗費約8毫秒。
GETBIT key offset
對key 所儲存的字串值,擷取指定位移量上的位(bit)。
當offset比字串值的長度大,或者key不存在時,返回0。
返回值:字串值指定位移量上的位(bit)。
需求情境
在很多業務情境中,我們都需要針對很多功能實現配置,比如以下情境:
- 新增某個功能, 希望有開關可以控制是否開啟該功能;
- 遊戲上線某個新功能,希望引導使用者去開啟該功能,需要誘導使用者,比如開啟該功能,可以擷取XX獎勵,此時需要標記位來記錄領獎記錄;
代碼實現
https://github.com/billfeller/billfeller.github.io/blob/master/code/IBit.php
基於Redis bitmap實現開關配置功能