队列在编程中的实际应用(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中GET变量的使用
Oct 09 PHP
在数据量大(超过10万)的情况下
Jan 15 PHP
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
php socket方式提交的post详解
Jul 19 PHP
php动态生成JavaScript代码
Mar 09 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
PHP 5.3新增魔术方法__invoke概述
Jul 23 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
php远程下载类分享
Apr 13 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
php微信公众号开发之二级菜单
Oct 20 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
PHP SEO优化之URL优化方法
2011/04/21 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
Python中Class类用法实例分析
2015/11/12 Python
Python字符串切片操作知识详解
2016/03/28 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
python 怎样进行内存管理
2020/11/10 Python
中级会计职业生涯规划书
2014/03/01 职场文书
质量承诺书范文
2014/03/27 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
通知函格式范文
2015/04/27 职场文书
中秋节晚会开场白
2015/05/29 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL