redis setbit方式によるWebサイトの現在のオンライン人数の効率的な統計(詳細まとめ)
1114 ワード
オンライン人数の統計について、第1の反応は、大規模な辞書を作成してユーザーidと対応する状態を格納することであるが、この方法は空間がかかり、効率が低い.
redisを学ぶことで、より効率的な方法を考えます.
原理:ユーザidをビット数とし,オンラインになるたびにそのビットを1,オフラインになると0,bitcountでどれだけ1があるかを照会し,getbit,着信ユーザidにより現在のユーザがオンライン状態であるか否かを判断する.
たとえば、id=888888のユーザーがオンラインになった場合:
これにより、ウェブサイトに億人以上のユーザーがいても、必要なストレージスペースは10 M以上しかありません.
アクセス数を集計したい場合は、
redisを学ぶことで、より効率的な方法を考えます.
原理:ユーザidをビット数とし,オンラインになるたびにそのビットを1,オフラインになると0,bitcountでどれだけ1があるかを照会し,getbit,着信ユーザidにより現在のユーザがオンライン状態であるか否かを判断する.
SET key value [EX seconds] [PX milliseconds] [NX|XX]
SETBIT key offset value
BITCOUNT key [start end] -> 1
GETBIT key offset
たとえば、id=888888のユーザーがオンラインになった場合:
key:
set usercount 0
python ord('0') 0 ASCII 48
python bin(48) 0110000
0
setbit usercount 2 0
setbit usercount 3 0
bitcount usercount 0 , usercount 0 , 。
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 。
これにより、ウェブサイトに億人以上のユーザーがいても、必要なストレージスペースは10 M以上しかありません.
アクセス数を集計したい場合は、
set count 0
incr count