将对象传递给Resque作业是否安全?例如:将对象传递给Resque作业是否安全?
Resque.enqueue(Foobar, @foo, @bar)
代替:
Resque.enqueue(Foobar, @foo.id, @bar.id)
任何缺点如果我通过在对象(一个或多个)?
将对象传递给Resque作业是否安全?例如:将对象传递给Resque作业是否安全?
Resque.enqueue(Foobar, @foo, @bar)
代替:
Resque.enqueue(Foobar, @foo.id, @bar.id)
任何缺点如果我通过在对象(一个或多个)?
Resque GitHub的页面说(https://github.com/defunkt/resque)
...您的作业必须只接受可以JSON编码参数。
此外,您应该考虑一个效果:您传递的对象被复制。比方说,它是一个数据库中的记录。如果稍后,当作业将执行时,该对象在数据库中被更改,作业将不会注意到,它将在其自己的副本上运行。根据您的要求,这可能是期望的行为,或者可能不是。
如果您改为传递该对象的id
,则可以在作业中检索最新版本。
除了传递与id相比较的大对象之外,我能看到的主要缺点是对象很可能会不同步,因为很明显,作业可以稍后执行。
你绝对应该在大多数情况下使用ID。
将完整对象传递给resis可能会导致Redis的负载过重以及系列化开销。这对你来说可能不是问题,但你必须牢记这一点。
我个人更喜欢参加ID。
我在做什么是Marshal.dump(object)
并在另一边,我做了Marshal.restore(object)
的作品就像一个魅力和它是快速...
如:
@chart = chart_factory.build(chart_config)
marshal_dump = Marshal.dump(@chart)
Resque.enqueue(ChartsWorker, marshal_dump, url)