将Resque与Redis To Go一起用于后台任务有什么意义

vin*_*nce 1 ruby-on-rails heroku redis

如果将诸如调用外部服务(例如发送电子邮件)之类的任务发送到后台任务和工作人员从主应用程序中删除耗时的任务这一点,我不明白为什么使用Resis with Redis To Go是一个好主意.是不是Redis To Go本身就是一个外部服务,在这种情况下不会破坏目的,因为在Redis To Go上存储队列的键/值将是不可预测的并且本身可能耗费时间?

编辑

我感到困惑的原因是我没有设置任何工作人员并且Redis To Go上的Resque生成了队列(显然操作正在等待因为没有工人).所以我认为这意味着最初的Redis To Go写入是由主线程完成的.

Col*_*lum 5

使用后台工作程序的主要原因是主线程与运行任务无关.使用Resque,它允许在主线程外执行任务.这有很多原因.最大的问题是,慢速操作不会导致主线程挂起,在请求完成之前阻止所有功能.

Redis to Go只是一个远程Redis数据库.在主线程中,执行修改500个键的操作.在本地数据库上,根本不需要时间,但除非您使用多命令,否则必须将每个命令发送到服务器并等待响应.好吧,如果它有一些命令没什么大不了的,但是在远程服务器上需要花费相当多的时间来做500次.这是一些示例数字.在本地进行操作需要5ms.在这里,不需要使用Resque,因为作业可以在本地快速执行.现在,使用Redis to Go,我们必须走出局域网.现在,每个操作需要5ms(0.005秒).如果我们做了500个,那么.005*500就是2.5秒.现在,这是用于查询数据库的2.5秒,并且主要线程被锁定,直到请求完成.(注意,这些数字是完全随机的...它们可能更高或更低)

现在,使用Resque,这些操作在后台完成.当您的主线程执行时,它会将作业添加到Resque.并且主线程将执行.Resque现在将按接收顺序执行命令.现在,执行可能需要2.5秒,但那些2.5秒没有占用主线程.