日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

使用php數(shù)據(jù)緩存技術(shù)提高執(zhí)行效率

瀏覽:249日期:2022-06-06 13:44:56
目錄
  • PHP 緩存介紹
    • 什么是緩存
    • 緩存作用
    • 常用緩存類型
  • PHP 常用內(nèi)存緩存介紹
    • php opcode緩存
      •  php文件緩存

        為什么要使用php緩存技術(shù)?理由很簡(jiǎn)單:提高效率。在程序開發(fā)中,獲取信息的方式主要是查詢數(shù)據(jù)庫(kù),除此以外,也可能是通過Web Services或者別的某種方法,無(wú)論哪種方法,在大量的并發(fā)訪問面前,它們都可能成為效率的瓶頸,為了解決這些問題,人們提出了很多解決方案,其中一些是利用優(yōu)化軟件(如:APC,Eaccelerator,Zend Optimizer等等)來(lái)提高程序的運(yùn)行效率,合理的運(yùn)用這些軟件,往往能使程序的運(yùn)行效率得到數(shù)量級(jí)上的提升,但前提是你必須擁主機(jī)的控制權(quán),以便能夠安裝這些軟件,如果你使用的是虛擬主機(jī)的話,那么只能祈禱你的服務(wù)提供商已經(jīng)預(yù)裝了某個(gè)優(yōu)化軟件,否則就必須自己使用PHP來(lái)實(shí)現(xiàn)相應(yīng)的緩存功能。

        PHP緩存技術(shù)是一種解釋型語(yǔ)言,屬于邊編譯邊運(yùn)行,包括PHP編譯緩存和PHP數(shù)據(jù)緩存兩種。PHP緩存,這種運(yùn)行模式的優(yōu)點(diǎn)是程序修改很方便,但是運(yùn)行效率卻很低下。PHP編譯緩存針對(duì)這種情況做改進(jìn)處理,使得PHP語(yǔ)言只要運(yùn)行一次,就可以把程序的編譯結(jié)果緩存起來(lái)。這樣,接下來(lái)的每次運(yùn)行都不需要再次編譯了,這大大提高PHP運(yùn)行速度。

        PHP 緩存介紹

        什么是緩存

            數(shù)據(jù)交換的緩沖區(qū)(稱作Cache)
            臨時(shí)文件交換區(qū)

        緩存作用

            減少網(wǎng)絡(luò)延遲,加快頁(yè)面打開速度
            減少數(shù)據(jù)查詢次數(shù),降低數(shù)據(jù)庫(kù)壓力
            降低系統(tǒng)負(fù)荷,極大的提升系統(tǒng)性能

        常用緩存類型

            文件緩存:使用 PHP 文件操作函數(shù),把數(shù)據(jù)緩存到服務(wù)器磁盤文件中
            內(nèi)存緩存:Redis、Memcached、MongoDB
            Opcode緩存:PHP 是一種解釋型腳本語(yǔ)言,在 PHP 執(zhí)行過程中,虛擬機(jī)會(huì)把 PHP 代碼翻譯成中間語(yǔ)言,這種中間語(yǔ)言就叫 Opcode,然后虛擬機(jī)再把 Opcode 順序執(zhí)行。把 PHP 代碼對(duì)應(yīng)的 Opcode緩存到內(nèi)存中,加速 PHP 執(zhí)行,減少了代碼翻譯成中間語(yǔ)言這一步操作。

        文件緩存內(nèi)存緩存Opcode緩存存儲(chǔ)介質(zhì)磁盤文件內(nèi)存內(nèi)存不足IO操作慢、文件鎖的存在占內(nèi)存、不持久部署代碼刷新慢應(yīng)用舉例新聞數(shù)據(jù)、城市區(qū)域會(huì)員、商品、SessionOpcodeCache(代碼加速)

        PHP 常用內(nèi)存緩存介紹

            PHP是一種腳本語(yǔ)言,腳本執(zhí)行結(jié)束之后,所有的變量全部釋放掉,本身沒有能力將數(shù)據(jù)常駐內(nèi)存。
            PHP借助于內(nèi)存服務(wù)器將緩存數(shù)據(jù)儲(chǔ)存在服務(wù)器內(nèi)存。
            優(yōu)點(diǎn):讀寫速度快、跨服務(wù)器存儲(chǔ)(例如在做多服務(wù)器集群的時(shí)候,可以將 Session 存儲(chǔ)于內(nèi)存緩存服務(wù)器中)、易于解決主從同步問題,并發(fā)問題。
            不足:占用了內(nèi)存空間、緩存數(shù)據(jù)有大小限制、數(shù)據(jù)不易持久化存儲(chǔ)。(但是內(nèi)存緩存帶給我們的方便足夠可以忽略他的不足)
            常用內(nèi)存緩存:Memcached、Redis、MongoDB

        MemcachedRedisMongoDB儲(chǔ)存數(shù)據(jù)類型stringstring, list, hash, setbson 豐富查詢方式數(shù)據(jù)儲(chǔ)存位置內(nèi)存內(nèi)存 + 硬盤內(nèi)存 + 硬盤持久化最長(zhǎng)30天RDB 文件快照,AOF(記錄寫操作)持久化journal持久化使用場(chǎng)景Session 商品緩存(緩存 < 1MB)緩存、隊(duì)列日志、區(qū)域信息、評(píng)論

        php opcode緩存

        PHP Opcode原理

        Opcode是一種PHP腳本編譯后的中間語(yǔ)言,就像Java的ByteCode,或者.NET的MSL,舉個(gè)例子,比如你寫下了如下的PHP代碼

        <?php
           echo "Hello World";
           $a = 1 + 1;
           echo $a;
        ?>

        PHP執(zhí)行這段代碼會(huì)經(jīng)過如下4個(gè)步驟(確切的來(lái)說(shuō),應(yīng)該是PHP的語(yǔ)言引擎Zend)

        1.Scanning(Lexing) ,將PHP代碼轉(zhuǎn)換為語(yǔ)言片段(Tokens)
        2.Parsing, 將Tokens轉(zhuǎn)換成簡(jiǎn)單而有意義的表達(dá)式
        3.Compilation, 將表達(dá)式編譯成Opocdes
        4.Execution, 順次執(zhí)行Opcodes,每次一條,從而實(shí)現(xiàn)PHP腳本的功能。

         學(xué)過編譯原理的同學(xué)都應(yīng)該對(duì)編譯原理中的詞法分析步驟有所了解,Lex就是一個(gè)詞法分析的依據(jù)表。 Zend/zend_language_scanner.c會(huì)根據(jù)Zend/zend_language_scanner.l(Lex文件),來(lái)輸入的 PHP代碼進(jìn)行詞法分析,從而得到一個(gè)一個(gè)的“詞”,PHP4.2開始提供了一個(gè)函數(shù)叫token_get_all,這個(gè)函數(shù)就可以講一段PHP代碼 Scanning成Tokens;如果用這個(gè)函數(shù)處理前面的PHP代碼,將會(huì)得到如下結(jié)果:

        Array
        (
            [0] => Array
        (
           [0] => 367
           [1] => Array
        (
            [0] => 316
            [1] => echo
        )
            [2] => Array
        (
            [0] => 370
            [1] =>
        )
            [3] => Array
        (
            [0] => 315
            [1] => "Hello World"
        )
            [4] => ;
            [5] => Array
        (
            [0] => 370
            [1] =>
        )
            [6] => =
            [7] => Array
        (
            [0] => 370
            [1] =>
        )
            [8] => Array
        (
            [0] => 305
            [1] => 1
        )
            [9] => Array
        (
            [0] => 370
            [1] =>
        )
            [10] => +
            [11] => Array
        (
            [0] => 370
            [1] =>
        )
            [12] => Array
        (
            [0] => 305
            [1] => 1
        )
            [13] => ;
            [14] => Array
        (
            [0] => 370
            [1] =>
        )
            [15] => Array
        (
            [0] => 316
            [1] => echo
        )
            [16] => Array
        (
            [0] => 370
            [1] =>
        )
            [17] => ;
        )

        分析這個(gè)返回結(jié)果我們可以發(fā)現(xiàn),源碼中的字符串,字符,空格,都會(huì)原樣返回。每個(gè)源代碼中的字符,都會(huì)出現(xiàn)在相應(yīng)的順序處。而,其他的比如標(biāo)簽,操作符,語(yǔ)句,都會(huì)被轉(zhuǎn)換成一個(gè)包含倆部分的Array: Token ID (也就是在Zend內(nèi)部的改Token的對(duì)應(yīng)碼,比如,T_ECHO,T_STRING),和源碼中的原來(lái)的內(nèi)容。
          接下來(lái),就是Parsing階段了,Parsing首先會(huì)丟棄Tokens Array中的多于的空格,然后將剩余的Tokens轉(zhuǎn)換成一個(gè)一個(gè)的簡(jiǎn)單的表達(dá)式

        1.echo a constant string
        2.add two numbers together
        3.store the result of the prior expression to a variable
        4.echo a variable

          然后就改Compilation階段了,它會(huì)把Tokens編譯成一個(gè)個(gè)op_array, 每個(gè)op_arrayd包含如下5個(gè)部分:

        1.Opcode數(shù)字的標(biāo)識(shí),指明了每個(gè)op_array的操作類型,比如add , echo
        2.結(jié)果 存放Opcode結(jié)果
        3.操作數(shù)1 給Opcode的操作數(shù)
        4.操作數(shù)2
        5.擴(kuò)展值1個(gè)整形用來(lái)區(qū)別被重載的操作符

          比如,我們的PHP代碼會(huì)被Parsing成:

        * ZEND_ECHO "Hello World"
        * ZEND_ADD ~0 1 1
        * ZEND_ASSIGN !0 ~0
        * ZEND_ECHO !0

         php文件緩存

        因?yàn)槿绻绦蛟L問數(shù)據(jù)庫(kù)時(shí)數(shù)據(jù)量較大,執(zhí)行起來(lái)會(huì)比較慢。而且每一次刷新頁(yè)面都會(huì)訪問依稀數(shù)據(jù)庫(kù),然后再把數(shù)據(jù)顯示在頁(yè)面上。 設(shè)置緩存也有一個(gè)缺點(diǎn),那就是緩存時(shí)間要設(shè)置好,如果緩存時(shí)間較長(zhǎng),那么數(shù)據(jù)庫(kù)數(shù)據(jù)變化時(shí),不能及時(shí)的在頁(yè)面上顯示。例如緩存不能用在秒殺商品,或者出售商品上面,因?yàn)閿?shù)量不能及時(shí)的更新。

        <?php
        //緩存文件一般都放在caches文件夾里面。
        
        //定義一個(gè)該頁(yè)面的緩存文件路徑,也就是該緩存的文件放在哪個(gè)文件夾里面。
        
        $filename = "../cache/testhuancun.html";//定義了一個(gè)緩存的文件,文件名為testhuancun.html,位置在../cache文件夾里面。
        
        //設(shè)置一個(gè)緩存時(shí)間
        $time = 10;//代表緩存時(shí)間設(shè)置為10s.
        
        //判斷緩存文件是否存在
        if(!file_exists($filename) || filemtime($filename)+$time<time())
        //判斷文件是否存在,如果不存在,執(zhí)行{}里面的代碼。還要判斷緩存時(shí)間有沒有過,如果已經(jīng)過了,要重新讀取數(shù)據(jù)庫(kù)更新緩存。
        //filemtime($filename)讀取文件最后被修改的時(shí)間,time()取當(dāng)前時(shí)間戳
        
        {
            //開啟內(nèi)存緩存
            ob_start();//這里開啟內(nèi)存緩存以后,下面要輸出的內(nèi)容全部放在內(nèi)存緩存里面。
        
            include("../init.inc.php");
            include("../DBDA.php");
            $db = new DBDA();
            $sql = "select * from nation";
            $attr = $db->Query($sql);
            $smarty->assign("nation",$attr);
            $smarty->display("test.html");
        
            //把內(nèi)存里面的內(nèi)容讀出來(lái)
            $nr = ob_get_contents();//ob就是代表的緩存,讀取的內(nèi)容就是整個(gè)靜態(tài)頁(yè)面。
        
            //將讀到的內(nèi)容存放到緩存文件
            file_put_contents($filename,$nr);//get是取出內(nèi)容,put是往里放內(nèi)容,把內(nèi)存緩存的文件存到¥filename里面。
        
        
            //清除內(nèi)存緩存
            ob_flush();//把內(nèi)存緩存的內(nèi)容清除掉,不讓它們繼續(xù)留在緩存內(nèi)存里面,但是需要緩存的內(nèi)容已經(jīng)放在了$filename里面了,已經(jīng)保存下來(lái)了。
        
            echo "#############################";//輸出內(nèi)容加上一句話,觀察輸出內(nèi)容是輸出的緩存頁(yè)面還是加載數(shù)據(jù)庫(kù)的頁(yè)面。這句話放在了ob_flush后面,不會(huì)被清除掉。
        }
        else//如果緩存文件存在,直接將緩存文件拿到頁(yè)面顯示。
        {
            include($filename);//將緩存的頁(yè)面加載到顯示頁(yè)面中
        }

        到此這篇關(guān)于使用php數(shù)據(jù)緩存技術(shù)提高執(zhí)行效率的文章就介紹到這了,更多相關(guān)php數(shù)據(jù)緩存技術(shù)內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

        標(biāo)簽: PHP
        日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
        98精品视频| 久久不射网站| 国产探花一区二区| 国产精品一区二区三区美女 | 日韩午夜在线| 在线综合视频| 天堂成人国产精品一区| 视频一区视频二区中文字幕| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲欧美日韩一区在线观看| 国产一区白浆| 美美哒免费高清在线观看视频一区二区 | 欧美一级网址| 国产精品二区影院| 精品久久一区| 日韩不卡在线| 亚洲一级二级| 亚洲tv在线| 麻豆传媒一区二区三区| 成人一二三区| 99在线精品视频在线观看| 亚洲免费专区| 国产精品久久久久77777丨| 国产精品美女午夜爽爽| 在线人成日本视频| 好吊一区二区三区| 香蕉久久一区| 国产精品多人| 久久久成人网| 亚洲人成网站在线在线观看| 毛片不卡一区二区| 欧美私人啪啪vps| 国产suv精品一区二区四区视频 | 久久精品网址| 久久高清免费| 影音先锋久久| 日韩av字幕| 欧美男人天堂| 亚洲一区二区小说| 久久久精品国产**网站| 国产99久久| 欧美日韩一区二区三区在线电影| 国产精品99视频| 亚洲专区一区| 精品三区视频| 蜜桃免费网站一区二区三区| 欧美激情日韩| 在线视频精品| 欧美精品不卡| 中文在线一区| 欧美激情五月| 国产精品日韩久久久| 国产美女亚洲精品7777| 久久九九精品| 国产精品巨作av| 午夜国产欧美理论在线播放| 欧美中文一区| 好看的亚洲午夜视频在线| 国产精品密蕾丝视频下载| 女人天堂亚洲aⅴ在线观看| 国产福利一区二区精品秒拍| 国产精品嫩草99av在线| 日韩av有码| 四虎国产精品免费久久| 秋霞国产精品| 日韩成人在线看| 99久久久久国产精品| 91精品麻豆| 国产美女一区| 日韩欧美国产精品综合嫩v| 日本一区二区中文字幕| 国产99久久| 国产一区二区三区黄网站| 最新国产精品视频| 亚洲91视频| 高清一区二区三区av| 婷婷精品久久久久久久久久不卡| 色综合www| 老司机精品视频在线播放| 免费人成在线不卡| 日韩不卡免费高清视频| 国产精品久久亚洲不卡| 婷婷综合电影| 久久xxxx| 欧美精选一区二区三区| 捆绑调教美女网站视频一区| 日韩中文字幕| 黄色av一区| 亚洲播播91| 精品福利久久久| 国产精品xxx在线观看| 亚洲我射av| 日韩亚洲国产欧美| 国产一区日韩一区| 日韩精品免费一区二区三区| 麻豆91在线播放| 国产欧美日韩| 日韩精品免费一区二区夜夜嗨 | 国产欧美久久一区二区三区| 视频一区二区三区入口| 黑丝一区二区| 亚洲精品成人| 免费国产自久久久久三四区久久| 亚洲人成在线网站| 国产自产自拍视频在线观看| 国产精品视频一区二区三区四蜜臂| 亚洲精品第一| 亚洲一区二区三区四区电影| 欧美精品一区二区三区精品| 国产一区欧美| 欧美精品九九| 在线亚洲一区| 丝袜美腿成人在线| 国产农村妇女精品一二区| 亚洲午夜在线| 国产精品7m凸凹视频分类| 99久久www免费| 亚洲高清二区| 99热国内精品| 欧美在线亚洲| 国产精品视区| 欧美综合二区| 亚洲麻豆一区| 日韩国产欧美视频| 国产无遮挡裸体免费久久| 国产欧美日韩影院| 精品亚洲a∨| 91亚洲国产| 91精品国产福利在线观看麻豆| 91精品综合| 黑丝一区二区| 最新国产精品久久久| 97久久超碰| 国产精品chinese| 国产精品网站在线看| 另类欧美日韩国产在线| 9999国产精品| 欧美 日韩 国产一区二区在线视频| 欧美中文一区二区| 久久电影一区| 亚洲v天堂v手机在线| 国产欧美日韩精品一区二区免费 | 91成人在线网站| 国产精品一区二区av交换| 欧美激情亚洲| 91精品国产自产在线观看永久∴ | 黄页网站一区| 亚洲另类av| 国产精品流白浆在线观看| 国产一区调教| 伊人成人网在线看| 日本91福利区| 97人人精品| 亚洲一区观看| 欧美日本久久| 亚洲精品88| 在线视频免费在线观看一区二区| 亚洲精品看片| 国产成人免费av一区二区午夜| 久久久久美女| 日韩精品亚洲一区二区三区免费| 老牛国内精品亚洲成av人片| 亚洲成人精品| 日本国产欧美| 精品国产第一福利网站| 亚洲欧美日韩专区| 国产精品久久久久久久久久白浆| 日本免费一区二区三区四区| 日韩中文字幕av电影| 日韩av中文字幕一区二区三区| 国产成人精品亚洲线观看| 欧美亚洲激情| 91亚洲无吗| 久久网站免费观看| 午夜久久av| 国产伦精品一区二区三区视频 | 国产剧情一区| 在线一区欧美| 日韩精品首页| 欧美激情 亚洲a∨综合| 天堂成人国产精品一区| 久久美女性网| 国产精品腿扒开做爽爽爽挤奶网站| 日韩av中文字幕一区| 国产福利电影在线播放| 国产毛片一区| 精品视频一区二区三区在线观看| 99精品视频在线| 青草av.久久免费一区| 久久婷婷av| 欧美偷窥清纯综合图区| 91精品91| 国模精品一区| 日韩毛片网站| 欧美亚洲国产激情| 免费看一区二区三区| 好看不卡的中文字幕| 欧美片网站免费| 国产一级一区二区| 久久天堂av|