V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Gaussen
V2EX  ›  Redis

关于 redis bitmap 的疑问

  •  
  •   Gaussen · 2021-12-30 15:56:38 +08:00 · 2748 次点击
    这是一个创建于 1059 天前的主题,其中的信息可能已经有所发展或是发生改变。

    虽然 redis 使用了很久,但是很惭愧的是一直以来都只是使用了 string 类型,而且也没有特别看过 redis 的知识,最近正好在看,然后对 bitmap 这个类型有一些疑问。

    网上有很多举出 bitmap 的使用场景的博客,大多是统计日活,用户在线数等场景。

    不过有一些疑问,如果仅仅只是统计登录数似乎用 bitmap 确实很不错,但是如果要统计具体某些用户登录了,就变得很不方便了。

    例如:setbit userOnlineCount20211230 1 1 ... 如果仅仅统计今天有多少用户登录过,似乎一个 bitcount userOnlineCount20211230 就足够了,但是若想知道今天到底有哪些用户登录过,就无法直接实现了。能想到的似乎只能循环 getbit userOnlineCount20211230 offset ,但这样做太离谱了。

    所以如果是用 bitmap 的情况下,是不是就无法实现上述的需求?即在能统计出数量的前提下,还能不使用遍历的做法实现查出所有登录用户的 id 。

    10 条回复    2023-11-06 11:37:41 +08:00
    leesam1024
        1
    leesam1024  
       2021-12-30 17:24:30 +08:00
    bitmap 底层就是 string 。
    可以直接 get 。返回 string 后,自己在内存里遍历一下就行
    klakekent
        2
    klakekent  
       2021-12-30 17:57:33 +08:00
    那如果用户 id 是 string 比如 uuid 这样的 是不是 bitmap 就不适用了?
    MidGap
        3
    MidGap  
       2021-12-30 20:10:58 +08:00
    如果你的用户 id 很长,你有算过 bitmap 占多少内存吗
    des
        4
    des  
       2021-12-30 21:40:26 +08:00 via iPhone
    如果只需要个数字,而且不需要非常精确 HyperLogLog 就够用了
    bigwhite2021
        5
    bigwhite2021  
       2021-12-31 01:29:54 +08:00 via iPhone
    是否可以维护一个 id 到 id 序号的映射,然后将 id 序号转成 bitmap ,每次取的时候先取 bitmap ,然后映射回真实 id ?
    WriteCloser
        6
    WriteCloser  
       2021-12-31 10:34:56 +08:00
    不能
    mreasonyang
        7
    mreasonyang  
       2021-12-31 13:29:42 +08:00
    这个场景在现在这个年代更适合用 flink 聚合成维表,目标数据源可以是 Doris/Druid 这类 OLAP 组件
    liuhuan475
        8
    liuhuan475  
       2021-12-31 16:05:04 +08:00
    @leesam1024 能 get 出来算我输
    leesam1024
        9
    leesam1024  
       2023-11-05 10:30:52 +08:00
    @liuhuan475 你试试再说
    liuhuan475
        10
    liuhuan475  
       2023-11-06 11:37:41 +08:00
    @leesam1024 bitmap 最大存储是 512M ,大小是根据最大索相关,比如说在第 1 个索引上设置 true ,占用内存大小是 1;在 1 百万设置索引位置设置 true ,占用内存大小就是 1 百万。如果你的最大索引足够大,占用的内存也足够大。get 请求会把 redis 带宽打满的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2735 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:59 · PVG 14:59 · LAX 22:59 · JFK 01:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.