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

2022-07-07 11:17:22

简述

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的空间预留策略)。

  • 作者:一只小P熊
  • 原文链接:https://blog.csdn.net/solo_jm/article/details/118730300
    更新时间:2022-07-07 11:17:22