PHP队列用法实例


Posted in PHP onNovember 05, 2014

本文实例讲述了PHP队列用法。分享给大家供大家参考。具体分析如下:

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

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

队列还可以用于减轻数据库服务器压力,我们可以将不是即时数据放入到队列中,在数据库空闲的时候或者间隔一段时间后执行。比如访问计数器,没有必要即时的执行访问增加的Sql,在没有使用队列的时候sql语句是这样的,假设有5个人访问:

update table1 set count=count+1 where id=1
update table1 set count=count+1 where id=1
update table1 set count=count+1 where id=1
update table1 set count=count+1 where id=1
update table1 set count=count+1 where id=1

而使用队列这后就可以这样:
update table1 set count=count+5 where id=1

减少sql请求次数,从而达到减轻服务器压力的效果, 当然访问量不是很大网站根本没有这个必要。
下面一个队列类:

/**

* 队列

*

* @author jaclon

*

*/ 

class Queue 

{ 

private $_queue = array(); 

protected $cache = null; 

protected $queuecachename; 

 

/**

* 构造方法

* @param string $queuename 队列名称

*/ 

function __construct($queuename) 

{ 

 

$this->cache =& Cache::instance(); 

$this->queuecachename = 'queue_' . $queuename; 

 

$result = $this->cache->get($this->queuecachename); 

if (is_array($result)) { 

$this->_queue = $result; 

} 

} 

 

/**

* 将一个单元单元放入队列末尾

* @param mixed $value

*/ 

function enQueue($value) 

{ 

$this->_queue[] = $value; 

$this->cache->set($this->queuecachename, $this->_queue); 

 

return $this; 

} 

 

/**

* 将队列开头的一个或多个单元移出

* @param int $num

*/ 

function sliceQueue($num = 1) 

{ 

if (count($this->_queue) < $num) { 

$num = count($this->_queue); 

} 

$output = array_splice($this->_queue, 0, $num); 

$this->cache->set($this->queuecachename, $this->_queue); 

 

return $output; 

} 

 

/**

* 将队列开头的单元移出队列

*/ 

function deQueue() 

{ 

$entry = array_shift($this->_queue); 

$this->cache->set($this->queuecachename, $this->_queue); 

 

return $entry; 

} 

 

/**

* 返回队列长度

*/ 

function size() 

{ 

return count($this->_queue); 

} 

 

/**

* 返回队列中的第一个单元

*/ 

function peek() 

{ 

return $this->_queue[0]; 

} 

 

/**

* 返回队列中的一个或多个单元

* @param int $num

*/ 

function peeks($num) 

{ 

if (count($this->_queue) < $num) { 

$num = count($this->_queue); 

} 

return array_slice($this->_queue, 0, $num); 

} 

 

/**

* 消毁队列

*/ 

function destroy() 

{ 

$this->cache->remove($this->queuecachename); 

} 

}

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
php中处理模拟rewrite 效果
Dec 09 PHP
php &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
发一个php简单的伪原创程序,配合商城采集用的
Oct 12 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
分割GBK中文遭遇乱码的解决方法
Aug 09 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
Apr 09 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 #PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 #PHP
PHP操作MySQL事务实例
Nov 05 #PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 #PHP
PHP中使用虚代理实现延迟加载技术
Nov 05 #PHP
PHP实现获取域名的方法小结
Nov 05 #PHP
php调用shell的方法
Nov 05 #PHP
You might like
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
基本DOM节点操作
2017/01/17 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
python导入坐标点的具体操作
2019/05/10 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
JPA的特点
2014/10/25 面试题
销售辞职报告范文
2014/01/12 职场文书
学校联谊活动方案
2014/02/15 职场文书
静心口服夜广告词
2014/03/20 职场文书
材料物理专业求职信
2014/09/01 职场文书
2015年超市工作总结
2015/04/09 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
Java中的继承、多态以及封装
2022/04/11 Java/Android
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby