開起mod_cache算法
基於硬盤文件的緩存
基於硬盤文件存儲的緩存由 mod_disk_cache 模塊實現,先看個簡單的配置例子:apache
<IfModule mod_cache.c>緩存
CacheDefaultExpire 86400<IfModule mod_disk_cache.c> CacheEnable disk / CacheRoot /tmp/apacheCache CacheDirLevels 5CacheDirLength 5CacheMaxFileSize 1048576CacheMinFileSize 10</IfModule>
</IfModule>app
把上面的配置加到 Apache 的 httpd.conf 文件中,若是緩存相關的模塊都已經編譯進了 Apache 的核心,則無需加載模塊,直接就能使用上面的指令。指令的詳細說明以下:ide
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 自動創建的一些目錄和緩存的數據文件。url
基於內存的緩存
基於內存的緩存主要由 mod_mem_cache 模塊實現,仍是看個簡單的配置吧,這樣比較直觀:-)spa
<IfModule mod_cache.c>orm
<IfModule mod_mem_cache.c> CacheEnable mem / MCacheMaxObjectCount 20000 MCacheMaxObjectSize 1048576 MCacheMaxStreamingBuffer 65536 MCacheMinObjectSize 10 MCacheRemovalAlgorithm GDSF MCacheSize 131072</IfModule>
</IfModule>對象
簡單說一下上面一些指令的意思:內存
CacheEnable:啓用緩存,使用基於內存的方式存儲
MCacheMaxObjectCount:在內存中最多能存儲緩存對象的個數,默認是1009,這裏設置爲20000
MCacheMaxObjectSize:單個緩存對象最大爲 1M,默認是10000bytes
MCacheMaxStreamingBuffer:在緩衝區最多可以放置多少的將要被緩存對象的尺寸,這裏設置爲 65536,該值一般小於100000或 MCacheMaxObjectSize 設置的值
MCacheMinObjectSize:單個緩存對象最小爲10bytes,默認爲1bytes
MCacheRemovalAlgorithm:清除緩存所使用的算法,默認是 GDSF,還有一個是LRU,能夠查一下 Apache 的官方文檔,上面有些介紹
MCacheSize:緩存數據最多能使用的內存,單位是 kb,默認是100kb,這裏設置爲128M
保存重啓 Apache 基於內存的緩存系統應該就能生效了,根據須要可使基於內存的存儲或硬盤文件的存儲方式一塊兒使用,只要指明不一樣的URL路徑便可。
注意事項
使用緩存須要注意以下事項:
要使用緩存,必須使用指令 CacheEnable 啓用它,目前可用的緩存類型爲 disk 或 mem,禁止緩存可使用 CacheDisable,如 CacheDisable /private待緩存的 URL 返回的狀態值必須爲: 200、20三、300、301 或 410URL 的請求方式必須是 GET 方式發送請求時,頭部中包含 「Authorization: 」的字符串時,返回的內容將不會被緩存URL 包含查詢字符串,如問號?後的那些東西,除非返回的內容包含「Expires:」,不然不會被緩存若是返回的狀態值是 200,則返回的頭部信息必須包含如下的一種纔會被緩存:Etag、Last-Modified、Expires,除非設置了指令 CacheIgnoreNoLastMod On若是返回內容的頭部信息「Cache-Control:」中包含「private」,除非設置了指令 CacheStorePrivate On,不然不會被緩存若是返回內容的頭部信息「Cache-Control:」中包含「no-sotre」,除非設置了指令 CacheStoreNoStore On,不然不會被緩存若是返回內容的頭部信息「Vary:」中包含了「*」,不會被緩存