如何使用 Redis Pub/Sub 在多个工作人员之间映射工作?

发布于 2024-10-30 23:08:27 字数 134 浏览 2 评论 0原文

我有一个 Redis 客户端,需要在 3 个工作人员之间拆分/映射一项工作。假设该工作由 3 个任务组成。我想以这样的方式映射它们,其中 3 个并行运行,并且该作业仅花费(大约)1/3 的执行时间。 Redis本身有什么办法可以做到这一点吗?我没有找到。

I have a Redis client which needs to split/map a job among say 3 workers. Suppose the job consists of 3 tasks. I want to map them in such a way that 3 of them runs in parallel and the job takes only (approx) 1/3 of execution time. Is there any way to do this with Redis itself? I didn't find any.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

路还长,别太狂 2024-11-06 23:08:27

您可以使用redis创建任务队列。例如,您可以让主进程将任务推送到任务队列,然后让工作进程不断轮询任务队列以查找新工作。

Master伪代码:

while(1)
  if some_condition
    redis.rpush "tasks", "task1"
    redis.rpush "tasks", "task2"
    redis.rpush "tasks", "task3"
  end
  sleep 5
end

Worker伪代码:

while(1)
  # blpop blocks until there is an element in "tasks" 
  task = redis.blpop("tasks", 0)[1]
  perform task
end

You can use redis to create a task queue. For example, you can have a master process pushing tasks to a task queue and then have workers polling the task queue constantly for new work.

Master psuedo code:

while(1)
  if some_condition
    redis.rpush "tasks", "task1"
    redis.rpush "tasks", "task2"
    redis.rpush "tasks", "task3"
  end
  sleep 5
end

Worker pseudo code:

while(1)
  # blpop blocks until there is an element in "tasks" 
  task = redis.blpop("tasks", 0)[1]
  perform task
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文