# Bit Commands

# getbit

  • 支持:是

  • 说明:对 key 所存储的字符串值,获取其指定偏移量上的位(bit)

  • 示例:

    > SETBIT mykey 7 1
    (integer) 0
    > GETBIT mykey 0
    (integer) 0
    > GETBIT mykey 7
    (integer) 1
    > GETBIT mykey 100
    (integer) 0
    

# setbit

  • 支持:是

  • 说明:对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)

  • 示例:

    > SETBIT mykey 7 1
    (integer) 0
    > SETBIT mykey 7 0
    (integer) 1
    > GET mykey
    ""
    

# bitcount

  • 支持:是

  • 说明:用于计算字符串中,被设置为 1 的比特位的数量。

  • 示例:

    > SET mykey "foobar"
    "OK"
    > BITCOUNT mykey
    (integer) 26
    > BITCOUNT mykey 0 0
    (integer) 4
    > BITCOUNT mykey 1 1
    (integer) 6
    > BITCOUNT mykey 1 1 BYTE
    (integer) 6
    > BITCOUNT mykey 5 30 BIT
    (integer) 17
    

# bitpos

  • 支持:是

  • 说明:返回位图中第一个值为bit的二进制位的位置,返回一个整数

  • 示例:

    > SET mykey "\xff\xf0\x00"
    "OK"
    > BITPOS mykey 0
    (integer) 12
    > SET mykey "\x00\xff\xf0"
    "OK"
    > BITPOS mykey 1 0
    (integer) 1
    > BITPOS mykey 1 2
    (integer) 18
    > BITPOS mykey 1 2 -1 BYTE
    (integer) 18
    > BITPOS mykey 1 7 15 BIT
    (integer) 9
    > set mykey "\x00\x00\x00"
    "OK"
    > BITPOS mykey 1
    (integer) 1
    > BITPOS mykey 1 7 -3 BIT
    (integer) 9
    

# bitop

  • 支持:是

  • 说明:对一个或多个保存二进制位的字符串key进行位元操作,并将结果保存到destkey上

  • 示例:

    > SET key1 "foobar"
    "OK"
    > SET key2 "abcdef"
    "OK"
    > BITOP AND dest key1 key2
    (integer) 6
    > GET dest
    "`bc`ab"
    

# bitfield

  • 支持:是

  • 说明:允许对字符串中的位进行原子性、复杂操作(如读写、自增等)

  • 示例:

    > BITFIELD mykey INCRBY i5 100 1 GET u4 0
    1) (integer) 1
    2) (integer) 0
    > BITFIELD mystring SET i8 #0 100 SET i8 #1 200
    1) (integer) 0
    2) (integer) 0
    > BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
    1) (integer) 1
    2) (integer) 1
    > BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
    1) (integer) 2
    2) (integer) 2
    > BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
    1) (integer) 3
    2) (integer) 3
    > BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
    1) (integer) 0
    2) (integer) 3
    > BITFIELD mykey OVERFLOW FAIL incrby u2 102 1
    1) (nil)