素材牛VIP会员
PHP用什么来快速消费队列
 yj***23  分类:PHP代码  人气:1688  回帖:15  发布于6年前 收藏

应用场景

一、群发业务

这些业务的特点就是不是很要求实时性,可以保证统计,支持查看进度,可将不成功的任务重扔回队列,又可以手动剔除一些重复不正常的任务。

  • 短信群发

  • 邮件群发

  • 群PUSH

二、数据迁移业务

因为数据库的特性不能一库走天下,所以在用户发布内容时,能够进行较为实时的数据迁移

  • 要求可用性高

  • 处理最好能够并发(因为现在业务小所以是最好

  • 实时性强(如果实时性不强,用户发布动作,一个页面跳转的网络I/O时间内会对用户造成库困扰)

根据目前未知的热心回答简单总结

一、 crontab + php

  • 定时能力不强,虽然可以多个crontab 跑,PHP自己做定时器

  • 另外涉及到锁,要不有些任务是不是会重复跑了

    二、php-resque https://github.com/chrisboulton/php-resque

  • 是否是支持持REDIS?

  • 在框架内例如YII2使用方便吗?

为什么没有人提到swoole workman?

不管怎么样,我是都点了赞 …………

讨论这个帖子(15)垃圾回帖将一律封号处理……

Lv5 码农
龙***6 UI设计师 6年前#1

php脚本,生命周期设置为10min
crontab计划5分钟调用一次,这样可以保证有2个任务一直在工作

===========================================
针对题主第一个问题,做任务队列,可以放到redis的队列中,这是单线程的,保证不会有两个进程获得一个任务

Lv6 码匠
不***) 软件测试工程师 6年前#2

用 supervisor 或者daemonise 做守护,结合mq,一般的业务不成问题

Lv5 码农
la***gt JS工程师 6年前#3

laravel解决这个问题用了两个办法:

  1. crontab,每一分钟跑一次。

  2. 队列(redis+supervisord)。,实际上就是supervisord不断起进程去消费,消费完了进程停止,supervisor检测到于是重新起进程。适用于小并发。

总结起来无非:死循环/触发。

Lv5 码农
Ja***jz 其它 6年前#4

crontab

Lv7 码师
yu***01 产品经理 6年前#5

甭想了用php resque吧,基于redis的,够快!

上一页12下一页
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取