佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > PHP隊(duì)列原理及基于隊(duì)列的寫(xiě)文件案例

PHP隊(duì)列原理及基于隊(duì)列的寫(xiě)文件案例

熱門(mén)標(biāo)簽:Mysql連接數(shù)設(shè)置 Linux服務(wù)器 團(tuán)購(gòu)網(wǎng)站 服務(wù)器配置 銀行業(yè)務(wù) 電子圍欄 科大訊飛語(yǔ)音識(shí)別系統(tǒng) 阿里云

本文實(shí)例講述了PHP隊(duì)列原理及基于隊(duì)列的寫(xiě)文件案例。分享給大家供大家參考,具體如下:

隊(duì)列是一種線性表,按照先進(jìn)先出的原則進(jìn)行的:

入隊(duì):

出隊(duì):

PHP實(shí)現(xiàn)隊(duì)列:第一個(gè)元素作為隊(duì)頭,最后一個(gè)元素作為隊(duì)尾

?php
/**
 * 隊(duì)列就是這么簡(jiǎn)單
 *
 * @link
 */
$array = array('PHP', 'JAVA');
array_push($array, 'PYTHON'); //入隊(duì)列
array_shift($array); //出隊(duì)列

什么是雙端隊(duì)列(或雙向隊(duì)列)Deque,全名double-ended queue?

即元素可以在隊(duì)列的任意一段入隊(duì)或出隊(duì),如果我們把這些方法叫做insertLeft()和insertRight(),以及removeLeft()和removeRight()。如果嚴(yán)格禁止調(diào)用insertLeft()和removeLeft()方法(或禁用右段的操作),雙端隊(duì)列功能就和棧一樣。禁止調(diào)用insertLeft()和removeRight()(或相反的另一對(duì)方法),它的功能就和隊(duì)列一樣了。雙端隊(duì)列與?;蜿?duì)列相比,是一種多用途的數(shù)據(jù)結(jié)構(gòu)。

PHP實(shí)現(xiàn)雙端隊(duì)列

?php
class Deque
{
  public $queue = array();
  /**(尾部)入隊(duì) **/
  public function addLast($value)
  {
    return array_push($this->queue,$value);
  }
  /**(尾部)出隊(duì)**/
  public function removeLast()
  {
    return array_pop($this->queue);
  }
  /**(頭部)入隊(duì)**/
  public function addFirst($value)
  {
    return array_unshift($this->queue,$value);
  }
  /**(頭部)出隊(duì)**/
  public function removeFirst()
  {
    return array_shift($this->queue);
  }
  /**清空隊(duì)列**/
  public function makeEmpty()
  {
    unset($this->queue);
  }
  /**獲取列頭**/
  public function getFirst()
  {
    return reset($this->queue);
  }
  /** 獲取列尾 **/
  public function getLast()
  {
    return end($this->queue);
  }
  /** 獲取長(zhǎng)度 **/
  public function getLength()
  {
    return count($this->queue);
  }
}

隊(duì)列的用途:

隊(duì)列可以很好地異步處理數(shù)據(jù)傳送和存儲(chǔ),當(dāng)你頻繁地向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)、頻繁地向搜索引擎提交數(shù)據(jù),就可采取隊(duì)列來(lái)異步插入。另外,還可以將較慢的處理邏輯、有并發(fā)數(shù)量限制的處理邏輯,通過(guò)消息隊(duì)列放在后臺(tái)處理,例如FLV視頻轉(zhuǎn)換、發(fā)送手機(jī)短信、發(fā)送電子郵件等。

項(xiàng)目案例

這里有個(gè)項(xiàng)目,因?yàn)榉?wù)器權(quán)限問(wèn)題,沒(méi)辦法安裝安裝隊(duì)列程序,而且并發(fā)300+,服務(wù)商的數(shù)據(jù)庫(kù)最大連接數(shù)是300,為了解決這個(gè)問(wèn)題所以編寫(xiě)了一個(gè)簡(jiǎn)單的隊(duì)列程序,代碼如下

