中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

php動(dòng)態(tài)網(wǎng)站怎么做商旅100網(wǎng)頁(yè)版

php動(dòng)態(tài)網(wǎng)站怎么做,商旅100網(wǎng)頁(yè)版,早期網(wǎng)購(gòu)平臺(tái)有哪些,b2c模式的網(wǎng)站前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站。 簡(jiǎn)介 隨著您的網(wǎng)站的增長(zhǎng)和流量的增加,最快顯示壓力的組件之一是后端數(shù)據(jù)庫(kù)。如果您的數(shù)據(jù)庫(kù)沒有分布式和配置來處理高負(fù)載…

前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站。

簡(jiǎn)介

隨著您的網(wǎng)站的增長(zhǎng)和流量的增加,最快顯示壓力的組件之一是后端數(shù)據(jù)庫(kù)。如果您的數(shù)據(jù)庫(kù)沒有分布式和配置來處理高負(fù)載,它很容易就會(huì)被相對(duì)較小的流量增加所壓倒。

處理這個(gè)問題的一種方法是利用內(nèi)存對(duì)象緩存系統(tǒng),比如 memcached。Memcached 是一種緩存系統(tǒng),通過臨時(shí)將通常從數(shù)據(jù)庫(kù)中檢索的信息存儲(chǔ)在內(nèi)存中。然后對(duì)內(nèi)存中的信息的下一個(gè)請(qǐng)求將變得非???#xff0c;而不會(huì)給后端數(shù)據(jù)庫(kù)帶來壓力。

在本指南中,我們將討論如何在 Ubuntu 14.04 服務(wù)器上安裝和使用 memcached。

先決條件

在開始之前,您應(yīng)該在服務(wù)器上擁有一個(gè)常規(guī)的非根用戶,該用戶具有 sudo 權(quán)限。如果您還沒有創(chuàng)建這樣的用戶,可以按照我們的 Ubuntu 14.04 初始設(shè)置指南中的步驟 1-4 進(jìn)行創(chuàng)建。

當(dāng)您配置好常規(guī)用戶后,可以繼續(xù)進(jìn)行本指南。

安裝 Memcached 和相關(guān)組件

要開始,我們應(yīng)該從 Ubuntu 的存儲(chǔ)庫(kù)中獲取我們需要的所有組件。幸運(yùn)的是,我們需要的一切都是可用的。

由于這是我們?cè)诒敬螘?huì)話中使用 apt 的第一個(gè)操作,我們應(yīng)該更新本地軟件包索引。然后我們可以安裝我們的程序。

我們將安裝 memcached 以及一個(gè) MySQL 數(shù)據(jù)庫(kù)后端和 PHP 來處理交互。我們還將安裝處理 memcached 交互的 PHP 擴(kuò)展。您可以通過輸入以下命令獲取所需的所有內(nèi)容:

sudo apt-get update
sudo apt-get install mysql-server php5-mysql php5 php5-memcached memcached

請(qǐng)注意,有兩個(gè) PHP memcache 擴(kuò)展可用。一個(gè)稱為 php5-memcache,另一個(gè)稱為 php5-memcached(請(qǐng)注意第二個(gè)示例末尾的 “d”)。我們使用后者,因?yàn)樗欠€(wěn)定的并實(shí)現(xiàn)了更廣泛的功能范圍。

如果您還沒有安裝 MySQL,安裝過程將提示您選擇并確認(rèn)管理員密碼。

這應(yīng)該安裝并配置您所需的一切。

檢查安裝

信不信由你,memcached 已經(jīng)完全安裝并準(zhǔn)備就緒。我們可以通過多種方式來測(cè)試這一點(diǎn)。

第一種方式非常簡(jiǎn)單。我們可以詢問 PHP 是否知道我們的 memcached 擴(kuò)展以及它是否已啟用。我們可以通過創(chuàng)建普遍存在的 PHP 信息頁(yè)面來實(shí)現(xiàn)這一點(diǎn)。

這很容易通過在我們的文檔根目錄中創(chuàng)建一個(gè)名為 info.php 的文件來實(shí)現(xiàn)。在 Ubuntu 14.04 上的 Apache 中,我們的默認(rèn)文檔根目錄是 /var/www/html。以 root 權(quán)限在此處打開文件:

sudo nano /var/www/html/info.php

