redis位图详解与应用

应用场景:

  1. 用户签到
  2. 用户在线状态
  3. 统计活跃用户
  4. 各种状态值
  5. 自定义布隆过滤器
  6. 点赞功能

基本命令:

SETBIT

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
SETBIT key offset value
offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内)。

GETBIT

对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
GETBIT key offset

BITCOUNT

计算给定字符串中,被设置为 1 的比特位的数量。
BITCOUNT key

BITPOS

返回位图中第一个值为 bit 的二进制位的位置。
BITPOS key bit [start] [end]

BITOP

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。
BITOP operation destkey key [key …]
operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种
BITOP AND destkey key [key ...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。

BITFIELD

bitfield 有三个子指令,分别是 get/set/incrby,它们都可以对指定位片段进行读写,但是最多只能处理 64 个连续的位,如果超过 64 位,就得使用多个子指令,bitfield 可以一次执行多个子指令。

基本操作:

redis位图详解与应用redis位图详解与应用

redis位图详解与应用

注意:位图占用空间计算,如下图:

redis位图详解与应用

redis位图详解与应用

如果key的位占够10位了,string长度为154320987字节,可以推测key占用了147M左右的内存,造成了空间上的浪费,因为100000000之前的位都没有用到,使用bitmap时要慎重。

 

点赞设计参考:https://www.cnblogs.com/burningleaf/p/9638116.html