# Bitmap命令

# BITCOUNT

# 语法

BITCOUNT key [start end [BYTE | BIT]]

# 描述

统计指定字符串中值为 1 的二进制位数

# 参数

  • key

保存该字符串的键名

  • start end

仅统计从 start 到 end 范围内被设置为 1 的位数。默认情况下,这些参数表示字节偏移量;如果是负数,则从字符串的末尾开始向前计算

  • BYTE | BIT

将 start 和 end 解释为字节偏移量或位偏移量

# 示例

> 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

# BITFIELD

# 语法

BITFIELD key [GET encoding offset | [OVERFLOW <WRAP | SAT | FAIL>]
  <SET encoding offset value | INCRBY encoding offset increment>
  [GET encoding offset | [OVERFLOW <WRAP | SAT | FAIL>]
  <SET encoding offset value | INCRBY encoding offset increment>
  ...]]

# 描述

对字符串值执行多个位级别的操作

# 参数

  • key

保存该字符串的键名

# 示例

> 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)

# BITFIELD_RO

# 语法

BITFIELD_RO key [GET encoding offset [GET encoding offset ...]]

# 描述

BITFIELD 命令的只读版本。它和原生的 BITFIELD 类似,但只接受 GET 子命令

# 参数

返回指定偏移量(offset)处的值,并按照指定的编码格式(例如 u8 或 i16)进行解析。该参数可以指定多次

# 示例

BITFIELD_RO hello GET i8 16

# BITOP

# 语法

BITOP <AND | OR | XOR | NOT | DIFF | DIFF1 | ANDOR | ONE> destkey key [key ...]

# 描述

在多个包含字符串值的键之间执行按位运算,并将结果存储到目标键中

# 参数

  • key

用来存储结果的键

  • operation

要执行的按位运算,支持以下操作:AND、OR、XOR、NOT、DIFF、DIFF1、ANDOR 或 ONE。需要注意的是,NOT 运算必须且只能指定一个源键

  • destkey

用来存储结果的键

# 示例

> BITFIELD key1 SET i8 #0 255
1) (integer) 0
> BITFIELD key2 SET i8 #0 85
1) (integer) 0
> BITOP AND dest key1 key2
(integer) 1
> BITFIELD dest GET i8 #0
1) (integer) 85

# BITPOS

# 语法

BITPOS key bit [start [end [BYTE | BIT]]]

# 描述

返回字符串中第一个被设置为 1(或 0)的位的位置

# 参数

  • key

存储该字符串的键的名称

  • bit

要搜索的位值:0 或 1

  • BYTE | BIT

将 start 和 end 解释为字节偏移量或位偏移量

# 示例

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

# GETBIT

# 语法

GETBIT key offset

# 描述

返回存储在指定键中的字符串值在特定偏移量处的位值

# 参数

  • key

存储该字符串的键的名称

  • offset

要读取的位偏移量(从 0 开始计数)

# 示例

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

# R.APPENDINTARRAY

# 语法

R.APPENDINTARRAY ...

# 描述

# 参数

# 示例

> R.APPENDINTARRAY
<!-- TODO: 填写示例输出 -->

# R.BITCOUNT

# 语法

R.BITCOUNT ...

# 描述

# 参数

# 示例

> R.BITCOUNT
<!-- TODO: 填写示例输出 -->

# R.BITFIELD

# 语法

R.BITFIELD ...

# 描述

# 参数

# 示例

> R.BITFIELD
<!-- TODO: 填写示例输出 -->

# R.BITOP

# 语法

R.BITOP ...

# 描述

# 参数

# 示例

> R.BITOP
<!-- TODO: 填写示例输出 -->

# R.BITPOS

# 语法

R.BITPOS ...

# 描述

# 参数

# 示例

> R.BITPOS
<!-- TODO: 填写示例输出 -->

# R.CARD

# 语法

R.CARD ...

# 描述

# 参数

# 示例

> R.CARD
<!-- TODO: 填写示例输出 -->

# R.CLEAR

# 语法

R.CLEAR ...

# 描述

# 参数

# 示例

> R.CLEAR
<!-- TODO: 填写示例输出 -->

# R.CLEARBITS

# 语法

R.CLEARBITS ...

# 描述

# 参数

# 示例

> R.CLEARBITS
<!-- TODO: 填写示例输出 -->

