【Redis】Bitmap:基于String的位操作

一、描述

Bitmap(位图),是一串连续的二进制数组。
Bitmap不属于Redis的基本数据类型,是基于String的位操作


二、长度

String的最大长度是 512M,所以Bitmap的offset上限是8bit * 1024byte * 1024kb * 512 = 2^32-1 Bit。

-1是存在分隔符。


三、命令

1、Setbit: 设置

setbit [key] [offset] [0/1]

2、获取

getbit [key] [offset]

由于是基于String类型,所以String的方法也可以用。

3、Getbit :统计bitmap中1的数量

bitcount [key]

统计bitmap中1的数量,限定范围。

start字节起始位置,end字节结束位置,一个字节8bit。

bitcount [key] [start] [end]

例:

bitcount [key] 0 1

统计key中范围0到15的数据。

4、Bitpos : 返回第一次出现的Bit(0 / 1)的下标,不存在则返回-1

bitpos [key] [bit]
bitpos [key] [bit] [start] [end]

例:

在24位置设置 1
setbit mykey 24 1

查询 1 第一次出现的位置
bitpos mykey 1         //返回24

查询 0 第一次出现的位置
bitpos mykey 0         //返回0

5、Bitop :逻辑运算

bitop [and\or\xor] [resultKey] [key1 key2 …]
bitop [not] [resultKey] [key]

And:逻辑与;
Or:逻辑或 ;
Xor:异或;
Not:逻辑非;
将运算的结果保持到resultKey

6、 Bitfield:指定位数操作

  • Set设置与Get获取

参数Type :
i :有符合整数;
u :无符号整数;

参数Offset :
无符号:表示n个bit位 ; 
# 符合:整数宽度的偏移量;

例: i8 表示 8位无符号整数

//设置Bit宽度为type n 的数据,会返回旧值
bitfield [key] set [type] [offset] [value]

//获取Bit宽度为type n 的数据
bitfield [key] get [type] [offset]

设置获取例子

// mykey设置前位图 [0,0,0,0,0,0,0,0,…]
bitfield mykey set i8 0 10

// mykey设置后位图 [0,0,0,0,1,0,1,0,…],10的二进制就是1010
// 获取,返回10
bitfield mykey get i8 0

  • incrby 自增

bitfield mykey incrby [type] [offset] [自增n]
例:增加2,比如原来是10, 自增后12
bitfield mykey incrby i8 0 2

  • overflow 溢出控制

bitfield mykey incrby [type] [offset] [自增n] overflow [wrap | sat | fail]

wrap :上溢最小值开始,下溢最大值开始;
sat :上溢保持最大值,下溢保持最小值;
fail :  溢出不执行,并返回空

bitfield mykey incrby i8 0 2 overflow sat


四、使用场景

1、用户签到

key :【年份 : 用户ID】
offset :天数

2、统计活跃用户(用户登陆情况)

key:日期
offset :用户ID(对ID有需求)

3、实现布隆过滤器

布隆过滤器原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码鹿的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值