分析PHP隊列是什麼

來源:文萃谷 2.09W

PHP具有非常強大的功能,所有的CGI的功能PHP都能實現,而且支持幾乎所有流行的數據庫以及操作系統。最重要的是PHP可以用C、C++進行程序的擴展!今天,小編為大家搜索整理了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-&gt

;_queue) < $num) {

$num = count($this->_queue);

}

return array_slice($this->_queue, 0, $num);

}

/**

* 消毀隊列

*/

function destroy()

{

$this->cache->remove($this->queuecachename);

}

}

熱門標籤