在此文件中,輸入以下內(nèi)容。這基本上只是調(diào)用一個(gè) PHP 函數(shù),該函數(shù)會(huì)收集并以網(wǎng)頁(yè)友好的布局打印有關(guān)我們服務(wù)器的信息。

<?php
phpinfo();
?>

現(xiàn)在,您可以訪問您服務(wù)器的域名或公共 IP 地址,后面跟著 /info.php,您應(yīng)該會(huì)看到一個(gè)信息頁(yè)面。

http://<span class="highlight">server_domain_name_or_IP</span>/info.php

如果您向下滾動(dòng)或搜索 “memcached” 部分標(biāo)題,您應(yīng)該會(huì)找到類似以下內(nèi)容的內(nèi)容:

!Memcache PHP info section

這意味著 memcached 擴(kuò)展已啟用并被 Web 服務(wù)器找到。

我們還可以通過輸入以下命令來檢查 memcached 服務(wù)是否正在運(yùn)行:

ps aux | grep memcached
memcache  6584  0.0  0.0 327448  3004 ?        Sl   14:07   0:00 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
demouser  6636  0.0  0.0  11744   904 pts/0    S+   14:29   0:00 grep --color=auto memcached

您可以通過輸入以下命令查詢服務(wù)的統(tǒng)計(jì)信息:

echo "stats settings" | nc localhost 11211

如果您需要停止、啟動(dòng)或重新啟動(dòng) memcached 服務(wù),可以通過輸入以下類似的命令來執(zhí)行:

sudo service memcached <span class="highlight">restart</span>

測(cè)試 Memcached 是否可以緩存數(shù)據(jù)

現(xiàn)在我們已經(jīng)驗(yàn)證了 memcached 是否正在運(yùn)行,并且我們的 PHP 擴(kuò)展是否已啟用,我們可以嘗試讓它存儲(chǔ)數(shù)據(jù)。

我們將通過創(chuàng)建另一個(gè) PHP 腳本來實(shí)現(xiàn)這一點(diǎn)。這次,它將更加復(fù)雜。

在我們的文檔根目錄中打開一個(gè)名為 cache_test.php 的文件:

sudo nano /var/www/html/cache_test.php

在文件中,首先創(chuàng)建 PHP 包裝標(biāo)簽:

&lt;?php
?&gt;

在其中,我們將創(chuàng)建一個(gè) PHP Memcached 對(duì)象的新實(shí)例,并將其存儲(chǔ)在一個(gè)變量中。我們將定義此 PHP 對(duì)象可以連接到運(yùn)行在我們服務(wù)器上的實(shí)際 memcached 服務(wù)的位置。Memcached 默認(rèn)運(yùn)行在端口 11211 上:

&lt;?php
<span class="highlight">$mem = new Memcached();</span>
<span class="highlight">$mem->addServer("127.0.0.1", 11211);</span>
?&gt;

接下來,我們將告訴我們的 Memcached 實(shí)例從我們的緩存中查詢一個(gè)鍵。這個(gè)鍵可以被稱為任何東西,因?yàn)槲覀冞€沒有創(chuàng)建它。我們將使用 “blah”。此請(qǐng)求的結(jié)果將存儲(chǔ)在一個(gè) $result 變量中:

&lt;?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);<span class="highlight">$result = $mem->get("blah");</span>
?&gt;

接下來,我們只需要測(cè)試是否返回了任何內(nèi)容。如果 memcached 找到一個(gè)名為 “blah” 的鍵,我們希望它打印與該鍵關(guān)聯(lián)的值。如果 memcached 無法找到匹配的鍵,我們應(yīng)該打印出一條消息說明情況。

然后,我們應(yīng)該設(shè)置一個(gè)帶有值的鍵,這樣下次我們請(qǐng)求該值時(shí),memcached 將找到我們給它的值:

&lt;?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);$result = $mem->get("blah");<span class="highlight">if ($result) {</span><span class="highlight">echo $result;</span>
<span class="highlight">} else {</span><span class="highlight">echo "No matching key found.  I'll add that now!";</span><span class="highlight">$mem->set("blah", "I am data!  I am held in memcached!") or die("Couldn't save anything to memcached...");</span>
<span class="highlight">}</span>
?&gt;

此時(shí),我們的腳本已經(jīng)完成。如果我們?cè)?Web 瀏覽器中訪問此頁(yè)面,我們可以看到它是如何工作的:

http://<span class="highlight">server_domain_name_or_IP</span>/cache_test.php

