bitmap,位圖,即是使用bit。 redis字符串是一個字節序列。
1 Byte = 8 bit
SETBIT key offset value
設置或者清空key的value(字符串)在offset處的bit值。
那個位置的bit要么被設置,要么被清空,這個由value(只能是0或者1)來決定。當key不存在的時候,就創建一個新的字符串value。要確保這個字符串大到在offset處有bit值。
offset 表示bit的位置數,從0開始計,1字節的bit數組最大為7 。
SETBIT K1 1 1 :第1位上設置為1,即01000000。 按ASCII碼表 對應@。 --》GET K1 --》@
SETBIT K1 7 1 :第7位設為1,即01000001。 按ASCII碼表 對應A --》GET K1 --》A
--》STRLEN K1 --》1
SETBIT K1 9 1 : 第9位設為1。超出分1字節連接。即01000001 01000000 。分字節來按ASCII碼表 對應 A@ --》 GET K1 --》A@
--》STRLEN K1 --》2
SETBIT K1 26 1 : 第26位設為1。超出分1字節連接。即01000001 01000000 00000000 00100000。
分字節來按ASCII碼表 00000000對應(空字符)十六進0x00 ;00100000 對應空格
--》 GET K1 --》"A@\x00 "
--》STRLEN K1 --》4
SETBIT K1 31 1 : 第32位設為1。超出分1字節連接。即01000001 01000000 00000000 00100001。
分字節來按ASCII碼表 十六進0x00 ;00100001 對應!
--》 GET K1 --》"A@\x00!"
--》STRLEN K1 --》4
BITCOUNT key [start end]
統計字符串被設置為1的bit數.
一般情況下,給定的整個字符串都會被進行計數,通過指定額外的 start 或 end 參數,可以讓計數只在特定的位上進行。
start 和 end 參數的設置,都可以使用負數值:比如 -1 表示最后一個位,而 -2 表示倒數第二個位,
start、end 是指bit組的字節的下標數,二者皆包含。
如上 K1 【01000001 01000000 00000000 00100001】,對應【0,1,2,3】
bitcount K1 1 2 : 統計下標1、2字節組中bit=1的個數,即01000000 00000000
--》bitcount K1 1 2 --》1
bitcount K1 1 3 : 統計下標1、2字節組中bit=1的個數,即01000000 00000000 00100001
--》bitcount K1 1 3 --》3
bitcount K1 0 -2 : 統計下標0到下標倒數第2,字節組中bit=1的個數,即01000001 01000000 00000000
--》bitcount K1 0 -2 --》3
注意:redis的setbit設置或清除的是bit位置,而bitcount計算的是byte位置。