1、如何使用redis记录上亿用户连续登录天数
场景:游戏连续登录多少天领取奖励。统计用户连续签到。
使用reids提供的bitmap数据结构来实现,底层就是一个个二进制位,只能存储0或者1。
在redis里,bitmap是String类型,String类型最大存储512M,那能存储多少呢?
512M = 1024byte*1024*512*8 = 4294967296(bit)
所以哪怕你有几亿个用户,也是可以存的下的。
统计则有两个维度,以每一天或者每一个用户来进行存储
如果以每一天来存储用户的连续登录,那就需要30个bit,将日期作为bitmap的key,将用户id映射到bitmap的偏移位,前提是用户id是唯一的数字,比如第一天 用户id 为1的用户登录,记录值设置成1,第二天登录,也设置成1,以此类推。统计时,以最后一天的日期为起点,往前推送,碰到为1的就给他登录+1,碰到0则不在统计。
结论:统计每日所有用户效率高,统计单个用户记录不方便