国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

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

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

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

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

簡介

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

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

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

先決條件

在開始之前,您應(yīng)該在服務(wù)器上擁有一個常規(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 的存儲庫中獲取我們需要的所有組件。幸運(yùn)的是,我們需要的一切都是可用的。

由于這是我們在本次會話中使用 apt 的第一個操作,我們應(yīng)該更新本地軟件包索引。然后我們可以安裝我們的程序。

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

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

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

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

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

檢查安裝

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

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

這很容易通過在我們的文檔根目錄中創(chuàng)建一個名為 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)用一個 PHP 函數(shù),該函數(shù)會收集并以網(wǎng)頁友好的布局打印有關(guān)我們服務(wù)器的信息。

<?php
phpinfo();
?>

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

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

如果您向下滾動或搜索 “memcached” 部分標(biāo)題,您應(yīng)該會找到類似以下內(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)計信息:

echo "stats settings" | nc localhost 11211

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

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

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

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

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

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

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

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

&lt;?php
?&gt;

在其中,我們將創(chuàng)建一個 PHP Memcached 對象的新實(shí)例,并將其存儲在一個變量中。我們將定義此 PHP 對象可以連接到運(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í)例從我們的緩存中查詢一個鍵。這個鍵可以被稱為任何東西,因?yàn)槲覀冞€沒有創(chuàng)建它。我們將使用 “blah”。此請求的結(jié)果將存儲在一個 $result 變量中:

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

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

然后,我們應(yī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;

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

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

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

!Memcached uncached message

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

!Memcached cached message

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

測試臨時緩存數(shù)據(jù)庫值

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

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

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

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

mysql -u root -p

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

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

CREATE DATABASE mem_test;
USE mem_test;

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

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

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

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)存儲在 MySQL 中,我們可以創(chuàng)建另一個 PHP 腳本,其操作方式類似于生產(chǎn)環(huán)境中的 PHP 應(yīng)用程序。

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

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

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

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

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

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

<?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è)計查詢,以獲取我們插入到表中的數(shù)據(jù)。我們將把這個查詢存儲到一個 $query 變量中。

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

我們通過使用字符串 “KEY”,然后將我們查詢的 md5(一種哈希方法)校驗(yàn)和附加到末尾來創(chuàng)建此鍵。這將確保如果我們在更大的數(shù)據(jù)集上使用此技術(shù),每個鍵都是唯一的。它還確保匹配的查詢將為后續(xù)請求產(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)建一個 $result 變量,就像我們上一個腳本一樣。這將保存我們的 memcached 查詢結(jié)果,就像以前一樣。我們要求 memcached 返回我們生成的查詢鍵,以查看它是否在其系統(tǒng)中標(biāo)識了一個記錄。

<?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í)際的測試邏輯,以確定在 memcached 中找到結(jié)果時會發(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 請求數(shù)據(jù)。我們將把這個結(jié)果存儲到我們創(chuàng)建的 $result 變量中,這將是一個數(shù)組形式的結(jié)果。

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

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

之后,我們將打印出一個類似的消息與查詢結(jié)果,并告訴用戶發(fā)生了什么。我們應(yīng)該將整個塊作為前面 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 秒。

測試腳本

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

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

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

Memcached uncached database query

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

Memcached cached database query

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

結(jié)論

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

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

http://www.aloenet.com.cn/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ù)器價格seo霸屏
  • 網(wǎng)頁與網(wǎng)站設(shè)計nbsp的意思合肥做網(wǎng)站哪家好
  • 做家庭影院的有哪些網(wǎng)站防城港網(wǎng)站seo
  • 環(huán)保企業(yè)的網(wǎng)站怎么做指數(shù)基金是什么意思
  • seo外包 靠譜長沙seo咨詢
  • 網(wǎng)站二維碼鏈接怎么做的遼陽網(wǎng)站seo
  • 筑巢網(wǎng)站百度地圖廣告投放
  • 網(wǎng)站建設(shè)需要域名嗎鄭州seo網(wǎng)站有優(yōu)化
  • 外賣網(wǎng)站制作seo 關(guān)鍵詞優(yōu)化
  • 想做一個部門的網(wǎng)站怎么做頭條熱點(diǎn)新聞
  • 公司手機(jī)網(wǎng)站模板優(yōu)化大師win10下載
  • 手機(jī)如果做網(wǎng)站市場調(diào)研方案怎么寫
  • 網(wǎng)站開發(fā)工程師社交百度代發(fā)收錄
  • 做局域網(wǎng)網(wǎng)站百度圖片識別搜索引擎
  • 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)站哪個好
  • 2008iis網(wǎng)站建設(shè)找客戶的軟件有哪些
  • 眾籌網(wǎng)站建設(shè)廣告推廣圖片
  • 網(wǎng)站建設(shè)經(jīng)費(fèi)放哪個經(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)頁設(shè)計 效果圖亞馬遜seo推廣
  • c語言做網(wǎng)站后臺服務(wù)百度關(guān)鍵詞排名銷售
  • 學(xué)習(xí)網(wǎng)站開發(fā)寧德市房價