redis中的bit操作

redis中的bit操作

摘要

redis中的bit操作

bit操作演练

172.31.19.199:6379> SETBIT 20170808 100 1
(integer) 0
172.31.19.199:6379> GETBIT 20170808 100
(integer) 1
172.31.19.199:6379> SETBIT 20170808 101 1
(integer) 0
172.31.19.199:6379> BITCOUNT 20170808
(integer) 2
(0.53s)

应用场景

统计日活

对上面的操作我们可以理解为是统计活跃用户的逻辑, 20170808日有2个用户登录,用户的id分别是100和101.

每个用户的活跃情况

或者如果用户量不大的情况下用来记录用户的签到情况.

SETBIT  sign:100 20 1
SETBIT  sign:100 21 1

userid 100连续两天签到. BITCOUNT sign:100 就是2.
20,21可以表示网站上线后的第几天.

计算次日留存

还可以继续扩展计算留存指标
次日留存定义: 比如昨天注册了1000名用户中,在今天有300名用户又登录了,那么对应于昨天的注册留存就是30%;

计算过程就是 先取得1000名用户的id .
循环查询今天哪些用户的标记是1, GETBIT 20170808 100
然后统计得到今天登录的用户数合计.

针对所有用户的1次状态记录

再说一个简单的场景
商城搞活动,每个用户都有一次机会得到100积分的奖励.
判断是否得到过奖励.可以用bitmap统计.而且这里更简单不涉及到多天.
SETBIT cointask 100 1 这样就表示userid100已经得到积分了.是否得到就是GETBIT验证是不是1就可以了.

当用户的数量特别大的时候,用数据库不合适,因为数据库可能已经按照用户id分表了.没法查.