zoukankan      html  css  js  c++  java
  • 【bitmap】Redis数据结构bitmap

    一.背景

      这几天,项目中引入了基于redisson的布隆过滤器,redisson底层使用的redis数据结构为bitmap,

    借此机会,留下一篇总结;

    二.bitMap的原理

      bitmap就是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态。

      一个bit的值,或者是0,或者是1;也就是说一个bit能存储的最多信息是2。

    三.bitMap的常用API

      1.设置值

    setbit key offset value

      例如:

    setbit online 1001 1

      2.获取值,返回

    getbit key offset

      例如:

    getbit online 1006

      3.获取位图指定范围为1的个数,start和end指定的是字节的个数,而不是位数组下标

    bitcount key [start end]

      例如

    bitcount online 

    四.案例bitMap统计用户在线人数

      状态值,用户在线用1表示,用户离线用0表示

      setbit online userid 状态值

      例如

      1.设置用户在线状态

        setbit online 1001 1,表示设置id为1001的用户在线

        setbit online 1002 1,表示设置id为1002的用户在线

        setbit online 1003 0,表示设置id为1003的用户离线

      2.获取用户在线状态

        getbit online 1001 ,表示获取id为1001的用户在线状态

        getbit online 1002 ,表示获取id为1002的用户在线状态

      3.统计在线用户的人数

        bitcount online 

      

    五.性能

      1.以第四部分的案例为例,如果用户id长度为4,则用户id最多占用的比特位的数量为9999,大约即1250个字节,1KB多一点

      2.如果活跃用户在百万级别,使用Redis BitMap很划算。

      3.如果活跃用户很少,而用户id都是10位以上的int。那就很浪费内存了,还不如使用set集合,然后求交集就可以了。

    参考链接:

      http://redisdoc.com/bitmap/index.html

      https://blog.csdn.net/u011957758/article/details/74783347

      https://www.freesion.com/article/8176271491/

      

  • 相关阅读:
    【leetcode】153. 寻找旋转排序数组中的最小值
    vue下载网络图片
    前端开发项目细节
    如何在手机上预览本地h5页面
    react拖拽添加新组件
    js拖入并复制和拖动改变位置和改变大小
    dva model
    postMessage跨源通信
    react-router
    event.stopPropagation()和event.preventDefault(),return false的区别
  • 原文地址:https://www.cnblogs.com/july-sunny/p/15206936.html
Copyright © 2011-2022 走看看