• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP操作redis中bitMap

php 搞代码 3年前 (2022-03-01) 15次浏览 已收录 0个评论

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。

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP操作redis中bitMap
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址