php redis 二进制,PHP操作redis中bitMap

1、BitMap是什么

就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间。

2、Redis中的BitMap

Redis从2.2.0版本开始新增了setbit,getbit,bitcount等几个bitmap相关命令。虽然是新命令,但是并没有新增新的数据类型,因为setbit等命令只不过是在set上的扩展。

3、php怎么操作redis的bitMap<?php

$redis = new Redis();

$redis->connect('127.0.0.1');

$cacheKey = 'bitmap';

//我们将7,8,10对应的位置设置为1

$redis->setBit($cacheKey, 7, 1);

$redis->setBit($cacheKey, 8, 1);

$redis->setBit($cacheKey, 10, 1);

$value = $redis->get($cacheKey);

/**

* 解包(redis返回来的是二进制字符串,我们需要把它解成对应的数字)

* 关于unpack的用法,如果不了解,大家可以网上搜索学习,改天可以单独写篇文章分享

*/

$bitmap = unpack('C*', $value);

print_r($bitmap);

}

结果:Array

(

[1] => 1

[2] => 160

)

对于不太熟悉bitMap的可能会问,这是什么鬼,不是应该是00000001101 这样吗?在第7 8 10三个位置是1其它都是0,刚开始我也是这么认为的,但是后来发现跟我想的不一样,然后查了资料才发现,unpack 解包的时候,参数C是无符号字符。不懂的可以去看一下pack和unpack。所以unpack返回的结果是两个值,1和160是两个byte上面的值,1byte = 8 bit。所以1对对应的bit应为00000001,160对应的bit应为10100000,所以最终结果应是0000000110100000。因为返回的是两个byte,所以是16个bit。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值