介绍 redis-Bit-Map 的相关命令和常用场景

来源:互联网 发布:广数螺纹编程格式 编辑:程序博客网 时间:2024/06/04 19:31

介绍 redis-Bit-Map 的相关命令和常用场景

相关命令(5种)

  • SETBIT key offset value

    设置 key offset 偏移位置 value 0 或 1

  • GETBIT key offset

    获取置 key offset 偏移位置 的 value 返回 0 或 1

  • BITCOUNT key [start end]

    获取 key 的 value 为1 的总数 , [start end]为可选参数,可以设置范围。这里需要注意的是,start 和 end 中的使用的是byte 而set 和 get 使用的 bit ,是 8:1 的关系。

  • BITOP OP destkey srckey1 srckey2 srckey3 ... srckeyN

    这里 OP 可以设置为 AND(交集) , OR(并集) , XOR(异或)NOT(取非)destkeykey 的名称 ,srckey1-N 是 用于计算的 bitmapkey 值 。

  • BITPOS key bit [start] [end]

    返回设置为1或0的一个字符串中的第一个点的位置

常用场景

  • 1 产品评论总数,点赞数统计

    $redis = new redis();
    $redisHost = $this->GetRedisHttpLink();
    $redis->connect($redisHost, 6379);
    $key = 'comment'.$data['KeyNO'].$data['CommentTypeID'];
    $uid = $data['UID'];
    $redis->setBit($key, $uid, 1);
    echo $redis->getBit($key, $uid ) . PHP_EOL;
    echo '总评论次数为:' . $redis->bitCount($key);exit();

  • 2 活跃用户统计

    $key1 = 'Userlogin2017-08-01';$key2 = 'Userlogin2017-08-02';$key3 = 'Userlogin2017-08-03';##分别记录下 8月1号  和 8月2号 的活跃用户$redis->setBit($key1, $uid, 1);$redis->setBit($key2, $uid, 1);##进行bitmap 计算统计1号2号都活跃的用户$redis->bitOp('AND','8182',$key1,$key2);$both_active = $redis->bitCount('8182');##进行bitmap 计算统计1号 或 2号 或 3号 活跃的用户$redis->bitOp('OR','818283',$key1,$key2,$key3);$other_active = $redis->bitCount('818283');

    Bit-Map 常用在数量大,且记录值 与操作本身无关,与结果有关的事件。如:点赞,数目统计,活跃值,与结果有关,即可以用 0 或 1 代表结果统计的事件。就类似与古人 打绳结 来记录时间,也可以打绳结 来记录 点赞 这一类事件。