PHP学习_PHP技术_PHP网站建设_PHP程序员专注于PHP技术研究及学习

Adophper » 编程开发 » php队列,消息队列

php队列,消息队列

此文被围观25日期: 2017-08-11 分类 : 编程开发  标签:  ···

什么是队列,是先进先出的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端进行插入操作,在前端进行删除操作。

PHP实现队列原理


看看各语言实现队列的方法:

各语言实现队列的方法

什么情况下会用了队列呢,并发请求又要保证事务的完整性的时候就会用到队列,当然不排除使用其它更好的方法。 

队列还可以用于减轻数据库服务器压力,我们可以将不是即时数据放入到队列中,在数据库空闲的时候或者间隔一段时间后执行。比如发送邮件消息服务,没有必要即时的执行,在没有使用队列的时候sql语句是这样的


PHP实现队列:第一个元素作为队头,最后一个元素作为队尾

<?php
/**
 * 队列就是这么简单
 * 
 */
$array =  array('PHP', 'JAVA');
 
array_push($array, 'PYTHON'); //入队列
 
array_shift($array); //出队列


什么是双端队列(或双向队列)Deque,全名double-ended queue? 

即元素可以在队列的任意一段入队或出队,如果我们把这些方法叫做insertLeft()和insertRight(),以及removeLeft()和removeRight()。如果严格禁止调用insertLeft()和removeLeft()方法(或禁用右段的操作),双端队列功能就和栈一样。禁止调用insertLeft()和removeRight()(或相反的另一对方法),它的功能就和队列一样了。双端队列与栈或队列相比,是一种多用途的数据结构。

参考资料:http://blog.csdn.net/woshihaiyong168/article/details/52846205

<?php/*
 * PHP实现队列操作类
 */class queueOp {
    /*
     * 队尾入队
     * Return:处理之后队列的元素个数
     */
    public function tailEnqueue($arr,$val) {
        return array_push($arr,$val);
    }    /*
     * 队尾出队
     * Return:最后一个值,如果数组为空或不是数组,返回NULL
     * Comment:仅用于双向队列
     */
    public function tailDequeue($arr) {
        return array_pop($arr);
    }    /*
     * 队首入队
     * Return:处理之后队列的元素个数
     * Comment:仅用于双向队列
     */
    public function headEnqueue($arr,$val) {
        return array_unshift($arr,$val);
    }    /*
     * 队首出队
     * Return:移出的值,如果参数不是数组或数组为空,返回NULL
     */
    public function headDequeue($arr) {
        return array_shift($arr);
    }    /*
     * 队列长度
     * Return:返回队列的长度(元素个数)
     */
    public function queueLength($arr) {
        return count($arr);
    }    /*
     * 获取队首元素
     * Return:第一个元素的值,如果队列为空则返回FALSE
     */
    public function queueHead($arr) {
        return reset($arr);
    }    /*
     * 获取队尾元素
     * Return:最后一个元素的值,如果队列为空则返回FALSE
     */
    public function queueTail($arr) {
        return end($arr);
    }    /*
     * 清空队列
     * Return:无返回值
     */
    public function clearQueue($arr) {
        unset($arr);
    }
}


栈(stack)与队列相似,都是操作受到了限制的表,不同的是栈实行的是先入后出的原则,先进入的元素会被压到栈底,后进入的元素位于栈顶,栈只会对栈顶一端的元素进行操作,栈的操作包括入栈和出栈,都是从栈顶端进行操作。 
这里写图片描述 
PHP实现栈与实现队列极其相似,了解了栈的原理之后,只需要将队列部份的类实现代码去除队列头部的插入与删除操作,即可成为栈的操作类,只需将队尾换成栈顶,队首换成栈底即可。

参考地址:http://blog.csdn.net/ljl890705/article/details/50380291


PHP和MySQL实现消息队列

参考地址:http://www.cnblogs.com/chunguang/p/5757304.html


PHP的轻量消息队列php-resque使用说明

参考资料:http://avnpc.com/pages/run-background-task-by-php-resque



本站使用ThinkPHP框架开发读图网主题,目前托管在阿里云,图片由读图网提供. 蜀ICP备12031064号

Copyright © 2011-2017adophper.com All Rights Reserved.