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日历[测试通过]
Mar 27 PHP
PHP $_SERVER详解
Jan 16 PHP
php模块memcache和memcached区别分析
Jun 14 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
PHP微框架Dispatch简介
Jun 12 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
Sep 22 PHP
PHP7下协程的实现方法详解
Dec 17 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
PHP 面向对象实现代码
2009/11/11 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
JQuery遍历DOM节点的方法
2015/06/11 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
继续学习javascript闭包
2015/12/03 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
经典C++面试题一
2016/11/06 面试题
火锅店的活动方案
2014/08/15 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
MySQL七种JOIN类型小结
2021/10/24 MySQL