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 相关文章推荐
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
php cookie使用方法学习笔记分享
Nov 07 PHP
php 使用array函数实现分页
Feb 13 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 PHP
php数组指针函数功能及用法示例
Feb 11 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学习之整理字符串
2011/04/17 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
php探针不显示内存解决方法
2019/09/17 PHP
PDO实现学生管理系统
2020/03/21 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
python 对xml解析的示例
2021/02/27 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
保送生自荐信范文
2013/10/06 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
孝女彩金观后感
2015/06/10 职场文书
党员心得体会范文2016
2016/01/23 职场文书
python pygame入门教程
2021/06/01 Python
mysql 获取相邻数据项
2022/05/11 MySQL