redis中setbit bitcount命令詳解


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位置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM