# 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"