OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。
一、添加配置文件oscache.properties
# MR: I have not customized this file at all, it's just the default oscache.properties # from the 2.0.1 download. # 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 # 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 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 # 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 # (www.javagroups.com) 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):pbcast.STABLE(desired_avg_gossip=20000):UNICAST(timeout=5000):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二、sql-map-config.xml配置使用缓存
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" maxRequests="2048" maxSessions="1024" maxTransactions="512" useStatementNamespaces="false"/> <!--user information--> <sqlMap resource="com/sasis/dao/ibatis/sql/UserSQL.xml"/> </sqlMapConfig>三、iBatis缓存有四种类型MEMORY、LRU、FIFO、OSCACHE,UserSQL.xml指定 为OSCACHE
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="UserSQL"> <cacheModel id="userInfoCache" type="OSCACHE"> <flushInterval hours="24" /> <!--user refresh by rights --> <flushOnExecute statement="deleteUser" /> <flushOnExecute statement="addUserRole" /> <flushOnExecute statement="deleteUserRoles" /> <property name="size" value="1000" /> </cacheModel> <insert id="addUserRole" parameterClass="map"> <![CDATA[ insert into user_role_ref (id,user_id, role_id) values (SEQ_user_role_ref.nextval,#userId#, #roleId#) ]]> </insert> <delete id="deleteUser" parameterClass="java.lang.Long"> <![CDATA[ delete from user_info where id = #id# ]]> </delete> <delete id="deleteUserRoles" parameterClass="java.lang.Long"> <![CDATA[ delete from user_role_ref where user_id = #id# ]]> </delete> </sqlMap>