常用方法三种
一、set集合(精准、耗费空间)
用户登录以后,把用户id添加到redis的set中,set会自动进行去重,类似于这样:
127.0.0.1:6379> sadd users_2019_06_17 user1
(integer) 1
127.0.0.1:6379> sadd users_2019_06_17 user2
(integer) 1
127.0.0.1:6379> sadd users_2019_06_17 user3
(integer) 1
很显然,只需要一条scard命令:
127.0.0.1:6379> scard users_2019_06_17
(integer) 3
可以看出来,2019年6月17号的用户数是3个。
很简单,但是集合只适用于用户数比较少的场合,假如用户有100万,set存储100万个id号,如果一个id号占32个字节,总共就是差不多32M,一个月就是960M 差不多一个G了!
二、bitMap(精准、空间损耗一般)
我们存放100万个id号需要100万个bit位,也就是100万/8 = 125K字节,直接用以id号和100万取余,余数作为bit的索引:
127.0.0.1:6379> setbit login_2019_06_17 10000 1
(integer) 0
127.0.0.1:6379> setbit login_2019_06_17 1024 1
(integer) 0
127.0.0.