当前位置: 首页 > 工具软件 > OSCache > 使用案例 >

Java的中间件-OSCache

罗毅
2023-12-01

使用OSCache进行简单的缓存

在目前流行的三种开源的缓存工具中,OSCache的配置和使用应给是最简单的了,它主要是针对页面级的配置,EHCache主要针对对象级的缓存,MemCached应该是比较完整的了。接下来我们简单的讲一下在你的系统中怎样快速的应用上OSCache。只需简单的两步。

第一步:加载oscache.properties文件,默认放到src目录下。下面是oscache.xml的默认配置。你只需简单的去掉一些注释就可以用了。

# CACHE IN MEMORY

#

# If you want to disable memory caching, just uncomment this line.

#

# cache.memory=false

# CACHE KEY

#

# This is the key that will be used to store the cache in the application

# and session scope.

#

# If you want to set the cache key to anything other than the default

# uncomment this line and change the cache.key

#

# cache.key=__oscache_cache

# USE HOST DOMAIN NAME IN KEY

#

# Servers for multiple host domains may wish to add host name info to

# the generation of the key. If this is true, then uncomment the

# following line.

#

# cache.use.host.domain.in.key=true

# CACHE LISTENERS

#

# These hook OSCache events and perform various actions such as logging

# cache hits and misses, or broadcasting to other cache instances across a cluster.

# See the documentation for further information.

#

# cache.event.listeners=com.opensymphony.oscache.plugins.clustersupport.JMSBroadcastingListener, /

# com.opensymphony.oscache.extra.CacheEntryEventListenerImpl, /

# com.opensymphony.oscache.extra.CacheMapAccessEventListenerImpl, /

# com.opensymphony.oscache.extra.ScopeEventListenerImpl, /

# com.opensymphony.oscache.extra.StatisticListenerImpl

# CACHE PERSISTENCE CLASS

#

# Specify the class to use for persistence. If you use the supplied DiskPersistenceListener,

# don't forget to supply the cache.path property to specify the location of the cache

# directory.

#

# If a persistence class is not specified, OSCache will use memory caching only.

#

# cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener

# cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.HashDiskPersistenceListener

# CACHE OVERFLOW PERSISTENCE

# Use persistent cache in overflow or not. The default value is false, which means

# the persistent cache will be used at all times for every entry. true is the recommended setting.

#

# cache.persistence.overflow.only=true

# CACHE DIRECTORY

#

# This is the directory on disk where caches will be stored by the DiskPersistenceListener.

# it will be created if it doesn't already exist. Remember that OSCache must have

# write permission to this directory.

#

# Note: for Windows machines, this needs / to be escaped

# ie Windows:

# cache.path=c://myapp//cache

# or *ix:

# cache.path=/opt/myapp/cache

#

# cache.path=c://app//cache

# CACHE ALGORITHM

#

# Default cache algorithm to use. Note that in order to use an algorithm

# the cache size must also be specified. If the cache size is not specified,

# the cache algorithm will be Unlimited cache.

#

# cache.algorithm=com.opensymphony.oscache.base.algorithm.LRUCache

# cache.algorithm=com.opensymphony.oscache.base.algorithm.FIFOCache

# cache.algorithm=com.opensymphony.oscache.base.algorithm.UnlimitedCache

# THREAD BLOCKING BEHAVIOR

#

# When a request is made for a stale cache entry, it is possible that another thread is already

# in the process of rebuilding that entry. This setting specifies how OSCache handles the

# subsequent 'non-building' threads. The default behaviour (cache.blocking=false) is to serve

# the old content to subsequent threads until the cache entry has been updated. This provides

# the best performance (at the cost of serving slightly stale data). When blocking is enabled,

# threads will instead block until the new cache entry is ready to be served. Once the new entry

# is put in the cache the blocked threads will be restarted and given the new entry.

# Note that even if blocking is disabled, when there is no stale data available to be served

# threads will block until the data is added to the cache by the thread that is responsible

# for building the data.

#

# cache.blocking=false

# CACHE SIZE

#

# Default cache size in number of items. If a size is specified but not

# an algorithm, the cache algorithm used will be LRUCache.

#

cache.capacity=1000

# CACHE UNLIMITED DISK

# Use unlimited disk cache or not. The default value is false, which means

# the disk cache will be limited in size to the value specified by cache.capacity.

#

# cache.unlimited.disk=false

# JMS CLUSTER PROPERTIES

#

# Configuration properties for JMS clustering. See the clustering documentation

# for more information on these settings.

#

#cache.cluster.jms.topic.factory=java:comp/env/jms/TopicConnectionFactory

#cache.cluster.jms.topic.name=java:comp/env/jms/OSCacheTopic

#cache.cluster.jms.node.name=node1

# JAVAGROUPS CLUSTER PROPERTIES

#

# Configuration properites for the JavaGroups clustering. Only one of these

# should be specified. Default values (as shown below) will be used if niether

# property is set. See the clustering documentation and the JavaGroups project

# ( [url]www.javagroups.com[/url]) for more information on these settings.

#

#cache.cluster.properties=UDP(mcast_addr=231.12.21.132;mcast_port=45566;ip_ttl=32;/

#mcast_send_buf_size=150000;mcast_recv_buf_size=80000):/

#PING(timeout=2000;num_initial_members=3):/

#MERGE2(min_interval=5000;max_interval=10000):/

#FD_SOCK:VERIFY_SUSPECT(timeout=1500):/

#pbcast.NAKACK(gc_lag=50;retransmit_timeout=300,600,1200,2400,4800;max_xmit_size=8192):/

#UNICAST(timeout=300,600,1200,2400):/

#pbcast.STABLE(desired_avg_gossip=20000):/

#FRAG(frag_size=8096;down_thread=false;up_thread=false):/

#pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=true)

#cache.cluster.multicast.ip=231.12.21.132

第二步:在web.xml进行一些简单的配置,oscache提供了强大的标签。主要是针对jsp的,如果项目中需把oscache.tld放到WEB-INF/classes下,在再web.xml中配置一下。

<!--oscache taglib -->

<jsp-config>

<taglib>

<taglib-uri>oscache</taglib-uri>

<taglib-location>

/WEB-INF/classes/oscache.tld

</taglib-location>

</taglib>

</jsp-config>

在jsp中应用的话,还需简单的引入。<%@ taglib uri="oscache" prefix="cache" %>

具体的应用: <cache:cache key="testcache"></cache:cache>。

以上是针对具体的页面的配置步骤。如果想针对某一页面的类型进行配置,可以利用过滤器来配置。比如我们想对以*.ftl和*.jsp的页面进行缓存的话,我们只需这样简单的配置在web.xml中。

<!-- OScacheFilter -->

<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>3600</param-value>

</init-param>

<init-param>

<param-name>scope</param-name>

<param-value>application</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CacheFilter</filter-name>

<url-pattern>*.ftl</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>CacheFilter</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

<!-- OScacheFilter -->

如果想对某一访问的路径action进行缓存的话,我们可以这样做,在一个jsp文件中简单的加上:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<%@ taglib uri="oscache" prefix="cache" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'index.jsp' starting page</title>

</head>

<body>

<oscache:cache>

<jsp:include page ="/view.do"/>

</oscache:cache>

</body>

</html>

OSCache的配置比较活的,你可以根据你的情况进行相应的配置。它主要是针对页面级的对象。虽然它专门为jsp提供了强大的标签支持,并不意味着不能对ftl,php进行缓存的,我们可以用jsp中的标签来嵌套我们的返回不同的数据页面。比如上面的/view.do可以返回的是一个ftl页面,照样可以缓存。

要想对缓存有更深入的了解,可以查看源码,可能会帮助你更好的理解它的工作机制和原理。

简单的说,缓存就是Map<key,value>,创建缓存就是添加一个map,使用就是通过key取value.

 类似资料: