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

用去重表实现幂等性,怎么优雅地回收表内不再使用的项?

  •  
  •   streamo · 2018-06-28 14:26:03 +08:00 · 2528 次点击
    这是一个创建于 2341 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前提:无法用业务 ID 或其他方法判断这个消息是否在业务端被消费过,也就是说这个消息如果被消费过多次,仅仅会造成结果错误,但逻辑上是合法的,所以只能通过消息 ID 跟去重表内项比对判断是否消费过该消息。

    请问各位有什么优雅的方案实现表内项回收吗,我能想到的是用容量足够大的 LRU。
    3 条回复    2018-06-28 16:28:44 +08:00
    lihongjie0209
        1
    lihongjie0209  
       2018-06-28 14:42:28 +08:00
    消息最起码的属性有 ID 和 Timestemp

    消息只在一定的时间范围内有意义, 极端一点, 你不可能收到一条一年前的消息还接着处理.

    所以根据业务需求给消息 ID 设置一个 TTL, 或者是直接用 Redis 等缓存机制来保证在合理的时间范围内不会重复消费
    streamo
        2
    streamo  
    OP
       2018-06-28 16:19:44 +08:00
    @lihongjie0209 嗯,跟我想的差不多,就是一个带过期键支持的 LRU cache。
    lihongjie0209
        3
    lihongjie0209  
       2018-06-28 16:28:44 +08:00
    @streamo #2 我觉能能运行的都很优雅, 至于优化, 需要的时候再说
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   875 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:33 · PVG 05:33 · LAX 13:33 · JFK 16:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.