首页  >  文章  >  数据库  >  bitmapist:使用 Redis 进行强大的实时分析

bitmapist:使用 Redis 进行强大的实时分析

WBOY
WBOY原创
2016-06-07 16:28:131138浏览

我刚刚发布了 bitmapist (GitHub) - 一个强大的实时分析库,可以帮助您回答以下问题:用户 123 今天在线吗?本星期?本月?用户 123 是否执行了操作“X”?有多少用户已行动

Redis logo

我刚刚发布了 bitmapist (GitHub) - 一个强大的实时分析库,可以帮助您回答以下问题:

  • 用户123今天上线了吗?本星期?本月?
  • 用户 123 是否执行了操作“X”?
  • 本月有多少活跃用户?这个小时?
  • 本周有多少唯一身份用户执行了操作“X”?
  • 上周活跃的用户中有多少%仍然活跃?
  • 上个月活跃的用户本月仍然活跃的百分比有多少?

该库非常易于使用,使您能够轻松创建自己的报告。

使用 Redis 位图,您可以在很少的内存(兆字节)中存储数百万用户的事件。使用巨大的 id(例如 2^32 或更大)时应小心,因为这可能需要更大的内存。

如果您想了解有关位图的更多信息,请阅读以下内容:

  • 使用 Redis 位图快速、简单、实时指标
  • Redis 设置位
  • 维基百科:位数组
  • Redis 分析上的 Crashlytics

需要 Redis 2.6 和最新版本的 redis-py。

安装

sudo pip install bitmapist

示例

设置事项:

from datetime import datetime, timedelta
from bitmapist import setup_redis, delete_all_events, mark_event,\
                      MonthEvents, WeekEvents, DayEvents, HourEvents,\
                      BitOpAnd, BitOpOr
now = datetime.utcnow()
last_month = datetime.utcnow() - timedelta(days=30)

将用户 123 标记为活动并已播放歌曲:

mark_event('active', 123)
mark_event('song:played', 123)

回答用户 123 本月是否活跃:

assert 123 in MonthEvents('active', now.year, now.month)
assert 123 in MonthEvents('song:played', now.year, now.month)

本周有多少活跃用户?

print len(WeekEvents('active', now.year, now.isocalendar()[1]))

执行位运算。有多少上个月活跃的用户本月仍然活跃?

active_2_months = BitOpAnd(
    MonthEvents('active', last_month.year, last_month.month),
    MonthEvents('active', now.year, now.month)
)
print len(active_2_months)
# Is 123 active for 2 months?
assert 123 in active_2_months

使用嵌套位操作(想象一下您可以用它做什么;-))!

active_2_months = BitOpAnd(
    BitOpAnd(
        MonthEvents('active', last_month.year, last_month.month),
        MonthEvents('active', now.year, now.month)
    ),
    MonthEvents('active', now.year, now.month)
)
print len(active_2_months)
assert 123 in active_2_months
bitmapist:使用 Redis 进行强大的实时分析
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn