通过redis的setbit及bitcount方式高效统计网站当前在线人数

关于统计在线人数,第一反应想到的是创建一个大型字典存储用户id与对应的状态,但是这种方法耗费空间大,效率较低。因此选择redis作为查询用户登录状态更为方便快捷。

原理:通过将用户 id 作为位数,每次上线则将该位设为 1,下线则设为 0,通过 bitcount 来查询有多少 1,通过 getbit,传入用户 id 来判断当前用户是否为上线状态。

SETBIT key offset value
 
BITCOUNT key [start end] -> 返回的是二进制中 1 的个数
 
GETBIT key offset

如,一个id = 888888 的用户上线了:

setbit usercount 888888 1 (这里当前usercount虽然没有888888位,但只要通过setbit就可以创建)
id = 8889 的用户上线
setbit usercount 8889 1

然后通过bitcount usercount判断有多少1,则就知道有多少在线人数了。(当前bitcount usercount 返回2,代表有2位用户在线)

通过 getbit usercount 8889,来判断用户id = 8889 的用户是否在线。此时返回的结果为1.
通过 setbit usercount 8889 0,来设置用户id = 8889 的用户进行下线。

然后再通过bitcount usercount获取有多少在线人数。此时返回的结果为1.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章