2017-02-27 61 views
0

假设您需要发送简报。 你有一个存储在列表或集合中的电子邮件的主列表(无论有意义)。如何使用源列表可靠地处理项目列表

List/Set 
"[email protected]" 
"[email protected]" 

您可能会使用同一个列表发送多个通讯,因此您无法修改原始主列表。

在伪代码,我想的是这样的:

  1. GET X元素,推到 “in_progress_123”
  2. 当消费者处理完毕(成功或失败),推到列出 “completed_123”
  3. 继续#1,直到列表相同
  4. ,如果我的服务器崩溃并重新启动,它可以只是继续回到#1

我需要一个主列表和一个“in_progress”列表,因为可以使用相同主列表发送多个新闻简报。

(注:我会处理固定不合格项目的情况,但现在并不重要)

这可能与Redis的?

也许我需要列表和有序集合的组合,但我不知道如何做到这一点。我喜欢RPOP​​LPUSH,但这是列表,我需要一种方法来比较列表,但这是成套的。

回答

1

比较列表是昂贵且低效的。而是考虑一个不同的工作流程,在这个工作流程中,您只需复制“主”列表并通过将其与工作人员一起清空来清空它。

+0

一个列表可能有100或25K的电子邮件。如何有效地复制列表? – Blankman

+0

复制将始终与长度成正比,但这是我知道的最快方法:https://gist.github.com/itamarhaber/d30b3c40a72a07f23c70 –

+0

00_copy_key.lua是最快的方法吗?我没有看到那个基准...... – Blankman