bitmap就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间。
bitmap常用来做比如用户签到、活跃用户、在线用户等功能。
// 模拟当前用户
$uid = request('uid');
$key = 'online_bitmap_' . date('Ymd');
// 设置当前用户在线
Redis::setBit($key, $uid, 1);
// 可实现功能1:在线人数
$c = Redis::bitCount($key);
echo '在线人数:' . $c . '<br />';
// 可实现功能2:指定用户是否在线
$online = Redis::getBit($key, $uid);
echo $uid . ($online ? '在线' : '不在线') . '<br />';
// 可实现功能3:昨天和今天均上线的用户总数
$yestoday = Carbon::yesterday()->toDateString();
$yes_key = str_replace('-', '', $yestoday);
$c = 0;
Redis::pipeline(function ($pipe) use ($key, $yes_key, &$c) {
Redis::bitOp('AND', 'yest', $key, $yes_key);
$c = Redis::bitCount('yest');
});
echo '昨天和今天都上线的用户数量有:' . $c . '<br />';
// bitmap无法统计具体有哪些用户