記憶體快取目前不推薦使用
apache快取系統
apache 從2.0開始就已經可以使用快取模組了,不過在2.0的時候還是實驗性的,到了2.2已經完全可以放心的使用。apache 的快取實現主要依靠 mod_cache、mod_disk_cache、mod_file_cache 及 mod_mem_cache。只需在配置編譯的時候加上引數:–enable-cache、 –enable-disk-cache、–enable-file-cache、 –enable-mem-cache 即可。
關於 apache 的編譯安裝本文就不再說了,可以參考以前的文章。這裡主要介紹一下如何配置使用 apache 的快取功能。
具體來說,apache 的快取方式有兩種,一種是基於硬碟檔案的 快取,由 mod_disk_cache 實現,另一種是使用記憶體快取,由 mod_mem_cache 實現,不過它們都是依賴 mod_cache 模組的,mod_cache 模組提供了一些快取配置的指令供它們使用,而 mod_file_cache 模組是搭配 mod_mem_cache 模組使用的,下面分別進行介紹。
1、基於硬碟檔案的快取
基於硬碟檔案儲存的快取由 mod_disk_cache 模組實現,先看個簡單的配置例子:
cachedefaultexpire 86400
cacheenable disk /
cacheroot /tmp/apachecache
cachedirlevels 5
cachedirlength 5
cachemaxfilesize 1048576
cacheminfilesize 10
把上面的配置加到 apache 的 httpd.conf 檔案中,如果快取相關的模組都已經編譯進了 apache 的核心,則無需載入模組,直接就能使用上面的指令。指令的詳細說明如下:
cachedefaultexpire: 設定快取過期的時間(秒),預設是1小時,只有當快取的文件沒有設定過期時間或最後修改時間時這個指令才會生效
cacheenable:啟用快取,第1個引數是快取類弄,這裡當然是 disk了,第2個引數是快取路徑,指的是 url 路徑,這裡是快取所有的東西,直接寫上「/」即可,如「/docs」則只快取 /docs 下的所有檔案
cacheroot:快取檔案所在的目錄,執行 apache 的使用者(如daemon 或 nobody)要能對其進行讀寫,如果不清楚的話可以直接設定成 777,請手動建立該目錄並設定好訪問許可權
cachedirlevels:快取目錄的深度,預設是3,這裡設定為5
cachedirlength:快取目錄名的字元長度,預設是4,這裡設定為5
cachemaxfilesize 和 cachemaxfilesize:快取檔案的最大值和最小值(byte),當超過這個範圍時將不再快取,這裡設定為 1m 和 10bytes
基於硬碟檔案儲存的檔案基本上就這些內容,設定好後重啟 apache 應該就能使用了。一切正常的話,可以在快取目錄下看到 apache 自動建立的一些目錄和快取的資料檔案。
2、基於記憶體的快取
基於記憶體的快取主要由 mod_mem_cache 模組實現,還是看個簡單的配置吧,這樣比較直觀:-)
cacheenable mem /
mcachemaxobjectcount 20000
mcachemaxobjectsize 1048576
mcachemaxstreamingbuffer 65536
mcacheminobjectsize 10
mcacheremovalalgorithm gdsf
mcachesize 131072
簡單說一下上面一些指令的意思:
cacheenable:啟用快取,使用基於記憶體的方式儲存
mcachemaxobjectcount:在記憶體中最多能儲存快取物件的個數,預設是1009,這裡設定為20000
mcachemaxobjectsize:單個快取物件最大為 1m,預設是10000bytes
mcachemaxstreamingbuffer:在緩衝區最多能夠放置多少的將要被快取物件的尺寸,這裡設定為 65536,該值通常小於100000或 mcachemaxobjectsize 設定的值
mcacheminobjectsize:單個快取物件最小為10bytes,預設為1bytes
mcacheremovalalgorithm:清除快取所使用的演算法,預設是 gdsf,還有乙個是lru,可以查一下 apache 的官方文件,上面有些介紹
mcachesize:快取資料最多能使用的記憶體,單位是 kb,預設是100kb,這裡設定為128m
儲存重啟 apache 基於記憶體的快取系統應該就能生效了,根據需要可以使基於記憶體的儲存或硬碟檔案的儲存方式一起使用,只要指明不同的url路徑即可。
3、注意事項
使用快取需要注意如下事項:
要使用快取,必須使用指令 cacheenable 啟用它,目前可用的快取型別為 disk 或 mem,禁止快取可以使用 cachedisable,如 cachedisable /private
待快取的 url 返回的狀態值必須為: 200、203、300、301 或 410
url 的請求方式必須是 get 方式
傳送請求時,頭部中包含 「authorization: 」的字串時,返回的內容將不會被快取
url 包含查詢字串,如問號?後的那些東西,除非返回的內容包含「expires:」,否則不會被快取
如果返回的狀態值是 200,則返回的頭部資訊必須包含以下的一種才會被快取:etag、last-modified、expires,除非設定了指令 cacheignorenolastmod on
如果返回內容的頭部資訊「cache-control:」中包含「private」,除非設定了指令 cachestoreprivate on,否則不會被快取
如果返回內容的頭部資訊「cache-control:」中包含「no-sotre」,除非設定了指令 cachestorenostore on,否則不會被快取
如果返回內容的頭部資訊「vary:」中包含了「*」,不會被快取
4、其它一些指令的介紹
如果你的**有幾個檔案的訪問非常頻繁而又不經常變動,則可以在 apache 啟動的時候就把它們的內容快取到記憶體中(當然要啟用記憶體快取系統),使用的是 mod_file_cache 模組,具體如下:
有多個檔案可以用空格格開
mmapfile /var/www/html/index.html /var/www/html/articles/index.html
上面是快取檔案的內容到記憶體中,除此之外,還可以只快取檔案的開啟控制代碼到記憶體中,當有請求進來的時候,apache 直接從記憶體中獲取檔案的控制代碼,返回內容,和 mmapfile 指令很像,具體如下:
cachefile /var/www/html/index.html /var/www/html/articles/index.html
上面兩個指令所快取的檔案如果有修改的話,必須重啟 apache 或使用 graceful 之類的方式強制使 apache 更新快取資料,否則當使用者訪問的時候獲取的不是最新的資料。
有時候需要根據某些特殊的頭部資訊來決定是否進行快取,則可以使用如下指令:
當頭部資訊中包含 set-cookie 時則跳過不進行快取操作
cacheignoreheaders set-cookie
有時候需要快取的時候跳過 url 中的查詢字串?使用如下指令:
cacheignorequerystring on
apache 的快取系統不僅可以快取伺服器本 身的檔案,也可以快取通過**得到的內容,對了,apache 可以像 squid 一樣做**,而且做的還不錯,下篇文章就介紹一下 apache 的**功能吧。善用 apache 的快取功能,可以讓你的**速度提公升不少。做為乙個**來說,雖然可用的各種快取方案很多,但在 web 伺服器層做快取的效率還是很值得一試的。收藏
分享評分如果喜歡eb163,請把eb163.com推薦給你的朋友,您的支援是eb163前進的最大動力。
eb163會員共贏推廣計畫
apache和nginx配置不快取檔案
apache 首先確定配置檔案httpd.conf中確已經載入mod headers模組。loadmodule headers module modules mod headers.so 我們可以根據檔案型別來讓瀏覽器每次都從伺服器讀取,這裡測試用css js swf php html htm這幾種...
Apache設定檔案快取時間
apache要設定檔案快取時間,要依靠乙個叫mod expires的模組,但是,我們的機器上,原本是沒有安裝這個模組的,幸運的是,apache安裝這個模組很簡單,首先找到源 比如我們的是2.2.22的版本 這樣就完成了mod expores模組的安裝,下面需要修改一下配置檔案 在裡面加入如下語句 啟...
快取和記憶體的區別
許多人認為,快取 是記憶體的一部分 許多技術文章都是這樣教授的 但是還是有很多人不知道快取在什麼地方,快取是做什麼用的 其實,快取是cpu的一部分,它存在於cpu中 cpu訪問資料的速度非常的快,一秒鐘能夠訪問 處理十億條指令和資料 術語 cpu主頻1g 而記憶體就慢很多,快的記憶體能夠達到幾十兆就...