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检测网页是否被百度收录的函数代码
Oct 09 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
Jun 12 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
Mar 14 PHP
php使用curl实现简单模拟提交表单功能
May 15 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
PHP单元测试配置与使用方法详解
Dec 27 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 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 中文和编码判断代码
2010/05/16 PHP
php伪静态之APACHE篇
2014/06/02 PHP
PHP的全局错误处理详解
2016/04/25 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python读写Json涉及到中文的处理方法
2016/09/12 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
python使用fork实现守护进程的方法
2017/11/16 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
Python range与enumerate函数区别解析
2020/02/28 Python
广告设计专业自荐信范文
2013/11/14 职场文书
电大本科自我鉴定
2014/02/05 职场文书
市场营销战略计划书
2014/05/06 职场文书
区级文明单位申报材料
2014/05/15 职场文书
创先争优一句话承诺
2014/05/29 职场文书
趣味运动会策划方案
2014/06/02 职场文书
护士医德考评自我评价
2015/03/03 职场文书
秋菊打官司观后感
2015/06/03 职场文书
汽车车尾标语大全
2015/08/11 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
使用scrapy实现增量式爬取方式
2022/06/21 Python