# R.CONTAINS

# 语法

R.CONTAINS ...

# 描述

# 参数

# 示例

> R.CONTAINS
<!-- TODO: 填写示例输出 -->

# R.DELETEINTARRAY

# 语法

R.DELETEINTARRAY ...

# 描述

# 参数

# 示例

> R.DELETEINTARRAY
<!-- TODO: 填写示例输出 -->

# R.DIFF

# 语法

R.DIFF ...

# 描述

# 参数

# 示例

> R.DIFF
<!-- TODO: 填写示例输出 -->

# R.GETBIT

# 语法

R.GETBIT ...

# 描述

# 参数

# 示例

> R.GETBIT
<!-- TODO: 填写示例输出 -->

# R.GETBITARRAY

# 语法

R.GETBITARRAY ...

# 描述

# 参数

# 示例

> R.GETBITARRAY
<!-- TODO: 填写示例输出 -->

# R.GETBITS

# 语法

R.GETBITS ...

# 描述

# 参数

# 示例

> R.GETBITS
<!-- TODO: 填写示例输出 -->

# R.GETINTARRAY

# 语法

R.GETINTARRAY ...

# 描述

# 参数

# 示例

> R.GETINTARRAY
<!-- TODO: 填写示例输出 -->

# R.JACCARD

# 语法

R.JACCARD ...

# 描述

# 参数

# 示例

> R.JACCARD
<!-- TODO: 填写示例输出 -->

# R.MAX

# 语法

R.MAX ...

# 描述

# 参数

# 示例

> R.MAX
<!-- TODO: 填写示例输出 -->

# R.MIN

# 语法

R.MIN ...

# 描述

# 参数

# 示例

> R.MIN
<!-- TODO: 填写示例输出 -->

# R.OPTIMIZE

# 语法

R.OPTIMIZE ...

# 描述

# 参数

# 示例

> R.OPTIMIZE
<!-- TODO: 填写示例输出 -->

# R.RANGEINTARRAY

# 语法

R.RANGEINTARRAY ...

# 描述

# 参数

# 示例

> R.RANGEINTARRAY
<!-- TODO: 填写示例输出 -->

# R.SETBIT

# 语法

R.SETBIT ...

# 描述

# 参数

# 示例

> R.SETBIT
<!-- TODO: 填写示例输出 -->

# R.SETBITARRAY

# 语法

R.SETBITARRAY ...

# 描述

# 参数

# 示例

> R.SETBITARRAY
<!-- TODO: 填写示例输出 -->

# R.SETBITS

# 语法

R.SETBITS ...

# 描述

# 参数

# 示例

> R.SETBITS
<!-- TODO: 填写示例输出 -->

# R.SETFULL

# 语法

R.SETFULL ...

# 描述

# 参数

# 示例

> R.SETFULL
<!-- TODO: 填写示例输出 -->

# R.SETINTARRAY

# 语法

R.SETINTARRAY ...

# 描述

# 参数

# 示例

> R.SETINTARRAY
<!-- TODO: 填写示例输出 -->

# R.SETRANGE

# 语法

R.SETRANGE ...

# 描述

# 参数

# 示例

> R.SETRANGE
<!-- TODO: 填写示例输出 -->

# R.STAT

# 语法

R.STAT ...

# 描述

# 参数

# 示例

> R.STAT
<!-- TODO: 填写示例输出 -->

# R64.APPENDINTARRAY

# 语法

R64.APPENDINTARRAY ...

# 描述

# 参数

# 示例

> R64.APPENDINTARRAY
<!-- TODO: 填写示例输出 -->

# R64.BITCOUNT

# 语法

R64.BITCOUNT ...

# 描述

# 参数

# 示例

> R64.BITCOUNT
<!-- TODO: 填写示例输出 -->

# R64.BITFIELD

# 语法

R64.BITFIELD ...

# 描述

# 参数

# 示例

> R64.BITFIELD
<!-- TODO: 填写示例输出 -->

# R64.BITOP

# 语法

R64.BITOP ...

# 描述

# 参数

# 示例

> R64.BITOP
<!-- TODO: 填写示例输出 -->

# R64.BITPOS

# 语法

R64.BITPOS ...

# 描述

# 参数

# 示例

> R64.BITPOS
<!-- TODO: 填写示例输出 -->

# R64.CARD

