介绍
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(取非)
,destkey
是key
的名称 ,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 代表结果统计的事件。就类似与古人 打绳结 来记录时间,也可以打绳结 来记录 点赞 这一类事件。