您的位置:首页 > 数据库 > Redis

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

2017-08-02 10:42 483 查看
介绍
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 代表结果统计的事件。就类似与古人 打绳结 来记录时间,也可以打绳结 来记录 点赞 这一类事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息