Redis之位圖

位圖定義

位圖並不是一種數據結構,其實就是一種普通的字符串串,也能夠說是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

Redis有提供查詢和統計函數,分別是 bitpos 和 bitcount 函數,其語法分別爲:

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>
相關文章
相關標籤/搜索