最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP PDO和消息隊(duì)列的個人理解與應(yīng)用實(shí)例分析

 更新時間:2019年11月25日 09:59:30   作者:循環(huán)源圈  
這篇文章主要介紹了PHP PDO和消息隊(duì)列的個人理解與應(yīng)用,結(jié)合實(shí)例形式分析了PHP pdo與消息隊(duì)列相關(guān)配置、使用方法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了PHP PDO和消息隊(duì)列的個人理解與應(yīng)用。分享給大家供大家參考,具體如下:

什么是消息隊(duì)列,百度百科說,···消息隊(duì)列····是在消息的傳輸過程中保存消息的容器。

看著網(wǎng)上林林總總的文章,都說是為了應(yīng)對高并發(fā),處理數(shù)據(jù)量超級大的一種數(shù)據(jù)容器,也可以說是利用各種方式,先把數(shù)據(jù)存儲在一個···容器···中,然后,再慢慢從這個容器中獲取數(shù)據(jù),實(shí)現(xiàn)·····異步操作數(shù)據(jù)庫·····的方式,以便降低數(shù)據(jù)庫的壓力。

不管消息隊(duì)列是什么,個人姑且認(rèn)為它就是一種存儲數(shù)據(jù)的···容器···,就這么簡單明了,呵呵,因?yàn)楸救藢ο㈥?duì)列這東西研究的比較膚淺。

不過,在這里,我還是要賣弄一下一個個人的小實(shí)驗(yàn)代碼,呵呵,假若下面的東西與消息隊(duì)列相離太遠(yuǎn),那么請看官可別見怪哦,因?yàn)槲疑厦嬉呀?jīng)聲明的很清楚了,本人對這東西還是不甚了解,只不過是工作之余賣弄一下‘文采'而已,所以,假如真有誤解消息隊(duì)列這個東西,我只能說聲,請你指正我的錯誤,讓筆者迷途知返。

先給出連接mysql數(shù)據(jù)庫配置文件mysql.ini的內(nèi)容:

[database]
driver = mysql
host = 127.0.0.1
port = 3306
dbname = mysql
username = root
password = 1234
[options]
PDO::MYSQL_ATTR_INIT_COMMAND = set names utf8

數(shù)據(jù)表文件queue.sql的內(nèi)容:

-- 消息隊(duì)列測試
-- 商品表
create table goods(
id int unsigned primary key auto_increment,
goodsname varchar(40) not null comment '商品名',
price decimal(9,2) not null comment '價格',
category_id tinyint unsigned not null comment '商品類別id',
sort tinyint comment '商品排序',
description varchar(255) comment '商品描述',
remark varchar(255) comment '備注'
)engine InnoDB default charset=utf8;
insert into goods values(default,'iPhone5s',5999,1,1,'美國入口貴重電子產(chǎn)品','請多多銷售'),(default,'宏基手提電腦1',4888,3,1,'價格劃算好電腦',null),(default,'f-30絨衣',200,2,1,'以純白色厚皮羽絨服',null),(default,'n-100鞋子',300,4,1,'Nick品牌',null);

下面是簡單的消息隊(duì)列實(shí)現(xiàn)PDO商品入庫的代碼:

鄭重提醒:請認(rèn)真看我的注釋,請認(rèn)真看我的注釋,請認(rèn)真看我的注釋。重要的信息要說三遍,呵呵!

