修罗刹官网,无尽日,又名无锡站长网
首先,我们来看一下需求:网站统计用户登录的次数,具体如下:
我们使用传统的关系型数据库(比如:oracle)来存储这样的数据,如下图所示。
每周产生7亿条数据,对于任何一个关系型数据库来说,都是非常不好维护的,对性能也会有很大的影响。
redis支持对string类型的value进行基于二进制位的置位操作。通过将一个用户的id对应value上的一位,通过对活跃用户对应的位进行置位,就能够用一个value记录所有活跃用户的信息。如下图所未,下图中的bitmap有9个位被置为1,表示这9个位上对应的用户是今天的活跃用户。其中第15位表示uid为15的用户,第一位表示uid为0的用户。(如果你的uid不是从1开始的,比如从100000开始,实际上你也可以相应的用uid减去初始值来表示其位数,比如1000000用户对应到bitmap的第一位)
redis.setbit(key, user_id, 1)
127.0.0.1:6379> setbit monday 100 1 (integer) 0
如下图,第一行表示星期一的活跃用户情况,第二行表示周二的,以此类推。为样我们通过对n天的活跃用户记录取并集操作,就能得出在n天内活跃过的用户列表。
转自:https://www.cnblogs.com/collen7788/p/12679430.html
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
理解Redis持久化,RDB持久化和AOF持久化的不同处理方式
Redis 两类持久化方式,快照和全量追加日志的不同处理方式
网友评论