位圖並不是一種數據結構,其實就是一種普通的字符串串,也能夠說是byte數組。基本語法是setbit/getbit,數組
剛纔說了是一個byte數組,因此也能夠用set/get設置或獲取bash
Redis getbit和setbit數據結構
GETBIT key offset 對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。 SETBIT key offset value 對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。
怎麼理解呢?什麼是指定偏移量?
在計算機裏全部的數據都是以二進制的形式存儲的,每個非中文字符佔一個字節(Byte),中文字符佔兩個字節,而一個字節又是佔8bit。
咱們先設置一個key-value對函數
127.0.0.1:6379> set foo bar OK 127.0.0.1:6379> get foo "bar" 127.0.0.1:6379>
在Redis中的存儲形式轉換成二進制就是:011000100110000101110010,而偏移量實際上指的就是從左往右數,偏移量是幾就是第幾位,偏移量0就是第0位。
言歸正傳,GETBIT的用法就是獲取指定偏移量的bit,就很容易理解了吧,爲了看清楚把上面的二進制換行一下post
b == 01100010lua
a ==01100001spa
r ==01110010code
而第一個字符b的每一位 字符串
127.0.0.1:6379> GETBIT foo 0 (integer) 0 127.0.0.1:6379> GETBIT foo 1 (integer) 1 127.0.0.1:6379>
相信看到這裏你們應該就明白了GETBIT的用法,那麼SETBIT也就不言而喻了。
設置或清除指定偏移量上的位(bit),指的就是修改指定偏移量的值,固然在二進制中只有0和1,若是設置其餘的值就會報錯。get
//將第0位的bit值改成1 127.0.0.1:6379> SETBIT foo 0 1 (integer) 0
bitcount語法: bitcount key [start end]
bitpos語法: bitpos key bit [start] [end]
對於字符串串'hello',換成ASCII碼的⼆二進制爲:
'h':01101000'
'e':01100101'
'l':01101100'
'l':01101100'
'o':'01101111'
127.0.0.1:6379> set tk hello OK //從第1個字符h算起,第一個「1」位的位置 ===就是從e開始算起, //bitpost key parm1 parm2 //parm1 bit值0或者1 param2 第幾個字符(從0開始) 127.0.0.1:6379> bitpos tk 1 1 (integer) 9 //從第2個字符2算起,第一個「1」位的位置 127.0.0.1:6379> bitpos tk 1 2 (integer) 17 //第⼀一個「0」位 127.0.0.1:6379> bitpos tk 0 (integer) 0 //第⼀一個「1」位 127.0.0.1:6379> bitpos tk 1 (integer) 1 //統計tk「1」的數量量 127.0.0.1:6379> bitcount tk (integer) 21 //第⼀一個字符h的「1」位數量量 127.0.0.1:6379> bitcount tk 0 0 (integer) 3 //第⼀一個字符h和第⼆二個字符e「1」位的數量量 127.0.0.1:6379> bitcount tk 0 1 (integer) 7 127.0.0.1:6379>