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
文件上传的实现
Oct 09 PHP
PHP分页显示制作详细讲解
Dec 05 PHP
ThinkPHP3.1查询语言详解
Jun 19 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
php实现通用的信用卡验证类
Mar 24 PHP
thinkPHP中分页用法实例分析
Dec 26 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 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设置images目录不充许http访问的方法
2016/11/01 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
JavaScript的document对象和window对象详解
2010/12/30 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
Python的lambda匿名函数的简单介绍
2013/04/25 Python
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
用Python写冒泡排序代码
2016/04/12 Python
python中range()与xrange()用法分析
2016/09/21 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
python动态规划算法实例详解
2020/11/22 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
毕业生护理专业个人求职信范文
2014/01/04 职场文书
小小的船教学反思
2014/02/21 职场文书
毕业生面试求职信
2014/06/23 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
通知函的格式
2015/04/27 职场文书
北京爱情故事观后感
2015/06/12 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
话题作文之成长
2019/12/09 职场文书