美文网首页Redis
Redis第1️⃣3️⃣课 BitMap 位图

Redis第1️⃣3️⃣课 BitMap 位图

作者: 小超_8b2f | 来源:发表于2019-04-30 20:53 被阅读3次
    位图
    命令 解释
    getbit ~ key offset
    获取指定偏移量位置的位值
    setbit ~ key offset value
    给位图指定索引设置值
    bigcount ~ key [start end]
    获取位图指定范围位值为1的个数
    start和end单位是字节,不指定start和end就获取全部
    bitop ~ operation destkey key [key ...]
    做多个BitMap的and(交集)、or(并集)、not(非)、xor(异或) 操作并将结果保存在destkey中
    bitpos ~ key targetBit [start] [end]
    计算位图指定范围(start到end,单位为字节,如果不指定就是获取全部)第一个偏移量对应的值等于targetBit的位置

    字母big的位图,对应上图

    127.0.0.1:6379> set hello big
    OK
    127.0.0.1:6379> getbit hello 0
    (integer) 0
    127.0.0.1:6379> getbit hello 1
    (integer) 1
    127.0.0.1:6379> getbit hello 2
    (integer) 1
    127.0.0.1:6379> getbit hello 3
    (integer) 0
    127.0.0.1:6379> getbit hello 4
    (integer) 0
    127.0.0.1:6379> getbit hello 5
    (integer) 0
    127.0.0.1:6379> getbit hello 6
    (integer) 1
    127.0.0.1:6379> bitcount hello
    (integer) 12
    127.0.0.1:6379> setbit hello 7 1
    (integer) 0
    127.0.0.1:6379> get hello
    "cig"
    127.0.0.1:6379> bitcount hello
    (integer) 13
    
    127.0.0.1:6379> setbit user:2019-04-30 0 1
    (integer) 0  #返回结果是之前对应这个位的值
    127.0.0.1:6379> setbit user:2019-04-30 5 1
    (integer) 0
    127.0.0.1:6379> setbit user:2019-04-30 11 1
    (integer) 0
    127.0.0.1:6379> setbit user:2019-04-30 15 1
    (integer) 0
    127.0.0.1:6379> setbit user:2019-04-30 19 1
    (integer) 0
    127.0.0.1:6379> bitcount user:2019-04-30
    (integer) 5
    127.0.0.1:6379> get user:2019-04-30
    "\x84\x11\x10"
    
    127.0.0.1:6379> bitpos hello 1
    (integer) 1
    127.0.0.1:6379> bitpos hello 0 4 9
    (integer) -1
    127.0.0.1:6379> bitpos hello 0
    (integer) 0
    127.0.0.1:6379> bitpos hello 0 4 20
    (integer) -1
    127.0.0.1:6379> bitpos hello 0 1 4
    (integer) 8
    
    示例程序设置效果
    设置位图会触发补零操作

    所以最好不要在一个很小的位图上往后很多位上设置位图。这不得不补很多零

    127.0.0.1:6379> setbit user:2019-04-30 50 1
    (integer) 0
    127.0.0.1:6379> bitcount user:2019-04-30
    (integer) 6
    
    设置后面的位,前面相应补零 大用户量在线用户统计 少用户量时的对比
    使用经验
    1. type = string ,最大512M(2.xx版本)。目前是5.xx版本,最大未知
    2. 注意setbit 的偏移量,可能有较大耗时
    3. 位图不是绝对好,应该在合理的场合使用合理的计数

    相关文章

      网友评论

        本文标题:Redis第1️⃣3️⃣课 BitMap 位图

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