Redis队列,如何实现一个用户一个队列,队列里边的任务依次执行,不能并发

黄粱一梦

问题描述

我需要处理用户的一系列数据处理,后边的任务依赖于前边的执行结果,所以要求不能存在并发,(一个调用发送成功后,再调用下一个事件消费)。

用户的数量是不断增加的,这种情况应该怎么实现呢

238 3 0
3个回答

TM

之前好像看你发过帖子,你这样涉及了动态增加消费者了,后期服务器也顶不住吧。可以去大群咨询一下

  • yingzi1990 2026-02-28

    结合event来,比如用户的事件A-->B-->C-->D顺序执行,执行完A事件发个B事件依次类推

ichynul

队列随用户不断增加怕不好弄,只能开尽可能多的进程,然后把用户分配到不同的进程去。

$threadTotal = $worker->count; //总进程数量 n
$threadId = $worker->id; //当前进程编号 0 ~ (n-1)

if ($data['user_id'] % $threadTotal != $threadId) {
    return;
}
//处理
  • TM 2026-02-26

    他这样后期用户越多进程越多,内存感觉要爆炸了

  • ichynul 2026-02-26

    进程数量不变是配置里面的count
    他的需求就两个点:
    1、进程要多:因为用户多。
    2、不能并发:只用用一个用户的任务始终分配到同一编号的进程,就不存在并发。

  • TM 2026-02-26

    对啊,后面用户越多不是要继续增加进程吗

小天天天天

要解耦,不要从用户层面拆分队列,而是从任务层面拆分队列,

执行A成功->投递B->执行B成功->投递C->执行C成功->投递D->执行D,

任何用户只需要投递A任务,比如:{"uid":1,"task":"xxx"},剩下的BCD就会自动的按照顺执行,

如果将来用户量大了,你只需要增加ABCD的消费者即可

每一个用户一个队列的方案是不合理的.

  • 暂无评论
🔝