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
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
Views rows style模板重写代码
May 16 PHP
PHP多个版本的分析解释
Jul 21 PHP
浅析PHP Socket技术
Aug 02 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
详解php协程知识点
Sep 21 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
PHP如何使用JWT做Api接口身份认证的实现
Feb 03 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 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
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
JavaScript代码复用模式实例分析
2012/12/02 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
Linux的文件类型
2012/03/07 面试题
美术教师自我鉴定
2014/02/12 职场文书
法定代表人授权委托书
2014/04/04 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
国庆节标语大全
2014/10/08 职场文书
小学班主任自我评价
2015/03/11 职场文书
初三英语教学反思
2016/02/15 职场文书