OSCache的使用入门

 

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 scopeSession

    CacheFilter

    com.opensymphony.oscache.web.filter.CacheFilter

    

        time

        600

    

    

        scope

        session

    

    CacheFilter

    *.jsp

Example2:默认缓存的scopeapplication,时间是一个小时

    CacheFilterStaticContent

    com.opensymphony.oscache.web.filter.CacheFilter

    

        expires

        time

    

    CacheFilterStaticContent

    *.jsp

三 标签:

<%@ 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 .

· addgroups- It allows a comma-delimited list of group names to be dynamically added to a cached block. This tag must be nested inside .

1.cacheOSCache主要的标签。根据指定的属性,标签的体将被缓存。以后每次运行标签,它会检查,看看缓存的内容是否过期,如果下列条件成立的话,标签体的内容将被认为是过时的:

   1:标签体的内容超过了指定的缓存时间;默认为一小时,指定时以s为单位。

   2:超多了cron属性指定的日期或时间;

   3:通过flush标签,清除了指定的scope作用域的缓存。

如果缓存的主体内容是过期的,标签会再次执行和缓存新的主体内容。

属性:

① Key:这应该是为给定的范围内唯一的,因为重复的键映射到相同的缓存条目,因为缓存存放在map集合里面。key的默认值为使用URI转义版本和当前页面的查询字符串(默认值使用的URI转义版本和当前页面的查询字符串)

② scope:缓存存放的作用域,默认为application。可选的值为sessionapplication

③ time:指定缓存存放的时间,以秒为单位,默认为3600s,即一个小时。如果为负值表示永远不过期。

④ duration:这是和time属性二选一的。Duration可以通过simple date format指定。

⑤ croncron表达式确定缓存的内容什么时候过期,它允许缓存的内容在特殊的日期或时间过期,而不是当缓存的内容达到某个年龄。

介绍cron表达式:cron表达式的语法:

       cron表达式由下面5个字段组成:

Minute:指定缓存的内容在小时的第几分钟过期,取值范围是0-59

Hour:指定缓存的内容在一天的第几个小时将过期,这是指定使用24小时制,因此取值范围是:0(午夜)-23(上午11)

DOM:一个月的第几天。这是一个从131的数,它表示缓存的内容什么日子过期,如:在每月的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因为这些内容(与任何其他与该组相关的内容)被过期了,然后当页面被访问的时候,再次建立缓存。

" time="-1" group="currencyData, categories">

         ... display category list ...

         ... display currency information ...

 

2usecached 这个标签内嵌在一个标签中,表示标签是否使用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.这是很好的容错例子,当异常发生缓存的内容将不会被输出。

    

         <% try { %>

         ... some jsp content ...

         <% } catch (Exception e) { %>

              

         <% } %>

    

例如:  

<%out.print(new Date()); %> 

  

  

第一次访问的时候页面输出:Missing cached content ,如果接着把use改为false则会输出当前时间,当flush时,时间会改变。接着把use改为true,即使flush,时间也不会改变,它还会使用以前的缓存。

3flush 

这个标签是用来在运行时刷新缓存。这是特别有用,因为它可以将您的网站的管理部分编码,以便管理员可以决定何时刷新缓存。

属性:

Scope:这决定哪些范围将被刷新。有效值是“application”,“session”和null。空范围将刷新所有缓存,不论其范围。默认为all

Key:当同时指定了keyscope,表示一个缓存条目被标记为flush。当他下次被访问的时候缓存将被refresh。当仅指定了key而没有指定scope这是无效的。

group :指定一组将导致组中的所有缓存项被flush,如果仅仅指定group没有指定scope这是无效的。

4,addgroup 必须内嵌在标签内部,它允许一个组名,动态地添加到缓存的块中,

这将以keytest1cache块增加到组group1group2

 

         

         ... some jsp content ...

         

         ... some more jsp content ...

    

5,addgroups 必须内嵌在标签内部,

This will add the cache block with the key 'test1' to groups 'group1' and 'group2'.

    

         ... some jsp content ...

         

         ... some jsp content ...

四 属性文件的配置:

介绍仅涵盖了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可以被使用,但那将产生一个问题,由于非法的文件系统字符和长长的名字。

注意:HashDiskPersistenceListenerDiskPersistenceListener类需要cache.path的设置,以便知道在哪里可以保存文件到磁盘。

Cache.path:

这指定缓存将存储在磁盘上的哪个目录,该目录将被创建,如果它不存在,但是要记住OSCache 必须要有权限往这个路径写内容。避免不同的缓存共享相同的缓存路径,因为OSCache没有被设计来处理这些问题。

注意:对于windows系统,反斜杠字符“\”需要被转义。(反斜杠\backslash ;斜杠/forwardslash)。例如:cache.path=c:\\myapp\\cache 。

cache.persistence.overflow.only (NEW! Since 2.1):

指示的持久性是否应该只发生一次内存缓存容量已达到。为了向后兼容默认值是false,但是推荐值是truememory.cache被启用。这个属性大大改变了缓存的行为,在保存的缓存中将变的不同,那么内存中有什么。

其他的配置略。

你可能感兴趣的:(JavaEE,cache,application,cron,webservice,算法,intervals)