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和ACCESS写聊天室(二)
Oct 09 PHP
优化PHP代码的53条建议
Mar 27 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
浅谈discuz密码加密的方式
May 22 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
Jun 27 PHP
php curl 获取https请求的2种方法
Apr 27 PHP
php邮件发送的两种方式
Apr 28 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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将access数据库转换到mysql数据库的方法
2014/12/24 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
React实现todolist功能
2020/12/28 Javascript
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
解决python删除文件的权限错误问题
2018/04/24 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Python中按键来获取指定的值
2019/03/02 Python
pandas的排序和排名的具体使用
2019/07/31 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
Python如何实现的二分查找算法
2020/05/27 Python
Python ellipsis 的用法详解
2020/11/20 Python
python3处理word文档实例分析
2020/12/01 Python
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers