队列在编程中的实际应用(php)


Posted in PHP onSeptember 04, 2010

一:队列的概念、数据结构

队列(Queue)是运算受到限制的一种线性表。只允许在表的一端进行插入,而在另一端进行删除元素的线性表。队尾(rear)是允许插入的一端。队头(front)是允许删除的一端。空队列是不含元素的空表。

假设有个队列Q=(a1,a2,…,an),则a1为队头元素,an为队尾元素。元素入队的次序为a1,a2,…,an,而出队的次序为a1,a2,…,an。可见队列的操作是按照先进先出的原则进行的。

队列在编程中的实际应用(php)

其他详细的介绍请在网上搜索很多资料。

二:PHP的队列

在PHP中队列以数组的形式表现。数组中的第一个元素作为队头,最后一个元素作为队尾,这样就可以操作这个队列了。

队列在编程中的实际应用(php)

结果就是

队列在编程中的实际应用(php)

网上有很多封装好的类,可以直接使用。

array_push:将一个或多个单元压入数组的末尾(入栈)

array_unshift:在数组开头插入一个或多个单元

array_pop:将数组最后一个单元弹出(出栈)

array_shift:将数组开头的单元移出数组

三:Ruby Starling

Starling是一个支持MemCache协议的轻量级持久化服务器。Starling是让创建网络访问队列或者多个队列异常简单,也就是说多点和多台机器间的异步工作进程。它是著名微博客网站Twitter开发用来处理大量的队列消息,以及保持服务的响应。Starling已经在生产环境中使用,不仅是Twitter在使用,FiveRuns同样在使用。FiveRuns甚至还根据自己的应用做了改进。

Starling和Memcache使用的是一个协议只是端口不一样。Starling使用的是22122端口,Memcache使用的是11211端口。

Ruby tar xzvf ruby-1.9.1-p0.tar.gz cd ruby-1.9.1-p0 ./configure --prefix=/usr/local/huiyangruby make make install   Gem tar -zxvf rubygems-1.3.6.tgz cd rubygems-1.3.6 ruby setup.rb   Starling gem install memcache-client starling starling starling & //后台执行 starling_top //查看PS信息

接下来你就可以使用队列做自己的事情啦。Starling和Memcache用法一样,两者配合处理更佳。

队列在编程中的实际应用(php)

使用Memcache::addServer可以建立一个memcache连接池。他不同于connect与pconnect他是在有请求是才连接,无则端口连接。

Memcache::connect -- 打开一个到Memcache的连接。

Memcache::pconnect -- 打开一个到Memcache的长连接。

Memcache::close -- 关闭一个Memcache的连接。

Memcache::set -- 保存数据到Memcache服务器上。

Memcache::get -- 提取一个保存在Memcache服务器上的数据。

Memcache::replace -- 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)。

Memcache::delete -- 从Memcache服务器上删除一个保存的项目。

Memcache::flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)。

Memcache::getStats -- 获取当前Memcache服务器运行的状态。

四:张宴作品HTTPSQS

HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。

有兴趣的可以看看网址:http://blog.s135.com/httpsqs_1_2/

五:队列的应用

队列可以很好地异步处理数据传送和存储,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。(文/侯惠阳 PHPer.yang)

PHP 相关文章推荐
PHP安全编程之加密功能
Oct 09 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
Jun 28 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
php 实现进制相互转换
Apr 07 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
Yii框架实现对数据库的CURD操作示例
Sep 03 PHP
在Laravel 的 Blade 模版中实现定义变量
Oct 14 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
php生成随机密码的三种方法小结
Sep 04 #PHP
PHP安全技术之 实现php基本安全
Sep 04 #PHP
小文件php+SQLite存储方案
Sep 04 #PHP
PHP中文件上传的一个问题
Sep 04 #PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 #PHP
PHP开发需要注意的安全问题
Sep 01 #PHP
php中函数的形参与实参的问题说明
Sep 01 #PHP
You might like
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
vuex的使用和简易实现
2021/01/07 Vue.js
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
Python中的元类编程入门指引
2015/04/15 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
军训生自我鉴定范文
2013/12/27 职场文书
校园公益广告语
2014/03/13 职场文书
法人身份证明书
2014/10/08 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python