求解任务队列的原理?
首先说一下我理想中的情况。比如一个请求被处理的时候,我发现它很费时,于是对它进行一番描述后再序列化,并存到
某个公共的地方
。同时有一个守护进程
在监听那个公共的地方
,一但发现有动静就从公共的地方
取一条数据出来,反序列化后根据逻辑再调用某些脚本来处理这些费时的任务。不知道这么设想队列的工作方式有没有问题呢?
如果是这样的话,
gearman
或者disque
等,扮演的是上述哪些角色呢?能推荐一些适合PHP使用的吗,谢谢
回复内容:
最近遇到了一些问题,服务器对某个处理太耗时导致网页反应速度很慢,听说了任务队列。谷歌了一下,基本上都是讲某个队列怎么用,但其实并没有一个太清晰的概念,能请各位讲解一下吗?
首先说一下我理想中的情况。比如一个请求被处理的时候,我发现它很费时,于是对它进行一番描述后再序列化,并存到某个公共的地方
。同时有一个守护进程
在监听那个公共的地方
,一但发现有动静就从公共的地方
取一条数据出来,反序列化后根据逻辑再调用某些脚本来处理这些费时的任务。
不知道这么设想队列的工作方式有没有问题呢?
如果是这样的话,gearman
或者disque
等,扮演的是上述哪些角色呢?
能推荐一些适合PHP使用的吗,谢谢
队列本质上是为了解耦而存在的.
如你所说的,服务器对某个处理太耗时导致网页反应速度很.这个本身如果存在可以拆分的部分,展示逻辑和后续的处理逻辑可以分开,就可以采用队列的方案来进行计算.
举例来说,阅读邮件之后,会有一个将未读标记为已读的.在你打开邮件的同时,这个状态的更换可以不用立即处理,丢到队列里去,先把邮件内容取出来做展示,然后后续有个类似守护进程的不断的去队列里消费(或者说不断的问队列,有没有新的消息啊),取出这个将XX邮件未读状态更改为已读状态的事件,然后做处理.
php队列,推荐使用 httpsqs
使用方法可以去看张宴的博客
,
使用方法大概就是吧比较耗时
的任务丢到httpsqs
里面,丢进去,就代表成功,然后马上返回,告诉用户处理成功
。
然后后台起一个计划任务
,每秒执行一次
,往httpsqs里面取出数据,然后进行比较耗时的操作,取到数据为空,就代表队列已经空了
博客地址
memcacheq
上一篇: 改善Oracle的索引_MySQL