使用Redis的bitmaps统计活跃用户


当前第2页 返回上一页

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

for ($i = 1; $i <= 7; $i ++) {

    $key = "userlogin_".date('Ymd', time() - (86400*$i));

  

    if ($i == 1) {

        $redis->bitOp('and', 'week_logined', $key);

    } else {

        $redis->bitOp('and', 'week_logined', 'week_logined', $key);

    }

}

  

// 获取前50个用户

$userIds = [];

for ($i=1; $i<=10000; $i++) {

    $ret = $redis->getBit('week_logined', $i);

    $ret && $userIds[] = $i;

  

    if (count($userIds) >=50) break;

}

这里面有一个注意点,也是易错点,在bitop时候,第一次的时候,因为week_logined还不存在,所以进行op的键只有一个。当从第二次开始时候,进行op的键就为2个了。

获取一个月内登陆的用户,思路基本和上面一样,只是将and改为or

1

2

3

4

5

6

7

8

9

10

11

for ($i = 1; $i <= 3; $i ++) {

    $key = "userlogin_".date('Ymd', time() - (86400*$i));

    $redis->bitOp('or', 'month_loginOnce', 'month_loginOnce', $key);

}

  

// 获取一个月内登陆过的用户

$userIds = [];

for ($i=1; $i<=10000; $i++) {

    $ret = $redis->getBit('month_loginOnce', $i);

    $ret && $userIds[] = $i;

}

可以看到,在进行or的时候和and还是有些区别的。or的时候,无需对第一次进行判断。个中缘由,大家自己体会体会。

以上就是使用Redis的bitmaps统计活跃用户的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

Redis缓存有什么好处

Redis键过期设置

什么功能需要使用Redis

浅谈centos 7安装Redis的方法

Redis默认端口号是多少

Redis的key可以是中文吗

Redis源码是什么语言

讲解Redis发布订阅演示、事务演示、持久化

Redis是单线程的原因及高并发快的3大原因详解

Redis消息队列如何防止数据丢失

更多相关阅读请进入《Redis》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...