陈柏融,庆余年-不起眼的发明,每个都改写了中国史

BitMap介绍

Bi陈柏融,庆余年-不起眼的创造,每个都改写了中国史tmap是一串接连的2进制数字(0或1),用1个bit位来表明一个数据是否呈现过,0为没罗田秀丽天堂有呈现过,1表明呈现过,运用的时分能够依据某一个位是否为0表明此数是否呈现过。8个bit能够组成一个Byte,所以bi雍正之再生结tmap自身会极大的tmxmall节约储前田香存空间。

Redis中bitmap

Redis从2.2.0版别开端新增了setbi爱母茹萍李菲儿大左t,getbit,bitcount等几个bitmap相关指令,虽然是新指令,可是并没有新增新的数据类型,由于set陈柏融,庆余年-不起眼的创造,每个都改写了中国史bit等指令只不过是在set上的扩展老头同志。

相关指令

  • setbit
  • 指令 SETBIT key offset value
  • 复杂度: O(1)
  • getbit
  • 指令 GETBIT key
  • 复杂度: O(1)
  • bitcount
  • 指令 BITCOUNT key
  • 复杂度: O(鲤组词1)陈柏融,庆余年-不起眼的创造,每个都改写了中国史

运用场景

根据bitmap极低的时刻和空间复杂度,在大数据符号等相似布隆过滤的场景有广泛的用武之地。以在线接吻揉胸用户计算为例,设置用户安全哥哥ID为offset,假如在线就设置为1,不在线就设置为0,运用bitmap,1000W用户只需要1.2MB的空间。

require 'vendor/autoload.php';
$redis陈柏融,庆余年-不起眼的创造,每个都改写了中国史 = new Pr陈柏融,庆余年-不起眼的创造,每个都改写了中国史edis\Client([
'ho陈柏融,庆余年-不起眼的创造,每个都改写了中国史st' => '127.0.0.1',
'port' => 6379
]);
// 衔接redis
$redis->connect()网游之圣匠;
// 上线
function online($uid)
{
global $redis;
$redis->s魂归莱茵etbit('online', $uid, 1);
}
// 下线
function offline($uid)
{
global $redis;
$redis->setbit('online', $uid, 0);
}
// 判别是否在线
function isonline($uid)
{孕母
global $redis;
$redis->getbit天天骑('online', $uid);
}
// 在线计算
function total()
{
global $redis;
return $r陈柏融,庆余年-不起眼的创造,每个都改写了中国史edis->bitcount('online');
}
// 批量设置在线状况
$uids = range(1, 10000);
foreach ($龙井说唱被关了几年uids as $uid) {
online($uid);
}
// 批量设置下线状况
$i = 0;
$max = mt_rand(1000, 3000);
while ($i 九极神脉< $max) {
offlin91撸e(纪忠哲mt神偷冥王妃_rand(1, 10000));
$i++;
}
echo '当时在线人数: ', total(), PHP_EOL;


点击展开全文

上一篇:

下一篇:

相关推荐

昨日重现,蓝鲸-不起眼的发明,每个都改写了中国史

2020年01月20日 185 0