扫码关注官方订阅号
做一个定时任务处理数据,每次处理10个,如果处理的太多就会出现问题怎么做动态定时任务,查询待处理数据条数,如果大于10个,定时下一分钟执行,依次循环
走同样的路,发现不同的人生
以前用redis+python搞过类似的东东,这个思路redis+PHP也可以做。其实很简单:
首先要有个redis服务器
假设一个任务队列就叫job_queue,类型使用list
job_queue
list
起一个PHP脚本定时往里面加任务,比如$redis->lpush('job_queue', "xxx"); ,数据建议序列化为JSON字符串
$redis->lpush('job_queue', "xxx");
起10个PHP脚本来执行任务,可以采用会阻塞blpop来取任务并执行:dealYourJob($redis->blpop('job_queue')); -- 注意反序列化数据
dealYourJob($redis->blpop('job_queue'));
O了
至于【3】中的如何定时,既然你是用linux,建议直接用系统的crontab即可。【4】中的脚本想并行多少个随时都可以增加或减少。
除了redis外,MySQL也可以用来搞这个队列,就是SQL语句写起来麻烦些。
redis本身是单线程的,lpush和blpop都能保证原子性,比用MySQL要省心。
lpush
blpop
sleep等待?
求大神告知怎么做或指明其他第三方
页面一加载就触发一个js方法,这个方法里面用ajax请求处理的那个后台方法,再用js定时器http://jun1986.iteye.com/blog...这是定时器的用法
如果单纯用PHP做,只能说PHP本身不擅长做这种事。不像JAVA在虚拟机里面开多几个线程就能解决。如果没有接触过计划任务,可以尝试一下,linux的crontab。另外要是根据不同的返回数量来决定不同的操作间隔,可以用计划任务+缓存来实现。
希望对你有帮助!
用linux的crontab
0.先看看下面的链接
linux定时运行命令脚本——crontab
1.vi /etc/crontab
*/1 * * * * root php yourPhpFile.php
2.每一分钟yourPhpFile.php脚本就会去查询并处理你的任务
总结:此处的crontab任务每一分钟执行一次,只是提供下大概思想所以不够高效,题主可以安排和设置出更为合理的定时任务
希望对你有所帮助
你可以在程序里面设计好对应的规则逻辑。然后通过crontab命令执行。参考
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
以前用redis+python搞过类似的东东,这个思路redis+PHP也可以做。其实很简单:
首先要有个redis服务器
假设一个任务队列就叫
job_queue,类型使用list起一个PHP脚本定时往里面加任务,比如
$redis->lpush('job_queue', "xxx");,数据建议序列化为JSON字符串起10个PHP脚本来执行任务,可以采用会阻塞blpop来取任务并执行:
dealYourJob($redis->blpop('job_queue'));-- 注意反序列化数据O了
至于【3】中的如何定时,既然你是用linux,建议直接用系统的crontab即可。
【4】中的脚本想并行多少个随时都可以增加或减少。
除了redis外,MySQL也可以用来搞这个队列,就是SQL语句写起来麻烦些。
redis本身是单线程的,
lpush和blpop都能保证原子性,比用MySQL要省心。sleep等待?
求大神告知怎么做或指明其他第三方
页面一加载就触发一个js方法,这个方法里面用ajax请求处理的那个后台方法,再用js定时器http://jun1986.iteye.com/blog...这是定时器的用法
如果单纯用PHP做,只能说PHP本身不擅长做这种事。不像JAVA在虚拟机里面开多几个线程就能解决。
如果没有接触过计划任务,可以尝试一下,linux的crontab。
另外要是根据不同的返回数量来决定不同的操作间隔,可以用计划任务+缓存来实现。
希望对你有帮助!
用linux的crontab
0.先看看下面的链接
linux定时运行命令脚本——crontab
1.vi /etc/crontab
2.每一分钟yourPhpFile.php脚本就会去查询并处理你的任务
总结:此处的crontab任务每一分钟执行一次,只是提供下大概思想所以不够高效,题主可以安排和设置出更为合理的定时任务
希望对你有所帮助
你可以在程序里面设计好对应的规则逻辑。然后通过crontab命令执行。参考