您應(yīng)該最初會(huì)看到一個(gè)如下的頁(yè)面:

!Memcached uncached message

然而,如果我們刷新頁(yè)面,我們應(yīng)該會(huì)看到一個(gè)不同的消息:

!Memcached cached message

正如您所看到的,我們的 memcached 服務(wù)現(xiàn)在正在緩存我們的腳本設(shè)置的數(shù)據(jù)。

測(cè)試臨時(shí)緩存數(shù)據(jù)庫(kù)值

現(xiàn)在我們已經(jīng)測(cè)試了在 memcached 中存儲(chǔ)數(shù)據(jù)的能力,我們可以演示一個(gè)更加現(xiàn)實(shí)的場(chǎng)景:臨時(shí)緩存數(shù)據(jù)庫(kù)查詢結(jié)果。

在 MySQL 中創(chuàng)建示例數(shù)據(jù)

首先,我們需要在數(shù)據(jù)庫(kù)中存儲(chǔ)一些信息。

通過以下命令以管理員用戶身份連接到 MySQL 實(shí)例。您需要輸入在安裝過程中設(shè)置的 MySQL root 密碼:

mysql -u root -p

之后,您將進(jìn)入 MySQL 提示符。

首先,我們要?jiǎng)?chuàng)建一個(gè)用于測(cè)試的數(shù)據(jù)庫(kù)。然后選擇該數(shù)據(jù)庫(kù):

CREATE DATABASE mem_test;
USE mem_test;

讓我們創(chuàng)建一個(gè)名為 test,密碼為 testing123 的用戶,并賦予其對(duì)我們創(chuàng)建的數(shù)據(jù)庫(kù)的訪問權(quán)限:

GRANT ALL ON mem_test.* TO test@localhost IDENTIFIED BY 'testing123';

現(xiàn)在,我們將創(chuàng)建一個(gè)非?;镜谋?#xff0c;并向其中插入一條記錄。該表將被命名為 sample_data,并且只包含一個(gè)索引和一個(gè)字符串字段:

CREATE TABLE sample_data (id int, name varchar(30));
INSERT INTO sample_data VALUES (1, "some_data");

現(xiàn)在,我們已經(jīng)創(chuàng)建了結(jié)構(gòu)并插入了數(shù)據(jù)。我們可以退出 MySQL:

exit

創(chuàng)建用于緩存 MySQL 數(shù)據(jù)的 PHP 腳本

現(xiàn)在我們的數(shù)據(jù)已經(jīng)存儲(chǔ)在 MySQL 中,我們可以創(chuàng)建另一個(gè) PHP 腳本,其操作方式類似于生產(chǎn)環(huán)境中的 PHP 應(yīng)用程序。

它將在 memcached 中查找數(shù)據(jù),如果找到數(shù)據(jù),則返回?cái)?shù)據(jù)。如果沒有找到數(shù)據(jù),則將從數(shù)據(jù)庫(kù)中查詢,然后將結(jié)果存儲(chǔ)在 memcached 中以供將來查詢使用。

首先,在我們的文檔根目錄中創(chuàng)建另一個(gè) PHP 腳本。我們將這個(gè)腳本命名為 database_test.php

sudo nano /var/www/html/database_test.php

從我們上一個(gè)腳本開始。我們將創(chuàng)建一個(gè) PHP memcached 實(shí)例,然后告訴它我們服務(wù)器上運(yùn)行的 memcached 服務(wù)的位置,就像我們上次做的那樣:

<?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);
?>

接下來,與我們上一個(gè)腳本有所不同,我們需要定義 PHP 如何連接到我們的 MySQL 數(shù)據(jù)庫(kù)。我們需要指定我們創(chuàng)建的用戶的登錄憑據(jù),然后告訴它要使用哪個(gè)數(shù)據(jù)庫(kù):

<?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());
?>

接下來,我們需要設(shè)計(jì)查詢,以獲取我們插入到表中的數(shù)據(jù)。我們將把這個(gè)查詢存儲(chǔ)到一個(gè) $query 變量中。

然后,我們將創(chuàng)建一個(gè) $querykey 變量,用于存儲(chǔ) memcached 將用來引用我們信息的鍵。

我們通過使用字符串 “KEY”,然后將我們查詢的 md5(一種哈希方法)校驗(yàn)和附加到末尾來創(chuàng)建此鍵。這將確保如果我們?cè)诟蟮臄?shù)據(jù)集上使用此技術(shù),每個(gè)鍵都是唯一的。它還確保匹配的查詢將為后續(xù)請(qǐng)求產(chǎn)生相同的鍵。

