首页 / PHP / redis-PHP用什么来快速消费队列
redis-PHP用什么来快速消费队列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了redis-PHP用什么来快速消费队列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2987字,纯文字阅读大概需要5分钟。
内容图文
![redis-PHP用什么来快速消费队列](/upload/InfoBanner/zyjiaocheng/242/771009f90a0b429cb6e0ee39f3509580.jpg)
应用场景
一、群发业务
这些业务的特点就是不是很要求实时性,可以保证统计,支持查看进度,可将不成功的任务重扔回队列,又可以手动剔除一些重复不正常的任务。
短信群发
邮件群发
群PUSH
二、数据迁移业务
因为数据库的特性不能一库走天下,所以在用户发布内容时,能够进行较为实时的数据迁移
要求可用性高
处理最好能够并发(因为现在业务小所以是最好
实时性强(如果实时性不强,用户发布动作,一个页面跳转的网络I/O时间内会对用户造成库困扰)
根据目前未知的热心回答简单总结
一、 crontab + php
定时能力不强,虽然可以多个crontab 跑,PHP自己做定时器
-
另外涉及到锁,要不有些任务是不是会重复跑了
二、php-resque https://github.com/chrisboulton/php-resque
是否是支持持REDIS?
在框架内例如YII2使用方便吗?
为什么没有人提到swoole workman?
不管怎么样,我是都点了赞 …………
回复内容:
应用场景
一、群发业务
这些业务的特点就是不是很要求实时性,可以保证统计,支持查看进度,可将不成功的任务重扔回队列,又可以手动剔除一些重复不正常的任务。
短信群发
邮件群发
群PUSH
二、数据迁移业务
因为数据库的特性不能一库走天下,所以在用户发布内容时,能够进行较为实时的数据迁移
要求可用性高
处理最好能够并发(因为现在业务小所以是最好
实时性强(如果实时性不强,用户发布动作,一个页面跳转的网络I/O时间内会对用户造成库困扰)
根据目前未知的热心回答简单总结
一、 crontab + php
定时能力不强,虽然可以多个crontab 跑,PHP自己做定时器
-
另外涉及到锁,要不有些任务是不是会重复跑了
二、php-resque https://github.com/chrisboulton/php-resque
是否是支持持REDIS?
在框架内例如YII2使用方便吗?
为什么没有人提到swoole workman?
不管怎么样,我是都点了赞 …………
php-resque,自带dashborad可以查看任务执行情况
php-resque-scheduler 支持延时执行任务,比如多少小时之后
ruby版的resque貌似还支持cron,但是php版的resque是不支持的。
甭想了用php resque吧,基于redis的,够快!
脚本,不断的消费
crontab
php脚本,生命周期设置为10min
crontab计划5分钟调用一次,这样可以保证有2个任务一直在工作
===========================================
针对题主第一个问题,做任务队列,可以放到redis的队列中,这是单线程的,保证不会有两个进程获得一个任务
用队列,可以看看php_resque。
crontab也可以,但是频率比较固定不太好控制。
写脚本循环的话需要开一个守护进程,不然进程挂了都不知道,不推荐。
可以试试php的多线程:pthreads
其实使用一个PHP 脚本一直去获取MQ 中的数据,并对数据进行消费。然后使用 supervisor 或者daemonise 做守护也是可以的。不过PHP 脚本还是有一个最长运行时间比较好,这样可以定时的释放一些没有释放的内存,然后由守护进程重启
laravel解决这个问题用了两个办法:
crontab,每一分钟跑一次。
队列(redis+supervisord)。,实际上就是supervisord不断起进程去消费,消费完了进程停止,supervisor检测到于是重新起进程。适用于小并发。
总结起来无非:死循环/触发。
while(true){
//如果队列空了 sleep几秒
//处理过程
//处理完一条usleep几毫秒,别把服务器拖垮
}
守护进程这一块可以使用swoole来搞就可以了。
使用swoole即可
我的做法是用Workman
去执行一个死循环,当然用swoole
也是很好的
简单对于消费队列常见的做法基本差不多了
配置crontab,每分钟都运行,运用一个shell,
此shell要判断当前有没有消费进程在,shell中时是死循环
例如
if ( 'test.php'进程存在 ) {
exit()
}
while( true ){
sleep 1
php test.php
}
用 supervisor 或者daemonise 做守护,结合mq,一般的业务不成问题
内容总结
以上是互联网集市为您收集整理的redis-PHP用什么来快速消费队列全部内容,希望文章能够帮你解决redis-PHP用什么来快速消费队列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。