調(diào)優(yōu)LAMP應(yīng)用程序的5種簡單方法:有效緩存數(shù)據(jù)
調(diào)優(yōu)LAMP 應(yīng)用程序的5 種簡單方法:
使用操作碼緩存、優(yōu)化 PHP 設(shè)置、管理require和include、優(yōu)化數(shù)據(jù)庫、有效緩存數(shù)據(jù)、
簡介
Wikipedia、Facebook 和 Yahoo! 等主要 web 屬性使用 LAMP 架構(gòu)來為每天數(shù)百萬的請求提供服務(wù),而 Wordpress、Joomla、Drupal 和 SugarCRM 等 web 應(yīng)用程序軟件使用其架構(gòu)來讓組織輕松部署基于 web 的應(yīng)用程序。
該架構(gòu)的優(yōu)勢在于其簡單性。而 .NET 這樣的堆棧和 Java™ 技術(shù)可能使用大量硬件、昂貴的軟件棧和復(fù)雜的性能調(diào)優(yōu),LAMP 堆棧可以運行于商品硬件之上,使用開源軟件棧。由于軟件棧是一個松散的組件集,而非一個整體堆棧,性能調(diào)優(yōu)是一大挑戰(zhàn),因為需要分析和調(diào)優(yōu)每個組件。
然而,這有幾個個簡單性能任務(wù)會對任何規(guī)模的網(wǎng)站的性能產(chǎn)生巨大的影響。在本文中,我們將探討旨在優(yōu)化 LAMP 應(yīng)用程序性能的 5 個這樣的任務(wù)。這些項目應(yīng)當很少需要對您的應(yīng)用程序進行架構(gòu)更改,使其成為***化您的 web 應(yīng)用程序所需的響應(yīng)能力和硬件需求的安全、便捷的選擇。
有效緩存數(shù)據(jù)
正如我們在上一節(jié)看到的,數(shù)據(jù)庫往往容易成為您 web 應(yīng)用程序性能的***痛點。但是如果您要查詢的數(shù)據(jù)不經(jīng)常改變怎么辦?在這種情況下,一個好的選擇就是在本地存儲這些結(jié)果,而非針對每個請求調(diào)用查詢。
我們之前探究的兩個操作碼緩存 APC 和 Wincache 具有實現(xiàn)上述操作的工具,其中您可以將 PHP 數(shù)據(jù)直接存儲到一個共享內(nèi)存段中,便于快速查詢。清單 3 提供了具體示例。
清單 3. 使用 APC 緩存數(shù)據(jù)庫結(jié)果的示例
- function getListOfUsers()
- {
- $list = apc_fetch('getListOfUsers');
- if ( empty($list) ) {
- $conn = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbuser', 'dbpass');
- $sql = 'SELECT id, name FROM users ORDER BY name';
- foreach ($conn->query($sql) as $row) {
- $list[] = $row;
- }
- apc_store('getListOfUsers',$list);
- }
- return $list;
- }
我們僅需一次執(zhí)行查詢。之后,我們將結(jié)果推送到 getListOfUsers 鍵下的 APC 緩存中。從這里開始,直到緩存到期,您就能夠直接從緩存中獲取結(jié)果數(shù)組,跳過 SQL 查詢。
APC 和 Wincache 并非一個用戶緩存的惟一選擇;memcache 和 Redis 是不需要您在與 Web 服務(wù)器相同的服務(wù)器上運行用戶緩存的其他流行選擇。這就提高了性能和靈活性,特別是當您的 web 應(yīng)用程序跨多個 Web 服務(wù)器向外擴展時。
結(jié)束語
在本文中,我們探究了調(diào)優(yōu)您的 LAMP 性能的 5 種簡單方法。我們不僅通過利用一個操作碼緩存和優(yōu)化 PHP 配置探究了 PHP 級別的技術(shù),而且探究了如何優(yōu)化您的數(shù)據(jù)庫設(shè)計來實現(xiàn)合理的索引編制。我們還探討了如何利用一個用戶緩存(以 APC 為例)來展示如何在數(shù)據(jù)不經(jīng)常改變時避免重復(fù)的數(shù)據(jù)庫調(diào)用。至此、五種調(diào)優(yōu)方法結(jié)束。