Web快取

lm_y發表於2017-09-07
  相信大家對於瀏覽器快取(參看“快取”類別->"瀏覽器快取"相關文章)有了一定的認識了,但是瀏覽器快取畢竟不受web伺服器控制,我們只能通過web伺服器給出友好提示,至於瀏覽器是否完全按照指示執行,那就看使用者對於瀏覽器的設定了,如果使用者禁用了瀏覽器快取,那麼我們對於瀏覽器所做的設定都會白費,可見相對於瀏覽器,還是web伺服器比較靠譜,畢竟web伺服器的設定是由我們來掌控,既然瀏覽器有快取,那麼web伺服器是否也有快取呢?答案是肯定的,下面就以Apache為例,看下web伺服器的快取吧。

    測試環境說明

    本文使用的Apache版本為 2.2.8,Apache2.2版本的官方文件中關於快取模組有mod_cache,mod_disk_cache和mod_mem_cache,而在Apache2.4版本的官方文件中卻有所變動,模組名稱變為mod_cache,mod_cache_disk和mod_cache_socache,雖然清除了mod_mem_cache,新增了mod_cache_socache,但是對於mod_disk_cache卻沒有多大影響,因此我們可以使用磁碟快取作為web伺服器快取,這樣即使更換了高版本的Apache,對於快取模組的配置來說也無需做太多調整。

    配置Apache快取

  1. LoadModule cache_module modules/mod_cache.so  
  2. LoadModule disk_cache_module modules/mod_disk_cache.so  
  3. CacheRoot E:/tmp  
  4. CacheEnable disk /  
  5. CacheDirLevels 5  
  6. CacheDirLength 3  

    LoadModule開啟相關模組,CacheRoot快取檔案存放目錄,CacheEnable啟用disk型別快取(也就是磁碟快取,2.2版本中還有mem記憶體快取),CacheDirLevels快取檔案目錄深度,5代表了一共巢狀5個資料夾,CacheDirLength快取資料夾名稱長度,3代表每個資料夾名稱的長度是3,此處僅對Apache快取做了簡單的配置,想要了解更詳細的配置資訊可以點選此處

    測試靜態檔案快取

    配置完成後我們來測試下配置的Apache快取是否生效,我們輸入一個靜態頁面的url,然後到快取檔案存放目錄(CacheRoot中設定的值)中尋找,果然生成了很多資料夾,我們開啟其中一個,在最底層資料夾中我們終於找到了快取檔案,其中以.data結尾的檔案儲存著響應內容,以.header結尾的檔案儲存著頭資訊,有些童鞋可能就會有疑問了,為什麼要分開儲存?因為分開儲存是為快取過期檢查提供了方便,只需要檢查頭資訊的檔案即可。為什麼要進行過期檢查?難道你希望Apache永遠使用這份快取內容去響應使用者的請求嗎?所以我們需要對檔案進行過期檢查。


    目錄分級的好處

    相信不少童鞋在剛才開啟層級目錄的時候鬱悶了,怎麼這麼多資料夾,童鞋別忘了,這是你自己的設定的哦(CacheDirLevels和CacheDirLength)。你可能會問了,能不能設定的少一點,當然可以,因為決定權在你手裡,但是這裡小編有必要提醒你一下,如果設定的目錄層級很淺,導致大量的檔案堆積在一個資料夾中,會增加查詢開銷。為了更加形象的描述,小編舉個例子,相信大家都使用過瀏覽器的快取功能,一般情況下不會清除,如果你很久沒清理過瀏覽器的快取的話,那麼你可以嘗試著開啟瀏覽器的快取資料夾,以小編的google瀏覽器快取資料夾為例,快取檔案3575個,檔案大小364MB,開啟資料夾耗時5s。僅僅3000多個檔案,光開啟資料夾的時間就已經耗費了5s,如果在加上查詢,那耗時就更不可估計。我們使用快取的目的就是讓web伺服器更快的響應使用者的請求,如果耗時如此之久,還不如直接響應請求,不使用快取。因此,合理的目錄結構的設定十分必要,至於如何分級,可以視情況而定。

    小結

    1.Apache2.4中cache相關模組跟Apache2.2中有所不同,Apache2.4更改了disk模組的名稱,並去掉了mem模組,新增了socache模組,並增加一些Apache2.2中沒有的配置選項,如果使用Apache2.4可以根據官方文件自行配置。

    2.目錄分級是一種設計思路,當程式設計的場景中可能會出現一個資料夾中生成大量檔案的時候(例如各種快取),我們就應該考慮對這樣的檔案儲存方式作出調整,使用目錄分級,儘可能讓這些檔案分攤到不同的目錄中去,這樣會減少同一目錄大量檔案的查詢開銷,節省伺服器資源。

相關文章