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

2018-06-28 14:26:03 +08:00
 streamo
前提:无法用业务 ID 或其他方法判断这个消息是否在业务端被消费过,也就是说这个消息如果被消费过多次,仅仅会造成结果错误,但逻辑上是合法的,所以只能通过消息 ID 跟去重表内项比对判断是否消费过该消息。

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

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

所以根据业务需求给消息 ID 设置一个 TTL, 或者是直接用 Redis 等缓存机制来保证在合理的时间范围内不会重复消费
streamo
2018-06-28 16:19:44 +08:00
@lihongjie0209 嗯,跟我想的差不多,就是一个带过期键支持的 LRU cache。
lihongjie0209
2018-06-28 16:28:44 +08:00
@streamo #2 我觉能能运行的都很优雅, 至于优化, 需要的时候再说

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/466564

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX