OScached页面缓存的入门使用
OSCache的使用:
一,環境的搭建:
?1,把oscache.jar?file放在?/WEB-INF/lib?目錄下(Put?the?oscache.jar?file?in?the?/WEB-INF/lib?directory)
2,如果commons-logging.jar文件不存在,也要把它放進/WEB-INF/lib?目錄下
3,把/etc/oscache.properties放進類路徑下
注意:Remember?to?escape?any?\?characters?in?Windows?paths?-?e.g.?if?you?want?cache?files?to?go?in?c:\cachedir,?the?cache.path?property?should?be?set?to?c:\?\cachedir.
二,OSCache?處理一個servlet?Filter,使你能夠很容易的緩存你網站的整個頁面,甚至是二進制數據,二進制文件的緩存非常有用當他們被動態產生。
配置Filter:
Example1:時間是10minutes?scope:Session
<filter>
????<filter-name>CacheFilter</filter-name>
????<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
????<init-param>
????????<param-name>time</param-name>
????????<param-value>600</param-value>
????</init-param>
????<init-param>
????????<param-name>scope</param-name>
????????<param-value>session</param-value>
????</init-param>
</filter>
<filter-mapping>
????<filter-name>CacheFilter</filter-name>
????<url-pattern>*.jsp</url-pattern>
</filter-mapping>
Example2:默認緩存的scope是application,時間是一個小時
<filter>
????<filter-name>CacheFilterStaticContent</filter-name>
????<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
????<init-param>
????????<param-name>expires</param-name>
????????<param-value>time</param-value>
????</init-param>
</filter>
<filter-mapping>
????<filter-name>CacheFilterStaticContent</filter-name>
????<url-pattern>*.jsp</url-pattern>
</filter-mapping>
三?標簽:
<%@?taglib?uri="http://www.opensymphony.com/oscache"?prefix="cache"?%>
主要的標簽有:
·?cache-?The?main?caching?tag
·?usecached-?A?nested?tag?to?force?using?a?cached?version.
·?flush-?To?flush?caches?programmatically.
·?addgroup-?It?allows?a?single?group?name?to?be?dynamically?added?to?a?cached?block.?This?tag?must?be?nested?inside?<cache:cache/>.
·?addgroups-?It?allows?a?comma-delimited?list?of?group?names?to?be?dynamically?added?to?a?cached?block.?This?tag?must?be?nested?inside?<cache:cache/>.
1.cache是OSCache主要的標簽。根據指定的屬性,標簽的體將被緩存。以后每次運行標簽,它會檢查,看看緩存的內容是否過期,如果下列條件成立的話,標簽體的內容將被認為是過時的:
???1:標簽體的內容超過了指定的緩存時間;默認為一小時,指定時以s為單位。
???2:超多了cron屬性指定的日期或時間;
???3:通過flush標簽,清除了指定的scope作用域的緩存。
如果緩存的主體內容是過期的,標簽會再次執行和緩存新的主體內容。
屬性:
①?Key:這應該是為給定的范圍內唯一的,因為重復的鍵映射到相同的緩存條目,因為緩存存放在map集合里面。key的默認值為使用URI轉義版本和當前頁面的查詢字符串(默認值使用的URI轉義版本和當前頁面的查詢字符串)。
②?scope:緩存存放的作用域,默認為application。可選的值為session和application。
③?time:指定緩存存放的時間,以秒為單位,默認為3600s,即一個小時。如果為負值表示永遠不過期。
④?duration:這是和time屬性二選一的。Duration可以通過simple?date?format指定。
⑤?cron:cron表達式確定緩存的內容什么時候過期,它允許緩存的內容在特殊的日期或時間過期,而不是當緩存的內容達到某個年齡。
介紹cron表達式:cron表達式的語法:
???????cron表達式由下面5個字段組成:
Minute:指定緩存的內容在小時的第幾分鐘過期,取值范圍是0-59;
Hour:指定緩存的內容在一天的第幾個小時將過期,這是指定使用24小時制,因此取值范圍是:0(午夜)-23(上午11點)。
DOM:一個月的第幾天。這是一個從1到31的數,它表示緩存的內容什么日子過期,如:在每月的10號過期,應該把值設為10。
Month:一年的第幾月使內容過期,它可以通過數字1-12或者月的英文名字(eg?'January')指定。月的名稱對大小寫是不敏感的,只考慮前三個字符,其他部分忽略。
DOW:一周的第幾天使緩存的內容過期,它可以是數字(0-6,0=星期天,6=星期六)或者是英文的星期名稱。和月份一樣大小寫是不敏感的,只考慮前三個字符,其他部分忽略。
注意:當你不想給某個字段給定特定的值,你可以使用"*"代替。
OSCache的也允許你選擇性地指定每個字段內的列表,范圍和時間間隔(甚至是三者的結合)
List:集合中的列表項通過","分隔,緩存過期的時間和每個列表項匹配,例如:"0,15,30,45?*?*?*?*",表示緩存中的內容每隔15分鐘過期一次。
Ranges:使用"-"指定范圍。一個范圍將包括所有值從開始到結束值(包括起始值)例如:?"*?*?*?Jan-June?*"表示一年的前六個月緩存將過期。?Intervals:一個間隔通過"/"指定。左邊的“/”字符的值表示的出發點或范圍值應遞增超過,而右邊的值表示間隔的時間長度。例如:"10/20?*?*?*?*"?相當于?"10,30,50?*?*?*?*",?而"10-45/20?*?*?*?*"?只匹配過去每個小時的10-30分鐘,因為50已經超過了范圍。
⑥?refresh:布爾值,如為true緩存將被刷新,不管緩存的內容是否過期。使你能決定是否重新緩存內容。
⑦?mode:如果把值設置為"silent",將防止標簽體被寫入到輸出流。
⑧?groups:用逗號分隔組里面的名稱,根據你的需要允許把緩存的條目分組。分組是非常有用的當你的緩存內容依賴應用或數據的其他部分,當這些依賴發生變化,flush相關的組將將導致所有緩存的條目在組中過期。
假設我們有一個類別的動態清單,我們從數據庫中拉,我們也偶爾得到更新,通過調用一個WebService存儲外幣兌換利率。假設,我們也有一些
內容,顯示有關類別和當前的匯率值的信息。下面緩存緩存主體內容的例子分配給2個緩存組?"currencyData"和"categoryList"。當匯率和類別
列表發生更新,相關的組將被flush因為這些內容(與任何其他與該組相關的內容)被過期了,然后當頁面被訪問的時候,再次建立緩存。
<cache:cache?key="<%=?product.getId()?%>"?time="-1"?group="currencyData,?categories">
?????????...?display?category?list?...
?????????...?display?currency?information?...
?</cache:cache>
2,usecached?這個標簽內嵌在一個<cache>標簽中,表示<cache>標簽是否使用cached?version
屬性:use:默認值為true,表示使用cached?version,這是有用的對于編程式控制緩存。
例如:
This?is?a?good?example?of?error?tolerance.?If?an?exception?occurs,?the?cached?version?of?this?content?will?be?output?instead.這是很好的容錯例子,當異常發生緩存的內容將不會被輸出。
????<cache:cache>
?????????<%?try?{?%>
?????????...?some?jsp?content?...
?????????<%?}?catch?(Exception?e)?{?%>
??????????????<cache:usecached?/>
?????????<%?}?%>
????</cache:cache>
例如:<cache:cache>??
<%out.print(new?Date());?%>?
<cache:usecached?use="true"/>??
??</cache:cache>
第一次訪問的時候頁面輸出:Missing?cached?content?,如果接著把use改為false則會輸出當前時間,當flush時,時間會改變。接著把use改為true,即使flush,時間也不會改變,它還會使用以前的緩存。
3,flush?
這個標簽是用來在運行時刷新緩存。這是特別有用,因為它可以將您的網站的管理部分編碼,以便管理員可以決定何時刷新緩存。
屬性:
Scope:這決定哪些范圍將被刷新。有效值是“application”,“session”和null。空范圍將刷新所有緩存,不論其范圍。默認為all。
Key:當同時指定了key和scope,表示一個緩存條目被標記為flush。當他下次被訪問的時候緩存將被refresh。當僅指定了key而沒有指定scope這是無效的。
group?:指定一組將導致組中的所有緩存項被flush,如果僅僅指定group沒有指定scope這是無效的。
4,addgroup?必須內嵌在<cache:cache>標簽內部,它允許一個組名,動態地添加到緩存的塊中,
這將以key為test1的cache塊增加到組group1和group2:
?<cache:cache?key="test1">
?????????<cache:addgroup?group="group1"?/>
?????????...?some?jsp?content?...
?????????<cache:addgroup?group="group2"?/>
?????????...?some?more?jsp?content?...
????</cache:cache>
5,addgroups?必須內嵌在<cache:cache>標簽內部,
This?will?add?the?cache?block?with?the?key?'test1'?to?groups?'group1'?and?'group2'.
????<cache:cache?key="test1">
?????????...?some?jsp?content?...
?????????<cache:addgroups?groups="group1,group2"?/>
?????????...?some?jsp?content?...
</cache:cache>
四?屬性文件的配置:
介紹僅涵蓋了OSCache的配置,使用的oscache.properties文件,下面的屬性能夠被設置在oscache.properties文件中:
Cache.memory:
有效值是真的還是假的,默認值為true。如果你想禁用內存緩存,只需要注釋掉或刪除此行。
禁用內存和磁盤緩存是可能的,而且相當愚蠢。
Cache.capacity:
緩存支持緩存條目的最大數量,默認情況下,容量是無限的。緩存將不會刪除任何緩存條目。負的值也將意味著無限容量。
Cache.algorithm:
使用默認的緩存算法。請注意,為了使用一種算法,還必須指定緩存的大小,如果未指定緩存的大小,緩存算法將是無限的緩存,而不管這個屬性的值,如果你指定了大小,但沒有指定算法,所使用的緩存算法將為com.opensymphony.oscache.base.algorithm.LRUCache。
OSCache的目前帶有三種算法:
com.opensymphony.oscache.base.algorithm.LRUCache?--------最近最少使用。這是一個默認值當cache.capacity設置了值。
com.opensymphony.oscache.base.algorithm.FIFOCache?--------先進先出。
com.opensymphony.oscache.base.algorithm.UnlimitedCache---------添加到緩存中的內容,是絕不會被丟棄的,這是默認值當?cache.capacity屬性沒有設置值。
Cache.blocking:
當一個請求一個過期的緩存條目,它可能被另一個線程正在重建該緩存的過程中。
此設置指定OSCache如何處理后來的“非重建緩存”的線程。
默認行為(cache.blocking?=?FALSE)是把過期內容給后面的線程,直到緩存條目已更新。這提供最佳的性能(僅僅花費稍微過時的數據服務的成本)。
當阻塞被啟用,線程反而會阻塞,直到新的緩存條目準備提供,一旦新的條目放進了緩存中,阻塞的線程將重新啟動并給予最新的緩存內容。
請注意,即使阻塞被禁用,當沒有過期的數據可提供,線程將被阻塞直到通過線程把建立緩存的數據放進緩存內。
Cache.unlimited.disk:
指示磁盤緩存是否應無限制。默認值是false,在這種情況下,磁盤緩存也可以和內存緩存一樣通過?cache.capacity屬性設置緩存大小
Cache.persistence.class:
指定一個類用于持久化緩存條目。這個樣的類必須實現PersistenceListener?接口。OSCache?有一個這樣的實現提供了一個基于持久化的文件系統。設置這樣的屬性給com.opensymphony.oscache.plugins.diskpersistence.HashDiskPersistenceListener類去啟用這個實現。你應該可以保存緩存數據使用像JDBC,?LDAP.?NOTE通過指定你自己的類。這個類的對象的哈希碼和toString方法返回的值將被緩存用來生成緩存條目的文件名稱。如果你喜歡可讀的文件名稱,父DiskPersistenceListener可以被使用,但那將產生一個問題,由于非法的文件系統字符和長長的名字。
注意:HashDiskPersistenceListener和DiskPersistenceListener類需要cache.path的設置,以便知道在哪里可以保存文件到磁盤。
Cache.path:
這指定緩存將存儲在磁盤上的哪個目錄,該目錄將被創建,如果它不存在,但是要記住OSCache?必須要有權限往這個路徑寫內容。避免不同的緩存共享相同的緩存路徑,因為OSCache沒有被設計來處理這些問題。
注意:對于windows系統,反斜杠字符“\”需要被轉義。(反斜杠\backslash?;斜杠/forwardslash)。例如:cache.path=c:\\myapp\\cache 。
cache.persistence.overflow.only?(NEW!?Since?2.1):
指示的持久性是否應該只發生一次內存緩存容量已達到。為了向后兼容默認值是false,但是推薦值是true當memory.cache被啟用。這個屬性大大改變了緩存的行為,在保存的緩存中將變的不同,那么內存中有什么。
轉載于:https://www.cnblogs.com/sbj-dawn/p/7841390.html
總結
以上是生活随笔為你收集整理的OScached页面缓存的入门使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7 systemctl st
- 下一篇: 看京东如何虐待上帝