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