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

关于 redis bitmap 的疑问

  •  
  •   Gaussen · 138 天前 · 1606 次点击
    这是一个创建于 138 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    8 条回复    2021-12-31 16:05:04 +08:00
    leesam1024
        1
    leesam1024  
       138 天前
    bitmap 底层就是 string 。
    可以直接 get 。返回 string 后,自己在内存里遍历一下就行
    klakekent
        2
    klakekent  
       138 天前
    那如果用户 id 是 string 比如 uuid 这样的 是不是 bitmap 就不适用了?
    MidGap
        3
    MidGap  
       138 天前
    如果你的用户 id 很长,你有算过 bitmap 占多少内存吗
    des
        4
    des  
       138 天前 via iPhone
    如果只需要个数字,而且不需要非常精确 HyperLogLog 就够用了
    bigwhite2021
        5
    bigwhite2021  
       138 天前 via iPhone
    是否可以维护一个 id 到 id 序号的映射,然后将 id 序号转成 bitmap ,每次取的时候先取 bitmap ,然后映射回真实 id ?
    WriteCloser
        6
    WriteCloser  
       137 天前
    不能
    mreasonyang
        7
    mreasonyang  
       137 天前
    这个场景在现在这个年代更适合用 flink 聚合成维表,目标数据源可以是 Doris/Druid 这类 OLAP 组件
    liuhuan475
        8
    liuhuan475  
       137 天前
    @leesam1024 能 get 出来算我输
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1122 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:49 · PVG 05:49 · LAX 14:49 · JFK 17:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.