<?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());$query = "SELECT ID FROM sample_data WHERE name = 'some_data'";
$querykey = "KEY" . md5($query);
?>

接下來,我們將創(chuàng)建一個(gè) $result 變量,就像我們上一個(gè)腳本一樣。這將保存我們的 memcached 查詢結(jié)果,就像以前一樣。我們要求 memcached 返回我們生成的查詢鍵,以查看它是否在其系統(tǒng)中標(biāo)識(shí)了一個(gè)記錄。

<?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());$query = "SELECT name FROM sample_data WHERE id = 1";
$querykey = "KEY" . md5($query);$result = $mem->get($querykey);
?>

現(xiàn)在,我們準(zhǔn)備進(jìn)行實(shí)際的測(cè)試邏輯,以確定在 memcached 中找到結(jié)果時(shí)會(huì)發(fā)生什么。如果找到結(jié)果,我們希望打印我們提取的數(shù)據(jù),并告訴用戶我們能夠直接從 memcached 中檢索到它:

<?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());$query = "SELECT name FROM sample_data WHERE id = 1";
$querykey = "KEY" . md5($query);$result = $mem->get($querykey);if ($result) {print "<p>Data was: " . $result[0] . "</p>";print "<p>Caching success!</p><p>Retrieved data from memcached!</p>";
}
?>

現(xiàn)在,讓我們?yōu)榱硪环N情況添加邏輯。如果未找到結(jié)果,我們希望使用我們創(chuàng)建的查詢來直接向 MySQL 請(qǐng)求數(shù)據(jù)。我們將把這個(gè)結(jié)果存儲(chǔ)到我們創(chuàng)建的 $result 變量中,這將是一個(gè)數(shù)組形式的結(jié)果。

在獲得查詢結(jié)果后,我們需要將該結(jié)果添加到 memcached 中,以便下次使用。我們可以通過向 memcached 提供我們要用來引用數(shù)據(jù)的鍵(我們已經(jīng)使用 $querykey 變量創(chuàng)建了這個(gè)鍵)、來自 MySQL 查詢的數(shù)據(jù)本身(存儲(chǔ)在 $result 變量中),以及以秒為單位的緩存數(shù)據(jù)的時(shí)間。

我們將緩存我們的內(nèi)容 10 秒。在現(xiàn)實(shí)世界中,緩存內(nèi)容更長(zhǎng)可能更有益。也許如果您的內(nèi)容不經(jīng)常更改,那么更接近 10 分鐘(600 秒)的時(shí)間會(huì)更好。對(duì)于測(cè)試來說,較小的值讓我們更快地看到發(fā)生的事情,而無需重新啟動(dòng)我們的 memcached 服務(wù)。

之后,我們將打印出一個(gè)類似的消息與查詢結(jié)果,并告訴用戶發(fā)生了什么。我們應(yīng)該將整個(gè)塊作為前面 ifelse 添加:

<?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("mem_test") or die(mysql_error());$query = "SELECT name FROM sample_data WHERE id = 1";
$querykey = "KEY" . md5($query);$result = $mem->get($querykey);if ($result) {print "<p>Data was: " . $result[0] . "</p>";print "<p>Caching success!</p><p>Retrieved data from memcached!</p>";
} else {$result = mysql_fetch_array(mysql_query($query)) or die(mysql_error());$mem->set($querykey, $result, 10);print "<p>Data was: " . $result[0] . "</p>";print "<p>Data not found in memcached.</p><p>Data retrieved from MySQL and stored in memcached for next time.</p>";
}
?>

這是我們完成的腳本。它將嘗試從 memcached 獲取數(shù)據(jù)并返回它。如果失敗,它將直接從 MySQL 查詢并將結(jié)果緩存 10 秒。

測(cè)試腳本

現(xiàn)在我們已經(jīng)編寫了腳本,可以通過在網(wǎng)頁(yè)瀏覽器中轉(zhuǎn)到文件位置來運(yùn)行它:

http://<span class="highlight">server_domain_name_or_IP</span>/database_test.php

第一次訪問頁(yè)面時(shí),我們應(yīng)該看到以下輸出:

Memcached uncached database query

