Redis二进制数组(Bit arrays or simply bitmaps)

简述

Redis提供了二进制数组(Bit arrays、simply bitmaps)的功能,并使用SETBIT、GETBIT、BITCOUNT、BITOP四个命令来操作二进制数组。

二进制数组的结构

二进制数组底层是通过SDS简单动态字符串来实现的,因为SDS是二进制安全的结构,SDS buf数组中的每一个元素可以存储8个bit,如一下结构,可以存储16个bit的操作数据。
在这里插入图片描述

操作命令

  • SETBIT :把bit array的第bit位设置为value的值,value只能是0或者1。
  • GETBIT :返回bit array的第bit位的二进制值。
  • BITCOUNT :返回bit array中1的个数。
  • BITOP :OP操作有AND(与)、OR(或)、XOR(异或)、NOT(非),该命令表示将array1和array2进行位操作,并把结构存入result中。

指令实现

定位

Redis用SDS的buf数组来存储二进制数组,每一个buf元素都存储八位,因此在定位时,首先要确认buf数组的下标(bit / 8),在确认在第几位(bit % 8 + 1)。有了定位的方法,设置和获取bit都是手到擒来,不过要注意设置的时候会涉及到buf数组的扩容问题。

扩容

假如当前buf的len是2,执行SETBIT array 65 1,则要求长度应该是65 / 8 + 1 = 9,因此要对buf进行扩容,扩容之后len和free都为9(根据SDS的空间预留策略)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值