zoukankan      html  css  js  c++  java
  • 使用redis数据库+python实现获取在线用户人数

    使用redis数据库+python实现获取在线用户人数


    这里使用的是redis集合:

    Redis集是字符串的无序集合。可以在O(1)中添加,删除和检查成员的存在(恒定时间,而与Set中包含的元素数量无关)。

    一个集合的最大长度为232 (4294967295,每列表可以存储超过40亿个元素)

    应用范围:

    • 您可以使用Redis集来跟踪独特的事物。想知道访问指定博客帖子的所有唯一IP地址吗?每次处理页面视图时,只需使用SADD。这样避免插入重复的IP。
    • Redis集很好地表示关系。您可以使用Set代表每个标签,使用Redis创建标签系统。然后,可以使用SADD命令将具有给定标签的所有对象的所有ID添加到代表该特定标签的Set中。您是否希望所有对象的所有ID同时具有三个不同的标签?只需使用SINTER即可。
    • 您可以使用Set使用SPOP或SRANDMEMBER命令随机提取元素。

    redis集合底层实现

    • 底层封装的是 哈希(Hash) ,也就是我们常说的字典,它利用的是字典的特性。
    • 集合在业界也被成为是没有值(vaue)的字典,只有key。无论是哈希(Hash)还是字典。

    大家在做网站排行榜等有序的数据时,可以使用redis数据库中的 有序集合(Sorted Sets)

    与Redis集类似,Redis排序集是非重复的String集合。区别在于,排序集的每个成员都与得分相关联,该得分用于从最小到最大得分中获取排序的排序集。虽然成员是唯一的,但分数可能会重复。

    一个有序集合的最大长度为232 (4294967295,每列表可以存储超过40亿个元素)

    应用范围:

    • 在大型在线游戏中担任排行榜,每次提交新分数时,您就可以使用ZADD对其进行更新。您可以轻松地使用ZRANGE吸引顶级用户,也可以给定用户名,使用ZRANK返回其在列表中的排名。一起使用ZRANK和ZRANGE可以向用户显示得分与给定用户相似的得分。速度很快。
    • 排序集通常用于索引Redis中存储的数据。例如,如果您有许多代表用户的哈希,则可以使用已排序的集合,其元素具有用户的年龄作为得分,而用户的ID作为值。因此,使用ZRANGEBYSCORE检索具有给定年龄段的所有用户将非常简单快捷。

    代码实现:

    # 连接redis
    r = redis.Redis(host='127.0.0.1', port=6379, db=5, decode_responses=True)
    # 获取当前在线用户人数
    class GetOnLines(APIView):
        def get(self, request):
        		#获取用户ip地址
            if "HTTP_X_FORWARDED_FOR" in request.META:
                ip = request.META.get("HTTP_X_FOGWARDED_FOR")
            else:
                ip = request.META.get("REMOTE_ADDR")
            if r.scard("set_ip"):
              #添加用户ip
                r.sadd("set_ip", ip)
            else:
                r.sadd("set_ip", ip)
                r.expire("set_ip", 30)	#因为没有办法判断人是否走了,使用相对性 设置一个时间,清除一下这个ip 再添加
            return Response({"online": r.scard("set_ip")})
    
    
  • 相关阅读:
    js中的replace 回车符
    HttpHandler 读取Session
    [原]vs2005 修改新增文件时的默认编码方式
    系统托盘NotifyIcon控件及右键菜单功能
    addAttribute
    gpibCmd
    deviceFactory
    string is
    TitledMotorEntry TitledFrame MotorViewEntry TitleMotorEntry
    IOC port
  • 原文地址:https://www.cnblogs.com/tjw-bk/p/14169882.html
Copyright © 2011-2022 走看看