首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Resque与Redis一起执行后台任务有什么意义?

使用Resque与Redis一起执行后台任务有什么意义?
EN

Stack Overflow用户
提问于 2011-07-08 20:28:32
回答 1查看 482关注 0票数 1

如果把呼叫外部服务(比如发送电子邮件)之类的任务发送给后台任务和工作人员,以便从主应用程序中删除耗时的任务,我不明白为什么使用Resque和Redis一起去是一个好主意。Redis本身不是一个外部服务吗?在这种情况下,这不是要实现这个目的吗?因为在Redis上存储队列的键/值将是不可预测的,而且可能会耗费时间。

编辑

我感到困惑的原因是,我没有设置任何工作人员,队列是由Redis上的Resque生成的(显然,由于没有工作人员,这些操作正在等待)。因此,我假设它意味着初始的Redis去写是由主线程完成的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-09 01:37:27

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

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

现在,对于Resque,这些操作都是在后台完成的。当主线程执行时,它会将作业添加到Resque。主线程将执行。Resque现在将按照接收命令的顺序执行这些命令。现在,执行可能需要2.5秒,但这2.5秒并没有阻塞主线程。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6630137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档