Redis命令之位图

1. 简介

Redis的位图(bitmap)是由多个二进制位组成的数组,数组中的每个二进制位都有与之对应的偏移量(也称索引),用户通过这些偏移量可以对位图中指定的一个或多个二进制位进行操作
在这里插入图片描述


2. setbit

setbit bitmap offset value:为位图指定偏移量上的二进制位设置值,返回二进制位被设置之前的旧值作为结果, offset是偏移量,即指定的下标,value是0或者1
在这里插入图片描述

  • 位图的拓展

    1. 位图不存在 拓展为8个bit为
    2. 位图不够大,比如8个bit位,假设bitmap1已经存在,执行setbit bitmap1 10 1 则会加上8个比特位(按字节加,最少加8个),执行setbit bitmap1 20 1 ,则会加上16个比特位
    3. 拓展出来的bit位上面的值是0
  • 偏移量只能为非负数


3. getbit

getbit bitmap offset:获取位图指定偏移量上的二进制位的值
在这里插入图片描述


4. bitcount

bitcount bitmap [start end]:对位图包含的的二进制位进行统计算,[start,end]指定字节范围,默认是所有字节

example:
设置如下bitmap:
在这里插入图片描述

在这里插入图片描述

可以使用负数索引
在这里插入图片描述


5. bitpos

bitpos bitmap value [start] [end]:在位图中查找第一个被设置为指定值的二进制位,并返回这个二进制位的偏移量, 默认查找所有字节
在这里插入图片描述在这里插入图片描述

字节索引可以是负数

  • 边界情况
    1. 一个不存在的位图或者一个所有位都被设置成了0的位图中查找值为1的二进制位时,返回0
    2. 一个所有位都被设置成1的位图中查找值为0的二进制位,返回最大偏移量加上1

6. bitop

bitop op result bitmap1 [bitmap2...]:对多个bitmap进行运算,运算结果存放到result中,op可以是AND、OR、XOR、NOT,回被存储位图的字节长度

example:
bitmap1: 1 0 0 1 0 0 1 0
bitmap2: 0 1 0 0 1 0 1 0
在这里插入图片描述

  • NOT运算只允许使用一个位图作为输入
  • BITOP命令在对两个长度不同的位图执行运算时,会将长度较短的那个位图中不存在的二进制位的值看作0

7. bitfield

bitfield bitmap set type offset value:在位图的指定偏移量offset上设置一个type类型的整数值value

  • offset参数用于指定设置的起始偏移量。这个偏移量从0开始计算
  • type参数用于指定被设置值的类型,以i或者u为前缀,后跟被设置值的位长度,i表示被设置的值为有符号整数,u则表示被设置的值为无符号整数
  • value参数用于指定被设置的整数值,这个值的类型应该和type参数指定的类型一致

在这里插入图片描述
在这里插入图片描述
多次使用set:
在这里插入图片描述在这里插入图片描述

  • 设置可以在位图的任意偏移量上进行,被设置区域之间不必是连续的,也不需要进行对齐
  • 在同一个位图中可以存储多个不同类型和不同长度的整数
  1. 根据索引对区域进行设置

    bitfield bitmap set type #index value:根据给定类型的位长度,对位图在指定索引上存储的整数值进行设置,适用于位图中存储的都是相同类型的整数
    在这里插入图片描述

  2. 获取区域存储的值
    bitfield bitmap get type #index
    在这里插入图片描述
    在这里插入图片描述

  3. 执行加法操作或减法操作

bitfield bitmap incrby type offset increament: 获取offset索引开始的一个type类型的整数,加上增量
bitfield bitmap incrby type #index increament: 获取第index(0开始)个type类型的整数,加上增量

在这里插入图片描述

减法操作增量为负数即可

  1. 处理溢出操作

在这里插入图片描述

回绕 :向上溢出的整数值将从类型的最小值开始重新计算,而向下溢出的整数值则会从类型的最大值开始重新计算
饱和:向上溢出的整数值将被设置为类型的最大值,而向下溢出的整数值则会被设置为类型的最小值
失败:检测到计算会引发溢出时拒绝执行计算,并返回空值表示计算失败
默认以WRAP方式处理溢出

8. 使用字符串命令操作位图

在这里插入图片描述

位图是在字符串的基础上实现的,所以它会把位图键看作一个字符串键


参考书目:
《Redis使用手册》 黄健宏

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CodePanda@GPF

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

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

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

打赏作者

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

抵扣说明:

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

余额充值