Bitmaps-位图

Redis Bitmaps 是一种用于操作位的工具,不是独立的数据类型,而是基于字符串。本文介绍了Bitmaps的基本操作,如SETBIT、GETBIT、BITCOUNT、BITPOS等,以及位操作BITOP和BITFIELD的使用方法,适用于数据统计、用户状态记录等场景。
摘要由CSDN通过智能技术生成

目录

1、简介

2 、基本操作

2.1 SETBIT key offset value

2.2 GETBIT key offset

2.3 BITCOUNT key [start] [end]

2.4 BITPOS key bit [start] [end]

2.5 BITOP operation destkey key [key …]

2.6 BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]


1、简介

Bitmaps 称为位图,它不是一种数据类型。网上很多视频教程把Bitmaps称为数据类型,应该是不正确的。Bitmaps 是Redis提供给使用者用于操作位的“数据类型”。它主要有如下的基本特性:

  • Bitmaps 不是数据类型,底层就是字符串(key-value),byte数组。我们可以使用普通的get/set直接获取和设值位图的内容,也可以通过Redis提供的位图操作getbit/setbit等将byte数组看成“位数组”来处理

  • Bitmaps 的“位数组”每个单元格只能存储0和1,数组的下标在Bitmaps中称为偏移量

  • Bitmaps设置时key不存在会自动生成一个新的字符串,如果设置的偏移量超出了现有内容的范围,就会自动将位数组进行零扩充

 

2 、基本操作

2.1 SETBIT key offset value

 

对key存储的字符串,设置或者清除指定偏移量上的位(bit),位的设置或者清除取决于value参数,0/1;当key不存在时,自动生成一个新的字符串。字符串会进行伸展确保value保存在指定的偏移量上。字符串进行伸展时,空白位置以0填充。

时间复杂度 :

O(1)

offset 范围:

0~2^32

返回值:

指定偏移量原来存储的位

案例:

使用Bitmaps来存储用户是否打卡,打卡记做1,未打卡为0,用户的id作为偏移量 假设存在10个用户,此时用户1、3、5、9、10打了卡,其他人未打卡,Bitmaps的初始化结果如下所示: clock:20210806代表2021/08/06的打卡记录

 

注意事项:

正式系统中,id肯定不会是0、1、2这种,而是以某一个数组开头,比如1000000000000001、1000000000000002这个时候非常容易导致偏移量的浪费,因此我们可以考虑通过计算减去一个合适的值后再设置偏移量,如果设置的Bitmaps偏移量过大,容易造成分配内存时间过长,Redis服务器被阻塞。 ​

2.2 GETBIT key offset

 

获取指定偏移量上的位(bit),当offset比字符串长度大,或者key不存在,返回0;

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李子捌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值