`

php 队列

    博客分类:
  • 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-redis队列+php-redis扩展

    首先,PHP队列是PHP应用程序中用于处理大量任务的一种机制。它遵循先进先出(FIFO)原则,即最早进入队列的任务最先被处理。队列的使用场景广泛,如邮件发送、定时任务、批量数据处理等,通过队列可以避免一次性处理...

    plupload+bootstrap+php队列上传oss

    "plupload+bootstrap+php队列上传oss"是一个综合性的技术方案,它涉及到多个技术组件,包括前端的文件上传库plupload、界面框架bootstrap,以及后端的PHP处理和阿里云的对象存储服务OSS(Object Storage Service)。...

    PHP队列用法实例

    PHP队列用法的知识点涵盖了队列的基本概念、使用场景、实现原理以及具体的PHP代码示例。以下是对这些知识点的详细阐述: 一、队列的基本概念 队列是一种先进先出(First In First Out, FIFO)的数据结构,它类似于...

    PHP队列原理及基于队列的写文件案例

    以下是一个简单的PHP队列实现: ```php $array = array('PHP', 'JAVA'); array_push($array, 'PYTHON'); // 入队列 array_shift($array); // 出队列 ``` 除了基本的队列,还有双端队列(Deque),它允许在队列的两...

    PHP中利用redis实现消息队列处理高并发请求思路详解.rar

    本篇将详细介绍如何在PHP中利用Redis这一高效内存数据结构存储服务来构建消息队列,以处理高并发请求。 首先,理解消息队列的基本概念。消息队列是一种异步处理机制,它允许应用程序将任务放入队列,而无需等待其...

    php实现队列操作的类.zip

    在PHP中,队列是一种非常重要的数据结构,用于存储一组按照特定顺序处理的数据。队列遵循先进先出(FIFO)原则,即最早进入队列的元素也将是最早被处理的。在本案例中,我们有一个名为`queueOp.class.php`的PHP类,...

    PHP队列系统

    (主要提供思路) 简单的队列系统执行队列端 队列服务器采用HTTPSQS 管理: 帮助:php Kernel/bin/queue.php help 启动所有队列:php Kernel/bin/queue.php start...停止指定队列:php Kernel/bin/queue.php stop xxxx

    php消息队列框架httpsqs

    HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。源代码不超过700行,整个软件不超过900KB...

    php 双向队列类

    php 双向队列。支持限定队列长度,输入受限,输出受限,及输出必须与输入同端几种设置。 Func: public frontAdd 前端入列 public frontRemove 前端出列 public rearAdd 后端入列 pulbic rearRemove 后端出列 public...

    详解PHP队列的实现

    队列是一种特殊的线性表,它只允许在表的前端,可以称之为front,进行删除操作;而在表的后端,可以称之为rear进行插入操作。...* php队列算法 * * Create On 2010-6-4 * Author Been * QQ:28144375

    PHP实现双向队列

    在IT领域,队列是一种常见的数据结构,尤其在编程语言如PHP中,它被广泛用于处理数据的有序处理和流程控制。本篇文章将深入探讨如何在PHP中实现双向队列,以及两种不同的实现方法。 首先,理解双向队列的概念至关...

    php实现的memcached队列类

    而PHP实现的Memcached队列类则是在这一基础上进行的扩展,它允许开发者创建并管理一个基于Memcached的队列,以支持并发操作和特定的队列策略。 首先,这个类提供了多进程并发写入和读取的能力。这意味着多个PHP进程...

    PHP消息队列服务php-queue.zip

    php-queue 是 PHP开发的磁盘存储消息队列服务,基于leveldb和swoole ,在4核机器上处理能力可以达到2.5W/s 。leveldb: ...

    php购物车和生成订单队列demo

    在PHP开发中,购物车和订单队列是两个非常关键的模块,它们是电商系统的核心组成部分。本示例Demo旨在展示如何使用PHP实现一个简单的购物车功能以及如何生成订单队列,以处理订单流程。 首先,让我们深入理解购物车...

    使用phpfpm作为一个简单的内置异步队列

    标题中的“使用phpfpm作为一个简单的内置异步队列”是指利用PHP的FastCGI Process Manager(php-fpm)来实现一种轻量级的异步处理机制,这通常是为了处理那些耗时较长或者非阻塞的任务,比如发送邮件、文件上传、...

    php封装Memcache队列缓存类

    一个php封装Memcache队列缓存类,memcache客户端连接,队列是否可更新,缓存队列生命周期时间,当客户断开连接,允许继续执行,取消脚本执行延时上限,当取出元素时,改变队列首的数值,当添加元素时,改变队列尾的数值...

Global site tag (gtag.js) - Google Analytics