Redis位图BitMap

一、为什么使用位图?

使用位图能有效实现 用户签到 等行为,用数据库表记录签到,将占用很多存储;但使用 位图BitMap ,就能 大大减少存储占用

二、关于位图

本质上是String类型 ,最小长度8位(一个字节),位数不够表示则扩容,每次扩容以字节为单位,最大占用内存为512MB,用来操作位

三、操作

引言:由于偏移量offset与数组下标结果一致,这里我就将offset当成二进制数组下标来讲解

1)设置二进制数组中指定下标的值

语法: setbit key offset value
字段描述:
offset: 二进制数组中相对于0号位置的偏移量(或者下标)
value: 给指定下标设置的值(0或1)

设置val 二进制数组中下标为0的位置值为1(设置完后二进制数组为 10000 0000),如:

复制代码
setbit val 0 1  

2)获取指定下标的值

语法: getbit key offset
字段描述:
offset: 二进制数组中相对于0号位置的偏移量(或者下标)

获取val 二进制数组中下标为0位置的值,如:

复制代码
getbit val 0

3)统计1的数量

语法: bitcount key

4)查询指定值第一次出现的下标

语法: bitpos key value
字段描述:
value: 指定的值(0或1)

5)多个二进制数组进行位运算

语法: bitop and | or | xor | not destkey key1 key2 ...
作用: 将这些key进行位运算(不包含destkey),运算的结果放到destkey中
字段描述:
destkey: 存放的位置
key*: 所有进行位运算的二进制数组
and | or | xor | not: and,与;or或;xor,异或;not,非

6)取出二进制数组中指定范围的数据转换为十进制返回

语法: bitfield_ro key get type offset ...
作用: 取出部分二进制数据,如0011 1100,取出0011返回(0011转为十进制为3)
字段描述:
type: 第一个位置表示类型:i 代表有符号整数(最高位0为正,1为负 ),u代表无符号整数;后面紧接着取出位的数量;如u5,代表从起始位置取出5位表示无符号整数
offset: 起始偏移量(或起始下标)

假如num 的二进制形式为0011 1100,从下标为2的位置,取出4位,作为无符号整数返回(十进制结果为15)

复制代码
bitfield_ro num get u4 2

7)操作二进制数组中指定范围的数据

语法: bitfield key get type offset set type offset value incrby type offset value
作用: 操作部分二进制数据
字段描述:
type: 第一个位置表示类型:i代表有符号整数(最高位0为正,1为负),u代表无符号整数;后面紧接着操作位的数量;
offset: 起始偏移量(或起始下标)
value: 要操作的值,可以是任意值

① bitfield key get type offset

作用:获取二进制数组中连续某一部分的数据转换为十进制

假如num 的二进制形式为0011 1100,从下标为2的位置,取出4位,作为无符号整数返回(十进制结果为15)

复制代码
bitfield num get u4 2

② bitfield key set type offset value

作用:将指定部分的二进制数据的十进制形式设置为value,如果位数不够,则取最后几位;

假如num二进制为0011 1100 ,设置下标从1开始,数3位,也就是011,将8(二进制1000)赋值到这三位上,就成了000,那么num将变为0000 1100 ,操作如下:

复制代码
bitfield num get u4 2

③ bitfield key incrby type offset value

作用:将指定部分的二进制数据加上value,保留原先长度个位

假如num二进制为0011 1100 ,那么取出下标2到3位置数据为11,转换为十进制为3,value为10,那么相加的结果就为13(二进制为1101),保留两位为01,用01替换原来的10,那么num的二进制结果为0001 1100,操作如下:

复制代码
bitfield num incrby  u2 2 10
相关推荐
前端 贾公子18 分钟前
LangGraph == 图的状态(State)管理 (下)
运维·服务器·数据库
zlwool28 分钟前
机械行业ERP与进销存的合规选型边界
数据库·erp
梦想的颜色33 分钟前
【AI速览】RAG 向量数据库选型:Milvus、Chroma、Qdrant、PGVector 全维度横向对比
数据库·milvus·chroma·rag·pgvector·向量库·qdrant
小溪学编程1 小时前
向量数据库 Milvus 基础实践:从入门到上手
数据库·milvus
数据最前线1 小时前
雪上加霜,Oracle向蓝色巨人最后的阵地发起挑战
数据库·oracle
于眠牧北1 小时前
Charles配置指定域名抓取和雷电模拟器中抓取APP接口配置
数据库·redis·缓存
福娃筱欢2 小时前
57014 canceling statement due to user request(金仓 KingbaseES)
数据库·kingbase·金仓数据库
ClouGence2 小时前
SAP HANA 数据同步遇到长事务,如何兼顾实时性与完整性?
数据库·后端
数据库小学妹2 小时前
数据库管理工具有哪些?2026主流工具分类与选型对照
数据库·数据库管理工具·数据库工具·信创数据库·数据库客户端
bingHHB2 小时前
销售订单同步实战:MES生产领料/补料→金蝶材料出库
数据库·集成测试