隊列在編程中的實際應(yīng)用(php)
一:隊列的概念、數(shù)據(jù)結(jié)構(gòu)
隊列(Queue)是運算受到限制的一種線性表。只允許在表的一端進行插入,而在另一端進行刪除元素的線性表。隊尾(rear)是允許插入的一端。隊頭(front)是允許刪除的一端??贞犃惺遣缓氐目毡怼?/P>
假設(shè)有個隊列Q=(a1,a2,…,an),則a1為隊頭元素,an為隊尾元素。元素入隊的次序為a1,a2,…,an,而出隊的次序為a1,a2,…,an??梢婈犃械牟僮魇前凑障冗M先出的原則進行的。

其他詳細的介紹請在網(wǎng)上搜索很多資料。
二:PHP的隊列
在PHP中隊列以數(shù)組的形式表現(xiàn)。數(shù)組中的第一個元素作為隊頭,最后一個元素作為隊尾,這樣就可以操作這個隊列了。

結(jié)果就是

網(wǎng)上有很多封裝好的類,可以直接使用。
array_push:將一個或多個單元壓入數(shù)組的末尾(入棧)
array_unshift:在數(shù)組開頭插入一個或多個單元
array_pop:將數(shù)組最后一個單元彈出(出棧)
array_shift:將數(shù)組開頭的單元移出數(shù)組
三:Ruby Starling
Starling是一個支持MemCache協(xié)議的輕量級持久化服務(wù)器。Starling是讓創(chuàng)建網(wǎng)絡(luò)訪問隊列或者多個隊列異常簡單,也就是說多點和多臺機器間的異步工作進程。它是著名微博客網(wǎng)站Twitter開發(fā)用來處理大量的隊列消息,以及保持服務(wù)的響應(yīng)。Starling已經(jīng)在生產(chǎn)環(huán)境中使用,不僅是Twitter在使用,F(xiàn)iveRuns同樣在使用。FiveRuns甚至還根據(jù)自己的應(yīng)用做了改進。
Starling和Memcache使用的是一個協(xié)議只是端口不一樣。Starling使用的是22122端口,Memcache使用的是11211端口。
|
Ruby
tar xzvf ruby-1.9.1-p0.tar.gz
cd ruby-1.9.1-p0
./configure --prefix=/usr/local/huiyangruby
make
make install
Gem
tar -zxvf rubygems-1.3.6.tgz
cd rubygems-1.3.6
ruby setup.rb
Starling
gem install memcache-client starling
starling
starling & //后臺執(zhí)行
starling_top //查看PS信息 |
接下來你就可以使用隊列做自己的事情啦。Starling和Memcache用法一樣,兩者配合處理更佳。

使用Memcache::addServer可以建立一個memcache連接池。他不同于connect與pconnect他是在有請求是才連接,無則端口連接。
Memcache::connect -- 打開一個到Memcache的連接。
Memcache::pconnect -- 打開一個到Memcache的長連接。
Memcache::close -- 關(guān)閉一個Memcache的連接。
Memcache::set -- 保存數(shù)據(jù)到Memcache服務(wù)器上。
Memcache::get -- 提取一個保存在Memcache服務(wù)器上的數(shù)據(jù)。
Memcache::replace -- 替換一個已經(jīng)存在Memcache服務(wù)器上的項目(功能類似Memcache::set)。
Memcache::delete -- 從Memcache服務(wù)器上刪除一個保存的項目。
Memcache::flush -- 刷新所有Memcache服務(wù)器上保存的項目(類似于刪除所有的保存的項目)。
Memcache::getStats -- 獲取當前Memcache服務(wù)器運行的狀態(tài)。
四:張宴作品HTTPSQS
HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 協(xié)議的輕量級開源簡單消息隊列服務(wù),使用 Tokyo Cabinet 的 B+Tree Key/Value 數(shù)據(jù)庫來做數(shù)據(jù)的持久化存儲。
有興趣的可以看看網(wǎng)址:http://blog.s135.com/httpsqs_1_2/
五:隊列的應(yīng)用
隊列可以很好地異步處理數(shù)據(jù)傳送和存儲,當你頻繁地向數(shù)據(jù)庫中插入數(shù)據(jù)、頻繁地向搜索引擎提交數(shù)據(jù),就可采取隊列來異步插入。另外,還可以將較慢的處理邏輯、有并發(fā)數(shù)量限制的處理邏輯,通過消息隊列放在后臺處理,例如FLV視頻轉(zhuǎn)換、發(fā)送手機短信、發(fā)送電子郵件等。(文/侯惠陽 PHPer.yang)
- PHP基于數(shù)組實現(xiàn)的堆棧和隊列功能示例
- 關(guān)于PHP堆棧與列隊的學(xué)習(xí)
- php線性表的入棧與出棧實例分析
- PHP基于堆棧實現(xiàn)的高級計算器功能示例
- PHP實現(xiàn)的棧數(shù)據(jù)結(jié)構(gòu)示例【入棧、出棧、遍歷棧】
- PHP實現(xiàn)基于棧的后綴表達式求值功能
- PHP使用數(shù)組實現(xiàn)隊列
- php實現(xiàn)的雙向隊列類實例
- php基于雙向循環(huán)隊列實現(xiàn)歷史記錄的前進后退等功能
- PHP實現(xiàn)的鏈式隊列結(jié)構(gòu)示例
- PHP使用兩個棧實現(xiàn)隊列功能的方法
相關(guān)文章
WordPress中用于獲取搜索表單的PHP函數(shù)使用解析
這篇文章主要介紹了WordPress中用于獲取搜索表單的PHP函數(shù)使用解析,即get_search_form函數(shù)的基本用法,需要的朋友可以參考下2016-01-01
PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計》之二 對象之間搬移特性
承接上文PHP 雜談《重構(gòu)-改善既有代碼的設(shè)計》之 重新組織你的函數(shù) ,繼續(xù)說重構(gòu)方面的內(nèi)容2012-04-04
詳解php 使用Callable Closure強制指定回調(diào)類型
這篇文章主要介紹了詳解php 使用Callable Closure強制指定回調(diào)類型的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10
用PHP偽造referer突破網(wǎng)盤禁止外連的代碼
一般的國內(nèi)網(wǎng)盤為控制流量,都會禁止網(wǎng)盤內(nèi)的文件外鏈。點網(wǎng)盤里文件的鏈接一般都會轉(zhuǎn)到專門的下載頁面,必須從這個頁面才能下載文件。2008-06-06
PHP 開發(fā)環(huán)境配置(測試開發(fā)環(huán)境)
PHP發(fā)開環(huán)境配置(測試開發(fā)環(huán)境),測試環(huán)境是否配置的正確。2010-04-04
編寫PHP腳本使WordPress的主題支持Widget側(cè)邊欄
這篇文章主要介紹了編寫PHP腳本使WordPress的主題支持Widget側(cè)邊欄的方法,這里以一列兩列的側(cè)邊欄為例可以以此類推更多列的寫法,需要的朋友可以參考下2015-12-12
PHP中strtr與str_replace函數(shù)運行性能簡單測試示例
這篇文章主要介紹了PHP中strtr與str_replace函數(shù)運行性能簡單測試,結(jié)合具體實例形式對比分析了PHP中strtr與str_replace函數(shù)的測試運行效率,需要的朋友可以參考下2019-06-06

