使用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.
        写的有不当之处,敬请提出,以待改正。避免初学者误解。Thank you.









本文转自 weijie@java 51CTO博客,原文链接:http://blog.51cto.com/weijie/69047,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
存储 缓存 Java
SpringCache缓存
SpringCache缓存
|
9月前
|
缓存 NoSQL Java
Guava Cache 异步刷新技巧,你值得拥有!
Guava Cache是一款非常优秀的本地缓存框架,提供非常简洁易用的 API 供开发者使用。 这篇文章,我们聊聊如何使用 Guava Cache **异步刷新技巧**带飞系统性能 。
Guava Cache 异步刷新技巧,你值得拥有!
|
存储 缓存 NoSQL
EhCache缓存
在查询数据的时候,数据大多来自数据库,通常会基于SQL语句的方式与数据库交互,数据库一般会基于本地磁盘IO的形式将数据读取到内存,返回给Java服务端,Java服务端再将数据响应给客户端,做数据展示。
257 0
|
存储 缓存 算法
本地缓存无冕之王Caffeine Cache
Caffeine Cache以其高性能和可扩展性赢得 本地缓存之王 的称号,它是一个Java缓存库。它的设计目标是优化计算速度、内存效率和实用性,以符合现代软件开发者的需求。
152 0
|
缓存 Java 数据库连接
什么是EhCache 缓存
什么是EhCache 缓存
127 0
|
存储 缓存 NoSQL
Caffeine缓存 最快缓存 内存缓存
Caffeine是一个进程内部缓存框架 最快缓存 内存缓存
1382 0
Caffeine缓存 最快缓存 内存缓存
|
缓存 NoSQL 应用服务中间件
我们究竟什么时候可以使用Ehcache缓存
文/小程故事多(简书作者) 原文链接:http://www.jianshu.com/p/2cd6ad416a5a 一、Ehcache是什么 EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。 二、Ehcache的使用场景是什么 1、首先最主要就是页面缓存。 网站
2281 0
|
存储 缓存 NoSQL
我们究竟什么时候可以使用Ehcache缓存(转)
一、Ehcache是什么 EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。 二、Ehcache的使用场景是什么 1、首先最主要就是页面缓存。
1392 0
|
缓存 Java 数据库连接
缓存之EHCache(转)
一、简介非常简单,而且易用。 ehcache 是一个非常轻量级的缓存实现,而且从1.2 之后就支持了集群,而且是hibernate 默认的缓存provider。ehcache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
1191 0
|
SQL 缓存 关系型数据库
缓存系列文章--2.是否真的需要缓存?
   转载请注明出处哈:http://carlosfu.iteye.com/blog/2269678   一、缓存的成本和收益是什么:     既然要讨论是否真的需要缓存这个问题,就要知道缓存带来的成本与收益(好处、坏处)是什么?   收益 成本 缓存 + 后端存储(资源) 1. 加速读写 2. 降低后端负载 1. 数据不一致性 2. 代码维护成本 3. 架构复杂度     上面的表格应该清楚的表达了使用缓存后的收益和成本分别是什么。
894 0