Redis的底层类型之bitmap&bitfields

werbenhu / 61 / 2023-09-25 11:23:01

ChatGPT 可用网址,仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友。
https://ckai.xyz

bitmap

Bitmap可以状态记录或统计,如每日登录

  • SETBIT
SETBIT key offset value
  • GETBIT
GETBIT key offset
  • 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:指定要操作的 Redis 键。
GET:用于获取指定类型的位字段值。
SET:用于设置指定类型的位字段值。
INCRBY:用于递增或递减指定类型的位字段值。
encoding:指定位字段的数据类型,可以是 u8、i8、u16、i16、u32、i32,具体取决于您希望的位字段类型。
offset:指定位字段的偏移量。
value:用于设置或递增/递减的值。
OVERFLOW:指定溢出处理方式,可以是 WRAP(循环)、SAT(饱和)或 FAIL(失败)。


设置一个 8 位的无符号整数:
BITFIELD mykey SET u8 0 42
这将在名为 mykey 的位字段中的偏移量 0 处设置一个无符号 8 位整数为 42。

获取一个 16 位的有符号整数:
BITFIELD mykey GET i16 8
这将从 mykey 中的偏移量 8 处获取一个有符号 16 位整数的值。

增加一个 32 位的无符号整数:
BITFIELD mykey INCRBY u32 16 5
这将在 mykey 的偏移量 16 处的无符号 32 位整数上增加 5。

一次执行多个操作:
BITFIELD mykey
   GET u8 0
   GET i16 8
   INCRBY u32 16 5
  • BITFIELD_RO

BITFIELD_RO 命令是 BITFIELD 命令的只读变体,它仅接受 GET 子命令,并且可以安全地在只读副本中使用。这个命令的目的是在不破坏命令标志的情况下,在只读副本中允许 BITFIELD 的行为。

  • BITCOUNT
BITCOUNT key [start end]

key:要操作的字符串键。
start 和 end(可选):用于指定范围的起始和结束位置。如果不提供这两个参数,命令将统计整个字符串中值为 1 的位数。如果提供了这两个参数,命令将只统计指定范围内值为 1 的位数。

  • BITOP
BITOP <AND | OR | XOR | NOT> destkey key [key ...]

对多个字符串进行位操作,并将结果存储在新的字符串中。主要用于位图操作,例如在处理用户在线状态、权限控制等场景中非常有用。

operation:指定要执行的位操作类型,可以是以下之一:
AND:对所有输入字符串执行位与操作。
OR:对所有输入字符串执行位或操作。
XOR:对所有输入字符串执行位异或操作。
NOT:对单个输入字符串执行位非操作(后面只需提供一个 key)。
destkey:指定存储结果的目标字符串键。
key:要执行位操作的输入字符串键,可以是一个或多个。
  • BITPOS
BITPOS key bit [start] [end]

查找位字符串(bit string)中指定比特值(bit value)的位置的命令。它主要用于寻找位字符串中从左到右第一个或最后一个设置为指定比特值的位置。

key:指定要搜索的位字符串键。
bit:指定要查找的比特值,可以是 0 或 1。
start(可选):指定搜索的起始位置,以比特位偏移量表示。默认从字符串的第一个比特位开始搜索。
end(可选):指定搜索的结束位置,以比特位偏移量表示。默认搜索到字符串的最后一个比特位。
BITPOS 返回查找到的比特值位置的偏移量。如果未找到指定的比特值,则返回 -1。

Redis的底层类型之bitmap&amp;bitfields
作者
werbenhu
许可协议
CC BY 4.0
发布于
2023-09-25
修改于
2024-07-14
Bonnie image
尚未登录