美文网首页
Redis 位图 bitmap的使用

Redis 位图 bitmap的使用

作者: 一个头发茂密的程序员 | 来源:发表于2021-09-22 13:31 被阅读0次

    bitCount 解决时间窗口统计用户登录天数

    SETBIT key offset value
    summary: Sets or clears the bit at offset in the string value stored at key
    since: 2.2.0
    group: string

    BITCOUNT key [start end]
    summary: Count set bits in a string
    since: 2.6.0
    group: string

    bitcount 是用来统计二进制位中1的个数的

    由此我们可以通过bitmap 来存储用户登录天数,1代表用户登录,设一年有400天的话,一个字节是8个二进制位,400天用50个字节就可以存储一年一个用户的登录信息了。
    所以我们就可以这样来存储:

    setbit  zhangsan 1 1
    setbit  zhangsan 2 1
    setbit zhangsan 364 1
    /*
    用 1 来表示该天登录了
    第几天:      1  2  3  。。。。。
    zhangsan: 0  1  1 。。。。
    */
    bitcount zhangsan 0 -1
    /*
    统计张三当年登录天数
    */
    bitcount zhansan -2 -1
    /*
    统计张三最后两周登录天数
    */
    getbit zhangsan  364
    /*
    如果要精确的进行统计查看第364天是否登录了
    */
    /*
    如果对天精准存储 可以用下面的方式
    */
    

    key: 用户名/用户ID value:该天是否登录

    setbit 的offset 指的是二进制中的索引,getbit也是

    bitcount 中的 start 和 end 指的是字节的索引

    bitop 检测 随机窗口内活跃用户的统计

    BITOP operation destkey key [key ...]
    summary: Perform bitwise operations between strings
    since: 2.6.0
    group: string

    可以用key来存储日期,用1来存储某一用户该天是否登录

            zhangsan   lisi       wangwu       ..........
    20210918  0         1           1                ..........
    20210919  0         1           0                ..........
    20210920  1         1           0                ..........
    /*
    统计20210918和20210919和 20210920三天连续登录
    */
    bitop and andkey 20210918 20210919 20210920
    bitcount andkey
    /*
    统计连续三天登录人数
    */
    
    ··
    key:日期   value: 每一个用户名/用户ID 对应当天是否登录

    相关文章

      网友评论

          本文标题:Redis 位图 bitmap的使用

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