zoukankan      html  css  js  c++  java
  • 10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户

    1、redsi的bitmap数据结构介绍

    bitmap本质上是一个string类型,只是他操作的是string的某个位是0还是1。

    setbit和getbit 两条命令是对字符串的位操作。每个位只能是0/1,然后用Bitcount命令计算这个key有多少个1。

    例如执行 setbit 'a' 10 1命令
    redis会存以下数据

    Bit运算,BITOP 支持四种表达式运算: AND(交集), OR(并集), XOR(异或) 和NOT(取非), 用法如下:
    BITOP AND result srckey1 srckey2 srckey3 ... srckeyN
    BITOP OR result srckey1 srckey2 srckey3 ... srckeyN
    BITOP XOR result srckey1 srckey2 srckey3 ... srckeyN
    BITOP NOT result srckey
    

    2、记录用户每天的登录情况

    以日期为key,userId为偏移量,执行命令setbit day useId 1
    例如:小梅(userId= 1992)和小明(userId=9877)在 2020-10-01日登录;
    setbit '2020-10-01' 1992 1
    setbit '2020-10-01' 9877 1

    小梅(userId= 1992)和小达(userId=10000)在 2020-10-02日登录;
    setbit '2020-10-02' 1992 1
    setbit '2020-10-02' 10000 1

    3、统计2020-10-01和2020-10-02活跃的用户数量只需要执行命令

    bitcount '2020-10-01'
    bitcount '2020-10-02'

    4、统计2020-10-01到2020-10-02这个时间端活跃的用户数量只需要执行命令

    bitop or 'result' '2020-10-01' '2020-10-02'
    bitcount 'result'

    5、查询小梅在2020-10-01日有没有登录只需执行命令

    getbit '2020-10-01' 1992

  • 相关阅读:
    自己动手写动态网站
    CompareValidator控件
    跨数据库服务器查询和跨表更新
    在Windows 2003 IIS 6.0中配置PHP的运行环境(图)
    sql语句跨服务器跨数据库执行
    ASP语法
    web 中 common
    common js
    经典的SQL面试题
    asp:TextBox 的ReadOnly属性 造成后台无法取到值
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/13938389.html
Copyright © 2011-2022 走看看