你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

实时用户在线人数统计(四):bitmap统计在线人数

2022/6/29 23:32:52

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无法统计具体有哪些用户