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

posted @ 2020-02-19 01:00  落孤秋叶  阅读(6567)  评论(4编辑  收藏  举报