为什么我们在工人中发送id而不是整个对象?

时间:2012-01-19 10:17:18

标签: ruby ruby-on-rails-3 resque

在Ruby中,实践是在worker中发送id而不是object。不是那种CPU消耗过程,因为我们必须从数据库中再次检索Object。

2 个答案:

答案 0 :(得分:4)

有几个原因:

  1. 节省队列空间,同时转移时间(app => queue,queue => workers)。

  2. 通常从数据库中获取新对象更容易(而不是从队列中检索缓存副本)

  3. Resque.enqueue的参数必须是JSON可序列化的。复杂对象并不总是可以序列化。

答案 1 :(得分:0)

如果你仔细想想,原因很明显:

  • 您的对象可能会在行动排队和处理之间发生变化,通常您不需要过时的对象。
  • 运输的id比整个对象轻了很多,你需要在json / yaml或其他任何东西中序列化它。
  • 如果你需要关联,问题就更糟了:)

但最终它取决于您的应用程序,如果您只需要一些信息,您可以直接将它们发送给您的工作人员,而无需使用完整的模型。