队列里到底保存的是每一个要发邮件的对象(用户),还是保存发邮件的这个任务?

来源:2-3 php mysql实现队列发送邮件

阿布罗狄

2016-10-15 10:43

我有一个疑问,队列里到底保存的是每一个要发邮件的对象(用户),还是保存发邮件的这个任务?项目中大家是怎么用的?

写回答 关注

3回答

  • 稻草人1949
    2016-10-15 18:12:24
    已采纳

    看什么需求了,可以在队列里只保存一个任务名称加上这个任务所需要的数据,具体实现可以定义一个与这个名称相对应的任务实现函数或者是类,取出队列就可以根据任务名称来执行任务了,这样一个好处就是不仅仅局限与发送邮件任务,还可以实现其他一些任务,当然这也带来了一个问题,就是内存优化问题,如何保证正确的执行完这些任务内存释放掉,课程中是任务全部取出并执行完毕后脚本就执行完毕,也就是php进程关闭,内存自然就释放掉了,那也是局限与当有邮件任务新增时会触发并启动这个发送邮件的进程,而大多数任务队列是没有触发启动进程的,,都是以后台守护进程存在的,由管理员来手动或者其他方式触发,反正就是不会在业务中做触发的,不管是有什么任务添加进来,都可以自动的去执行,不需要触发,没有触发也就是这个进程是不能关闭的,不能关闭就代表内存如果不合理的释放就会造成这个守护进程的内存一直增加,迟早是会把计算机的内存消耗一空的,而具体实现思路呢可以参考php多进程编程了,需要扩展pcntl,且只能UNIX系统内核环境下支持,也就是要想php使用多线程,就需要在linux系统环境下,可以参考php-resque的实现思路,


    阿布罗狄

    非常感谢:)

    2016-10-17 12:14:19

    共 1 条回复 >

  • 慕粉1513029639
    2016-12-14 19:16:16

    pcntl是多进程,使用这种解决并发的队列问题最好不要用php解决,php不是干这个的

  • 似是流年
    2016-10-15 17:35:59

    保存的是需要发送的邮件

php+mysql 模拟队列发送邮件

使用队列方式异步发送邮件防页面卡死,学完就知道强大之处

16209 学习 · 31 问题

查看课程

相似问题