可以用于上限超大的连续性的数字编号统计,在不牺牲查询速度的前提下,缩小存储空间。
如用户id的统计,统计当天内访问网站的用。节约了32倍的空间。
上亿用户登录统计
存储模型设计
因为有上亿的用户量,所以可以将每个用户按照每个位来存入,每一天都有一个bitmap,每个bitmap的每一位对应着一个用户的当天的登录状态值
数据id设计
每天的bitmap的key设置成当天日期,比如login_20181206,而用户的id就和位数对应,比如王五的id为8,则bitset login_20181206 8 1
<?php
$redis = new Redis();
$redis->connect('*******');
$redis->auth('*******');
$cacheKey = 'bitmap';
//我们将7,8,10对应的位置设置为1
$redis->setBit($cacheKey, 7, 1);
$redis->setBit($cacheKey, 8, 1);
$redis->setBit($cacheKey, 10, 1);
$redis->setBit($cacheKey, 15, 1);
$redis->setBit($cacheKey, 15005, 1);//user_id 1
$value = $redis->get($cacheKey);
$bitmap = unpack('C*', $value);
$count = 0;
foreach($bitmap as $key => $number) {
for($i = 0; $i < 8; $i++) {
if($number >> $i & 1) {
$count++;
}
}
}
var_dump($count);