如果我們?cè)谏洗卧L問后的 10 秒內(nèi)刷新頁(yè)面,現(xiàn)在頁(yè)面應(yīng)該顯示不同的消息:

Memcached cached database query

如果再等一會(huì)兒,緩存的內(nèi)容將會(huì)過期并從 memcached 中移除。此時(shí)我們可以刷新頁(yè)面以再次獲得第一條消息,因?yàn)榉?wù)器必須重新訪問數(shù)據(jù)庫(kù)以獲取適當(dāng)?shù)闹怠?/p>

結(jié)論

到目前為止,您應(yīng)該已經(jīng)對(duì) memcached 的工作原理有了相當(dāng)好的理解,以及如何利用它來避免 Web 服務(wù)器重復(fù)訪問數(shù)據(jù)庫(kù)以獲取相同的內(nèi)容。

雖然本指南中創(chuàng)建的 PHP 腳本只是示例,但它們應(yīng)該讓您對(duì)系統(tǒng)的工作原理有了很好的了解。它還應(yīng)該讓您對(duì)如何構(gòu)建代碼結(jié)構(gòu)有了很好的理解,以便您可以檢查 memcached,并在必要時(shí)返回?cái)?shù)據(jù)庫(kù)。

http://m.risenshineclean.com/news/32058.html

相關(guān)文章:

  • 做地方門戶網(wǎng)站如何做可靠的網(wǎng)站優(yōu)化
  • 怎么自己做網(wǎng)站發(fā)優(yōu)惠券seo搜索引擎優(yōu)化業(yè)務(wù)
  • 佛山電商網(wǎng)站制作seo自學(xué)教程
  • 租網(wǎng)站服務(wù)器價(jià)格seo霸屏
  • 網(wǎng)頁(yè)與網(wǎng)站設(shè)計(jì)nbsp的意思合肥做網(wǎng)站哪家好
  • 做家庭影院的有哪些網(wǎng)站防城港網(wǎng)站seo
  • 環(huán)保企業(yè)的網(wǎng)站怎么做指數(shù)基金是什么意思
  • seo外包 靠譜長(zhǎng)沙seo咨詢
  • 網(wǎng)站二維碼鏈接怎么做的遼陽(yáng)網(wǎng)站seo
  • 筑巢網(wǎng)站百度地圖廣告投放
  • 網(wǎng)站建設(shè)需要域名嗎鄭州seo網(wǎng)站有優(yōu)化
  • 外賣網(wǎng)站制作seo 關(guān)鍵詞優(yōu)化
  • 想做一個(gè)部門的網(wǎng)站怎么做頭條熱點(diǎn)新聞
  • 公司手機(jī)網(wǎng)站模板優(yōu)化大師win10下載
  • 手機(jī)如果做網(wǎng)站市場(chǎng)調(diào)研方案怎么寫
  • 網(wǎng)站開發(fā)工程師社交百度代發(fā)收錄
  • 做局域網(wǎng)網(wǎng)站百度圖片識(shí)別搜索引擎
  • szfob外貿(mào)論壇網(wǎng)站重慶seo推廣公司
  • 衡水哪有做網(wǎng)站的網(wǎng)站推廣的概念
  • 做考研政治真題的網(wǎng)站免費(fèi)手機(jī)網(wǎng)站建站系統(tǒng)
  • 各種類型網(wǎng)站建設(shè)售后完善免費(fèi)建站的網(wǎng)站哪個(gè)好
  • 2008iis網(wǎng)站建設(shè)找客戶的軟件有哪些
  • 眾籌網(wǎng)站建設(shè)廣告推廣圖片
  • 網(wǎng)站建設(shè)經(jīng)費(fèi)放哪個(gè)經(jīng)濟(jì)科目企業(yè)網(wǎng)站seo哪里好
  • 正保建設(shè)工程教育網(wǎng)合肥網(wǎng)絡(luò)優(yōu)化推廣公司
  • 廣州網(wǎng)站建設(shè)開發(fā)公司指數(shù)基金有哪些
  • 廈門企業(yè)網(wǎng)站開發(fā)公司2024年新冠第三波癥狀分析
  • 網(wǎng)頁(yè)設(shè)計(jì) 效果圖亞馬遜seo推廣
  • c語(yǔ)言做網(wǎng)站后臺(tái)服務(wù)百度關(guān)鍵詞排名銷售
  • 學(xué)習(xí)網(wǎng)站開發(fā)寧德市房?jī)r(jià)