【发布时间】:2014-03-20 20:00:41
【问题描述】:
我有一个相当复杂的缓存和失效设置,如果特定数据集发生更改,我需要重新计算大量数据。
基本上,如果一个特定条目发生变化,这可能会创建多达 15 个重新计算内容的工作。 当这些作业正在运行时,可能会发生另一个主要条目发生变化。再次创造了几个工作岗位。 (这可能同时发生)
我需要实现的是在作业运行后汇总结果。并且只进行一次这种聚合可能是有意义的。
所以我需要做的是运行一个作业,在所有其他作业完成后只运行一次。
(顺便说一句:我正在取消 BCCResqueuBundle)
【问题讨论】:
-
听起来不错,但您的问题是什么?
-
如何实现这一点。如何在所有其他人都完成后安排工作。
-
在我看来,您可以将引用计数器与锁结合使用。锁:有 1 个或多个异步工作者正在运行,或者聚合作业正在运行。参考计数器告诉异步工作人员的 nr。聚合器仅在 ref 计数器为零时才声明锁。
-
好的,我想我明白了,但在异步作业上设置一个计数器可能就足够了,在一项作业完成后,我减少计数器,然后检查仍在运行的作业的数量,如果没有其他人在运行,我会安排聚合作业。我不确定我是否需要锁。
-
听起来不错。如果聚合作业仍然忙时不存在启动工作线程的风险,则不需要锁定。顺便说一句,我没有将此作为答案发布,因为我不知道 100% 确定这是否是您所要求的。你的问题不是很详细。请稍后关闭问题和/或发布您自己的答案(您接受)。
标签: php symfony redis php-resque