讀隊(duì)列代碼:

?php
set_time_limit(0);
$file_name3 = '3.txt';//這個(gè)地方是講隊(duì)列文件讀出的內(nèi)容寫(xiě)入文件,test中代替的是mysql數(shù)據(jù)庫(kù)操作
$file3 = fopen($file_name3,'a');
while(true)
{
  $c = FALSE;
  $file_name = '1.txt';//隊(duì)列文件
  $file = fopen($file_name,'r');
  if(!feof($f))
  {
    //獲得第一條數(shù)據(jù)
    $a = fgets($file);
    if(!empty($a))
    {
      $c = TRUE;
      fwrite($file3,$a);//這里可以改為數(shù)據(jù)庫(kù)操作
    }
  }
  fclose($file);
  if($c)
  {
    //將文件的第一條數(shù)據(jù)刪除
    exec('sed -i \'1d' /var/www/csv_sql/1.txt');
  }
  sleep(1);
  if(time()>=strtotime('20160416150000'))
  {
    exit;
  }
}
fclose($file3);

讀隊(duì)列程序其實(shí)就是一個(gè)死循環(huán)程序,如不設(shè)置關(guān)閉點(diǎn),則一直循環(huán)讀取文件

寫(xiě)入隊(duì)列程序比較簡(jiǎn)單,就是寫(xiě)文件

?php
set_time_limit(0);
$file_name2 = '2.txt';//test中用來(lái)比對(duì)隊(duì)列程序是否正常的
$file2 = fopen($file_name2,'a');
for($i=1;$i11;$i++)
{
  $file_name = '1.txt';//隊(duì)列文件
  $file = fopen($file_name,'a');//fopen的mode屬性必須是a或a+
  $str = $i.'--'.rand(100001,999999);
  fwrite($file,$str."\n");
  fwrite($file2,$str."\n");
  sleep(1);
  fclose($file);
}
fclose($file2);

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《PHP基本語(yǔ)法入門(mén)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • PHP隊(duì)列用法實(shí)例
  • PHP+memcache實(shí)現(xiàn)消息隊(duì)列案例分享
  • PHP的Laravel框架中使用消息隊(duì)列queue及異步隊(duì)列的方法
  • php Memcache 中實(shí)現(xiàn)消息隊(duì)列
  • PHP使用數(shù)組實(shí)現(xiàn)隊(duì)列
  • PHP消息隊(duì)列用法實(shí)例分析
  • php實(shí)現(xiàn)的雙向隊(duì)列類(lèi)實(shí)例
  • 隊(duì)列在編程中的實(shí)際應(yīng)用(php)
  • phpredis提高消息隊(duì)列的實(shí)時(shí)性方法(推薦)
  • PHP基于Redis消息隊(duì)列實(shí)現(xiàn)發(fā)布微博的方法
  • PHP實(shí)現(xiàn)的memcache環(huán)形隊(duì)列類(lèi)實(shí)例

標(biāo)簽:大理 蚌埠 棗莊 廣元 衡水 衢州 江蘇 萍鄉(xiāng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP隊(duì)列原理及基于隊(duì)列的寫(xiě)文件案例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    宝丰县| 纳雍县| 四川省| 宕昌县| 陇南市| 盐津县| 镇远县| 调兵山市| 额尔古纳市| 兴国县| 乌鲁木齐县| 三都| 如东县| 大渡口区| 平定县| 九江市| 南溪县| 兴和县| 信丰县| 商丘市| 桂林市| 罗平县| 美姑县| 平原县| 康平县| 峡江县| 金华市| 孟连| 汉寿县| 陆河县| 西乌| 增城市| 虎林市| 崇信县| 微山县| 八宿县| 清水河县| 北海市| 丹巴县| 金昌市| 济南市|