<?php
namespace Home;
header('content-type:text/html;charset=utf-8;');
//引入PDO類
use \PDO;
use \PDOStatement;
use \PDOException;
/*簡單消息隊(duì)列*/
class Queue{
  //容器可以是私有,最好是公有
  static public $container=array();
  //把PDO對象存放到屬性中是為了跨方法使用
  static private $pdo;
  //構(gòu)造函數(shù)實(shí)現(xiàn)初始化PDO連接數(shù)據(jù)庫
  public function __construct($file = './mysql.ini'){//mysql數(shù)據(jù)庫的配置文件,./mysql.ini與這個類是同一個目錄
    //parse_ini_file函數(shù)作用,解析并獲取ini文件的參數(shù),加true是二維數(shù)組
    $dbini    = parse_ini_file($file,true);
    $driver    = $dbini['database']['driver'];
    //這里的數(shù)據(jù)庫是mysql的總數(shù)據(jù)庫
    $dbname    = $dbini['database']['dbname'];
    $host    = $dbini['database']['host'];
    $port    = $dbini['database']['port'];
    //構(gòu)造PDO連接數(shù)據(jù)庫的第一個參數(shù),這個參數(shù)這么設(shè)置純屬是PDO類的語法,不懂的可以百度一下,這里就不做詳解了
    $dsn = $driver.':'.'dbname='.$dbname.';host='.$host.';port='.$port;
    //其他連接數(shù)據(jù)庫參數(shù)
    $username  = $dbini['database']['username'];
    $password  = $dbini['database']['password'];
    $options  = $dbini['options'];//初始化設(shè)置PDO選項(xiàng)
    try{
      self::$pdo = new PDO($dsn,$username,$password,$options);
      //設(shè)置PDO屬性。拋出錯誤報告
      self::$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
      try{
        //選擇商品數(shù)據(jù)表所在的數(shù)據(jù)庫
        self::$pdo->exec('use queue');
      }catch(PDOException $e){
        echo $e->getMessage();
      }
    }catch(PDOException $e){
      echo $e->getMessage();
    }
  }
  /*
  *入列
  *$data數(shù)組
  *成功返回1,失敗返回false,或者null
  */
  public function _unshift($data =array()){
    if(!is_array($data) || empty($data)){return false;}
    $sql = 'default';
    foreach($data as $k=>$v){
      $sql .= ',"'.$v.'"';
    }
    //把$data轉(zhuǎn)為sql語句,添加到隊(duì)列容器contain中
    $sql = 'insert into goods values('.$sql.')';
    return @array_unshift(self::$container,$sql);
  }
  /*
  *出列
  *成功返回最后插入的數(shù)據(jù)id
  *失敗返回失敗信息
  */
  private static function _pop(){
    try{//獲取尾部的sql語句,出列
      $sql = array_pop(self::$container);
      self::$pdo->exec($sql);
      //把剩余的容器值賦給中間變量
      $middle = self::$container;
      //判斷中間變量是否為空,不為空則繼續(xù)獲取容器尾部的數(shù)據(jù),繼續(xù)出列
      while($middle){
        $sql = array_pop($middle);
        self::$pdo->exec($sql);
        //把數(shù)據(jù)再轉(zhuǎn)給容器,也就是轉(zhuǎn)給while循環(huán)外面的$middle,這樣才能實(shí)現(xiàn)循環(huán),讓容器里面的數(shù)據(jù)全部出列,插入到數(shù)據(jù)庫中
        self::$container = $middle;
      }
      //返回的是,最后插入的id,失敗是null
      return self::$pdo->lastInsertId();
      }catch(PDOException $e){
        return $e->getMessage();
      }
  }
  //析構(gòu)函數(shù),對象回收時調(diào)用,通過它實(shí)現(xiàn)自動讓容器數(shù)據(jù)入庫
  public function __destruct(){
    //當(dāng)對象被回收時,判斷容器是否存在消息,假如存在,則調(diào)用_pop方法,把消息出列
    if(self::$container){
      self::_pop();
    }
  }
}

下面是同一級目錄下調(diào)用這個類的文件的內(nèi)容,當(dāng)然,你也可以在上面那個queue類的下面調(diào)用_unshift方法實(shí)現(xiàn)消息隊(duì)列的操作

<?php
include './queue.php';
use Home\Queue;//引入命名空間的Queue類
$ob = new Queue;
//消息入列
$ob->_unshift(array('goodsname'=>'vivo手機(jī)8888','price'=>1120,'category_id'=>1,'sort'=>1,'description'=>'vivo品牌','remark'=>'好用'));
$ob->_unshift(array('goodsname'=>'小米手機(jī)888','price'=>1998,'category_id'=>1,'sort'=>1,'description'=>'小米品牌手機(jī)','remark'=>'國產(chǎn)好貨'));
//之所以打印出來,完成是為了看看效果,至于,有沒有實(shí)現(xiàn)商品入庫,你得去看看你的數(shù)據(jù)庫了,呵呵
var_dump(Queue::$container);

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

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

