文件緩存、內存緩存與靜態化頁面的取捨

靜態和僞靜態都是各有優缺點的
靜態的好處是你生成了html文件,那麼訪問量高的時候,服務器的I/O是一個瓶頸。但數據庫的壓力小了,並且更新的時候,須要從新生成。

而僞靜態剛I/O的瓶頸比靜態的要小,可是數據庫的壓力比較大。

php

若是訪問量和併發比較大的話,就使用靜態吧。html

================web

靜態文件分發、分佈式很是容易,使用CDN很方便,通常不過時,海量流量應付很輕鬆,只需加CDN帶寬便可。數據庫

使用memcache這樣的內存緩存通常只緩存部分時間不敏感、業務不復雜的數據。以空間換速度。memcache對數據過時時間的控制能力較好。緩存

文件緩存:通常狀況下磁盤IO纔是主要壓力,除非SQL足夠複雜,耗費較多CPU。這個時候也能夠交給MySQL的查詢緩存解決。文件緩存常見於壓力不大的站點或者開源程序使用,具備適應性好、對運行環境要求低的特色。服務器

 

=================架構

我來講幾句廢話,樓主先把緩存的概念理解透再談緩存。

緩存是什麼,緩存就是把低速設備上的文件放入高速設備,把從離終端遠的位置移到靠近終端的位置。
over,就是這麼簡單。

理解了概念,你就不會困惑了。不理解請參考3L。3L就是對這個概念的闡述。
有了CDN,靜態訪問不是問題,再加上本地緩存,效果更好。

一切快慢都只是相對的,若是你認爲訪問和操做內存就是最快最好的,天下無敵的,那又錯了。
一方面,還有比內存更快的。如今基於JAVA的LMAX架構考慮的深度已經到了CPU的高速緩存這一層了,訪問和操做內存,慢!得想辦法能直接訪問高速緩存,並避免併發爭奪問題。另外一方面,還有某些場合下比內存訪問更合適的,如CDN。固然這個例子可能和主題關係不大。只是說明一切都是相對的。
併發

 

=======================分佈式

文件緩存:
仍是要請求PHP,由PHP來讀取硬盤上緩存的文件。有時候緩存的是整個頁面的HTML,有時候只是緩存部分數據或者變量值。
靜態化:
不須要PHP來處理,直接由web server讀取文件內容並輸出。靜態化文件的內容只能是HTML代碼或者SHTML代碼。好處是性能和分佈式上的優點,可是沒有PHP來處理靈活。
也有雜合的,好比使用僞靜態來統一URL,而後以必定策略來決定是訪問PHP仍是直接HTML。
wordpress

 

=======================

若是糾結,推薦一種方案:僞靜態和真靜態結合。
若是你看過wordpress的.htaccess文件,能夠發現這樣的僞靜態規則

  1. # BEGIN WordPress
  2. <IfModule mod_rewrite.c>
  3. RewriteEngine On
  4. RewriteBase /
  5. RewriteRule ^index\.php$ - [L]
  6. RewriteCond %{REQUEST_FILENAME} !-f
  7. RewriteCond %{REQUEST_FILENAME} !-d
  8. RewriteRule . /index.php [L]
  9. </IfModule>
  10. # END WordPress
複製代碼

那如何僞靜態+真靜態呢?
若是訪問壓力大,則生成HTML到指定位置,在重寫規則裏!-f條件不成立,這個時候就是真靜態;
若是這個頁面訪問數量少(好比是去年的新聞頁),這個時候真靜態意義已經不大了,這個時候能夠經過管理後臺直接刪除這個HTML。這個時候重寫規則裏!-f條件成立,由PHP分析請求的URL,並輸出HTML代碼。對用戶透明,感受不到區別。

優勢:可伸縮性、節省硬盤、性能和靈活性的最大化
缺點:對靜態頁面要求內容時效不敏感、要求可以啓用重寫規則

相關文章
相關標籤/搜索