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下过滤HTML代码的函数
Dec 10 PHP
php zend 相对路径问题
Jan 12 PHP
实用PHP会员权限控制实现原理分析
May 29 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
5款适合PHP使用的HTML编辑器推荐
Jul 03 PHP
PHP开发APP端微信支付功能
Feb 17 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 PHP
PHP中数组转换为SimpleXML教程
Jan 27 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
php 调用远程url的六种方法小结
2009/11/02 PHP
解析thinkphp基本配置 convention.php
2013/06/18 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
AngularJS 与百度地图的结合实例
2016/10/20 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
几种响应式文字详解
2017/05/19 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
python PyTorch预训练示例
2018/02/11 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
自我鉴定范文200字
2013/10/02 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
小学教师师德整改措施
2014/09/29 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers