我刚刚发布了 bitmapist (GitHub) - 一个强大的实时分析库,可以帮助您回答以下问题:用户 123 今天在线吗?本星期?本月?用户 123 是否执行了操作“X”?有多少用户已行动
我刚刚发布了 bitmapist (GitHub) - 一个强大的实时分析库,可以帮助您回答以下问题:
该库非常易于使用,使您能够轻松创建自己的报告。
使用 Redis 位图,您可以在很少的内存(兆字节)中存储数百万用户的事件。使用巨大的 id(例如 2^32 或更大)时应小心,因为这可能需要更大的内存。
如果您想了解有关位图的更多信息,请阅读以下内容:
需要 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 进行强大的实时分析,感谢原作者分享。