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 相关文章推荐
用libtemplate实现静态网页生成
Oct 09 PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 PHP
php正则表达式(regar expression)
Sep 10 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
php网站判断用户是否是手机访问的方法
Nov 01 PHP
php操作redis缓存方法分享
Jun 03 PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
php pdo连接数据库操作示例
Nov 18 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与SQL注入攻击[二]
2007/04/17 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python使用爬虫猜密码
2016/02/19 Python
Python提取网页中超链接的方法
2016/09/18 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
使用python生成目录树
2018/03/29 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
自荐书范文
2013/12/08 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
师德师风自查总结
2014/10/14 职场文书
岳庙导游词
2015/02/04 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
Python快速实现一键抠图功能的全过程
2021/06/29 Python
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android