1,什么是BitMap,就是用一个位来表示一个元素对应的值或者状态,key就是对应的元素本身。我们知道8位可以组成一个Byte,所以位图本身会大大节省存储空间。2、Redis中的BitMapRedis从2.2.0版本开始增加了setbit、getbit、bitcount等几个与位图相关的命令。虽然是新命令,但是并没有增加新的数据类型,因为setbit等命令只是set上的扩展。3、php如何操作redis的bitMapconnect('127.0.0.1');$cacheKey='位图';//我们将对应的7,8,10位置设置为1$redis->setBit($cacheKey,7,1);$redis->setBit($cacheKey,8,1);$redis->setBit($cacheKey,10,1);$value=$redis->get($cacheKey);/***unpack(redis返回的是一个二进制字符串,我们需要将其解密成对应的数字)*关于unpack的用法,不知道的可以上网搜索学习,可以单独写一篇文章来改天分享*/$bitmap=unpack('C*',$value);print_r($bitmap);}Result:Array([1]=>1[2]=>160)fornot对bitMap太熟悉的人可能会问,这是什么鬼,不应该是00000001101吗?7、8、10这三个位置是1,其他的是0,一开始我是这么认为的,后来发现和我想的不一样。然后查了资料,发现解包的时候,参数C什么都没有。符号字符。不明白的可以看一下pack和unpack。所以unpack返回的结果是两个值,1和160就是上面两个字节的值,1byte=8位。所以1对对应的位应该是00000001,160对应的位应该是10100000,所以最后的结果应该是0000000110100000。因为返回了两个字节,所以是16位。
