redis setbit方式によるWebサイトの現在のオンライン人数の効率的な統計(詳細まとめ)

1114 ワード

オンライン人数の統計について、第1の反応は、大規模な辞書を作成してユーザーidと対応する状態を格納することであるが、この方法は空間がかかり、効率が低い.
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