# 语法

R64.CARD ...

# 描述

# 参数

# 示例

> R64.CARD
<!-- TODO: 填写示例输出 -->

# R64.CLEAR

# 语法

R64.CLEAR ...

# 描述

# 参数

# 示例

> R64.CLEAR
<!-- TODO: 填写示例输出 -->

# R64.CLEARBITS

# 语法

R64.CLEARBITS ...

# 描述

# 参数

# 示例

> R64.CLEARBITS
<!-- TODO: 填写示例输出 -->

# R64.CONTAINS

# 语法

R64.CONTAINS ...

# 描述

# 参数

# 示例

> R64.CONTAINS
<!-- TODO: 填写示例输出 -->

# R64.DELETEINTARRAY

# 语法

R64.DELETEINTARRAY ...

# 描述

# 参数

# 示例

> R64.DELETEINTARRAY
<!-- TODO: 填写示例输出 -->

# R64.DIFF

# 语法

R64.DIFF ...

# 描述

# 参数

# 示例

> R64.DIFF
<!-- TODO: 填写示例输出 -->

# R64.GETBIT

# 语法

R64.GETBIT ...

# 描述

# 参数

# 示例

> R64.GETBIT
<!-- TODO: 填写示例输出 -->

# R64.GETBITARRAY

# 语法

R64.GETBITARRAY ...

# 描述

# 参数

# 示例

> R64.GETBITARRAY
<!-- TODO: 填写示例输出 -->

# R64.GETBITS

# 语法

R64.GETBITS ...

# 描述

# 参数

# 示例

> R64.GETBITS
<!-- TODO: 填写示例输出 -->

# R64.GETINTARRAY

# 语法

R64.GETINTARRAY ...

# 描述

# 参数

# 示例

> R64.GETINTARRAY
<!-- TODO: 填写示例输出 -->

# R64.JACCARD

# 语法

R64.JACCARD ...

# 描述

# 参数

# 示例

> R64.JACCARD
<!-- TODO: 填写示例输出 -->

# R64.MAX

# 语法

R64.MAX ...

# 描述

# 参数

# 示例

> R64.MAX
<!-- TODO: 填写示例输出 -->

# R64.MIN

# 语法

R64.MIN ...

# 描述

# 参数

# 示例

> R64.MIN
<!-- TODO: 填写示例输出 -->

# R64.OPTIMIZE

# 语法

R64.OPTIMIZE ...

# 描述

# 参数

# 示例

> R64.OPTIMIZE
<!-- TODO: 填写示例输出 -->

# R64.RANGEINTARRAY

# 语法

R64.RANGEINTARRAY ...

# 描述

# 参数

# 示例

> R64.RANGEINTARRAY
<!-- TODO: 填写示例输出 -->

# R64.SETBIT

# 语法

R64.SETBIT ...

# 描述

# 参数

# 示例

> R64.SETBIT
<!-- TODO: 填写示例输出 -->

# R64.SETBITARRAY

# 语法

R64.SETBITARRAY ...

# 描述

# 参数

# 示例

> R64.SETBITARRAY
<!-- TODO: 填写示例输出 -->

# R64.SETBITS

# 语法

R64.SETBITS ...

# 描述

# 参数

# 示例

> R64.SETBITS
<!-- TODO: 填写示例输出 -->

# R64.SETFULL

# 语法

R64.SETFULL ...

# 描述

# 参数

# 示例

> R64.SETFULL
<!-- TODO: 填写示例输出 -->

# R64.SETINTARRAY

# 语法

R64.SETINTARRAY ...

# 描述

# 参数

# 示例

> R64.SETINTARRAY
<!-- TODO: 填写示例输出 -->

# R64.SETRANGE

# 语法

R64.SETRANGE ...

# 描述

# 参数

# 示例

> R64.SETRANGE
<!-- TODO: 填写示例输出 -->

# R64.STAT

# 语法

R64.STAT ...

# 描述

# 参数

# 示例

> R64.STAT
<!-- TODO: 填写示例输出 -->

# SETBIT

# 语法

SETBIT key offset value

# 描述

设置或清除 key 对应字符串值中指定偏移量处的位

# 参数

  • key

存储该字符串的键的名称

  • offset

要读取的位偏移量(从 0 开始计数)

  • value

要设置的位值:0 或 1

# 示例

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