*Redis BITFIELD_RO 命令
只读版本的 BITFIELD 命令。获取位域值,不修改任何数据。Redis 6.0+ 引入。
*语法
BITFIELD_RO key [GET type offset | GET type #idx] [...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 键名 |
| GET | 标志 | 是 | 获取位域 |
| type | String | 是 | 数据类型:i 有符号整数,u 无符号整数,后接位数 |
| offset | Integer | 是 | 位偏移 |
| #idx | Integer | 是 | 索引偏移(# 表示基于类型宽度的索引) |
*返回值
| 条件 | 返回值 |
|---|---|
| 有值 | 位域值数组 |
| key 不存在 | 0 数组 |
*时间复杂度
O(1)
*
*示例
> SETBIT mykey 0 1
> SETBIT mykey 1 1
> SETBIT mykey 2 1
> BITFIELD_RO mykey GET u4 0
1) (integer) 7
> BITFIELD_RO mykey GET u2 #0 GET u2 #1
1) (integer) 3
2) (integer) 1
*常见错误
- 使用 SET/INCR/INCRBY/OVERFLOW:BITFIELD_RO 只支持 GET,不支持修改操作。
*最佳实践
- 副本只读位域操作:在只读副本上执行位域读取,分担主节点压力。
*FAQ
Q: BITFIELD_RO 和 BITFIELD 有什么区别? A: BITFIELDRO 是只读命令,只支持 GET;BITFIELD 支持 GET/SET/INCRBY 等读写操作。BITFIELDRO 可在只读副本上执行。