中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中基于隊列寫文件的示例分析

發布時間:2021-08-10 14:27:26 來源:億速云 閱讀:144 作者:小新 欄目:開發技術

這篇文章主要介紹了PHP中基于隊列寫文件的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

具體如下:

隊列是一種線性表,按照先進先出的原則進行的:

入隊:

PHP中基于隊列寫文件的示例分析

出隊:

PHP中基于隊列寫文件的示例分析

PHP實現隊列:第一個元素作為隊頭,最后一個元素作為隊尾

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

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

即元素可以在隊列的任意一段入隊或出隊,如果我們把這些方法叫做insertLeft()和insertRight(),以及removeLeft()和removeRight()。如果嚴格禁止調用insertLeft()和removeLeft()方法(或禁用右段的操作),雙端隊列功能就和棧一樣。禁止調用insertLeft()和removeRight()(或相反的另一對方法),它的功能就和隊列一樣了。雙端隊列與棧或隊列相比,是一種多用途的數據結構。

PHP實現雙端隊列

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

隊列的用途:

隊列可以很好地異步處理數據傳送和存儲,當你頻繁地向數據庫中插入數據、頻繁地向搜索引擎提交數據,就可采取隊列來異步插入。另外,還可以將較慢的處理邏輯、有并發數量限制的處理邏輯,通過消息隊列放在后臺處理,例如FLV視頻轉換、發送手機短信、發送電子郵件等。

項目案例

這里有個項目,因為服務器權限問題,沒辦法安裝安裝隊列程序,而且并發300+,服務商的數據庫最大連接數是300,為了解決這個問題所以編寫了一個簡單的隊列程序,代碼如下

讀隊列代碼:

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

讀隊列程序其實就是一個死循環程序,如不設置關閉點,則一直循環讀取文件

寫入隊列程序比較簡單,就是寫文件

<?php
set_time_limit(0);
$file_name2 = '2.txt';//test中用來比對隊列程序是否正常的
$file2 = fopen($file_name2,'a');
for($i=1;$i<11;$i++)
{
  $file_name = '1.txt';//隊列文件
  $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);

感謝你能夠認真閱讀完這篇文章,希望小編分享的“PHP中基于隊列寫文件的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

泽州县| 天祝| 武威市| 垫江县| 米林县| 罗田县| 淮阳县| 抚顺县| 屯昌县| 兴安县| 赤峰市| 广丰县| 紫阳县| 繁峙县| 益阳市| 台中县| 响水县| 谷城县| 华亭县| 民和| 苍山县| 安阳市| 大英县| 仁化县| 钟山县| 中方县| 桦甸市| 元阳县| 东安县| 定州市| 关岭| 那坡县| 泽州县| 甘泉县| 平顶山市| 吉林省| 永仁县| 阳泉市| 鄢陵县| 安宁市| 新闻|