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

[求助 + 讨论] im 场景下, 如何快速查询出一个时间窗口内没有发过消息的会话呢?

  •  
  •   BBCCBB · 2020-09-01 10:10:13 +08:00 · 1286 次点击
    这是一个创建于 1544 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    -- 会话
    session {
        id,
        status(结束, 未结束),
        time
    }
    
    -- 会话的消息
    msg {
        id,
        session_id
        time
    }
    

    现在有很多进行中的会话, 有啥好办法能快速查出最近一段时间窗口内没有发过消息的 session 呢?

    7 条回复    2020-09-01 19:39:19 +08:00
    xuanbg
        1
    xuanbg  
       2020-09-01 10:20:09 +08:00
    session.time
    BBCCBB
        2
    BBCCBB  
    OP
       2020-09-01 10:23:51 +08:00
    @xuanbg session.time 的话我需要每发一个消息更新一下 session 上的一个时间字段吧?
    xuanbg
        3
    xuanbg  
       2020-09-01 10:26:50 +08:00
    @BBCCBB 会话本来就要更新最后一条消息的数据的呀。不然会话列表里面你怎么排序?如果要预览最新消息的话,你就做不到了呀。
    BBCCBB
        4
    BBCCBB  
    OP
       2020-09-01 10:41:43 +08:00
    @xuanbg 没问题老铁, 这是一个较好的方案, 但每次写 msg 都得更新一下 session 记录的数据, 对我们来说稍微有点重, 期待其他的办法, 感谢
    BBCCBB
        5
    BBCCBB  
    OP
       2020-09-01 13:32:32 +08:00
    append
    cloudzhou
        6
    cloudzhou  
       2020-09-01 19:23:43 +08:00
    @BBCCBB 就是需要一个 session.time 来记录,只是并不需要放在数据库,用 redis 然后最终同步到数据库,sorted set 很满足这种 *一个时间窗口 xxx* 的需求
    BBCCBB
        7
    BBCCBB  
    OP
       2020-09-01 19:39:19 +08:00
    @cloudzhou 这个的确是一个好办法, 但我们现在业务因为各种问题 redis 操作已经非常重了,害, 哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1079 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:09 · PVG 03:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.