相關(guān)文章

  • PHP中extract()函數(shù)的定義和用法

    PHP中extract()函數(shù)的定義和用法

    PHP extract() 函數(shù)從數(shù)組中把變量導(dǎo)入到當(dāng)前的符號表中
    2012-08-08
  • 如何在Laravel中驗(yàn)證zip里的文件

    如何在Laravel中驗(yàn)證zip里的文件

    在 Laravel 程序中上傳文件時,請求驗(yàn)證可以很好驗(yàn)證上傳的文件。你可以要求上傳文件必須為圖片, 也可以限制文件字節(jié)大小, 也可以根據(jù)mime types或者文件擴(kuò)展名過濾文件。
    2021-05-05
  • 基于PHP實(shí)現(xiàn)短信驗(yàn)證碼發(fā)送次數(shù)限制

    基于PHP實(shí)現(xiàn)短信驗(yàn)證碼發(fā)送次數(shù)限制

    這篇文章主要介紹了基于PHP實(shí)現(xiàn)短信驗(yàn)證碼發(fā)送次數(shù)限制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • PHP的Yii框架中View視圖的使用進(jìn)階

    PHP的Yii框架中View視圖的使用進(jìn)階

    這篇文章主要介紹了PHP的Yii框架中View視圖的使用進(jìn)階,包括布局和數(shù)據(jù)塊的創(chuàng)建使用等,需要的朋友可以參考下
    2016-03-03
  • PHP實(shí)現(xiàn)生成Excel文件并導(dǎo)出的示例詳解

    PHP實(shí)現(xiàn)生成Excel文件并導(dǎo)出的示例詳解

    這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)生成Excel文件并導(dǎo)出的方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)PHP有一定的幫助,需要的可以參考一下
    2023-01-01
  • 100行PHP代碼實(shí)現(xiàn)socks5代理服務(wù)器

    100行PHP代碼實(shí)現(xiàn)socks5代理服務(wù)器

    這個例子說了in the real world, do something here to ensure clients not running are destroyed 但是,如何把不再運(yùn)行的連接銷毀卻沒有講。恩。我試了把$clients放到一個類里,把類傳給線程類,然后在線程類要結(jié)束時把$clients里對應(yīng)的連接給unset掉,無果。
    2016-04-04
  • 通過PHP接入DeepSeek API的兩種方法

    通過PHP接入DeepSeek API的兩種方法

    本文介紹了如何通過PHP接入DeepSeek的API,包括使用cURL命令行工具和直接在PHP腳本中調(diào)用DeepSeek的RESTfulAPI,文章還提供了詳細(xì)的步驟和示例代碼,幫助用戶將這些代碼集成到他們的網(wǎng)站中,需要的朋友可以參考下
    2025-02-02
  • PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能示例

    PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能示例

    這篇文章主要介紹了PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能,結(jié)合具體實(shí)例形式分析了PHP使用 Imagick 擴(kuò)展的圖形處理、生成相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • php使用Canal監(jiān)聽msyql的過程詳解

    php使用Canal監(jiān)聽msyql的過程詳解

    這篇文章主要介紹了php使用Canal監(jiān)聽msyql的全過程,文中通過圖文和代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工資有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • PHP上傳圖片進(jìn)行等比縮放可增加水印功能

    PHP上傳圖片進(jìn)行等比縮放可增加水印功能

    PHP上傳圖片進(jìn)行等比縮放,大家可以自行添加增加水印功能,具體代碼如下,喜歡的朋友可以參考下
    2014-01-01

最新評論

金山区| 武邑县| 巴青县| 观塘区| 镇安县| 荆门市| 忻州市| 龙里县| 阿拉善盟| 固原市| 仙居县| 吉木乃县| 红原县| 石家庄市| 庆元县| 泗阳县| 米泉市| 威信县| 临高县| 仙游县| 汶川县| 贵州省| 汽车| 甘泉县| 平罗县| 石首市| 阿荣旗| 西畴县| 海伦市| 天峨县| 定远县| 历史| 南昌县| 大宁县| 来凤县| 利辛县| 库尔勒市| 枝江市| 陆丰市| 陕西省| 望江县|