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 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
实时抓取YAHOO股票报价的代码
Oct 09 PHP
php动态实现表格跨行跨列实现代码
Nov 06 PHP
php读取excel文件的简单实例
Aug 26 PHP
YII中assets的使用示例
Jul 31 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
PHP GD库相关图像生成和处理函数小结
Sep 30 PHP
PHP文件与目录操作示例
Dec 24 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
PHP _construct()函数讲解
Feb 03 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 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函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
PHP钩子实现方法解析
2019/05/21 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
如何利用python生成MD5并去重
2020/12/07 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
2014年工商所工作总结
2014/12/09 职场文书
一年级小学生评语大全
2014/12/25 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
女性健康知识讲座通知
2015/04/23 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP