關於統計在線人數,第一反應想到的是創建一個大型字典存儲用戶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.