美文网首页
通过redis setbit方式高效统计网站当前在线人数

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

作者: Zoulf | 来源:发表于2018-08-07 09:21 被阅读0次

    关于统计在线人数,第一反应想到的是创建一个大型字典存储用户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
    
    

    相关文章

      网友评论

          本文标题:通过redis setbit方式高效统计网站当前在线人数

          本文链接:https://www.haomeiwen.com/subject/yexovftx.html