- 浏览: 121294 次
- 性别:
- 来自: 成都
文章分类
最新评论
二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享。二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。一般二级缓存我们都是通过第三方产品来实现,其中有很多缓存产品,下面的就以Oscache来介绍一下二级缓存的使用。
Oscache缓存有几种,其中有:
对页面部分的缓存。
对整个页面的缓存。
对对象的缓存。
一、对部分页面的缓存。
1. 下载、解压缩OSCache
请到OSCache的主页http://www.opensymphony.com/oscache/download.html下载Oscache的最新版本,作者下载的是OSCache的最新稳定版本2.0。将下载后的Zip文件解压缩到c:oscache(后面的章节中将使用%OSCache_Home%来表示这个目录)目录下
2. 新建立一个web应用
3. 将主要组件%OSCache_Home%oscache.jar放入WEB-INF/lib目录
4. commons-logging.jar、commons-collections.jar的处理
OSCache组件用Jakarta Commons Logging来处理日志信息,所以需要commons-logging.jar的支持,请将%OSCache_Home%libcorecommons-logging.jar放入classpath(通常意味着将这个文件放入WEB-INFlib目录)
如果使用JDK1.3,请将%OSCache_Home%libcorecommons-collections.jar放入classpath,如果使用JDK1.4或以上版本,则不必了
5. 将oscache.properties、oscache.tld放入WEB-INF/class目录
%OSCache_Home%oscache.properties包含了对OSCache运行特征值的设置信息
%OSCache_Home%oscache.tld包含了OSCache提供的标签库的定义内容
6. 修改web.xml文件
在web.xml文件中增加下面的内容,增加对OSCache提供的taglib的支持:
XML/HTML代码
只需要通过上面简单的配置,我们就可以使用oscache对部分页面的缓存了,我们新建一个jsp页面,先在头部声明如下:
XML/HTML代码
其中的第一行是表示使用oscache的标签,底下的是我为了下面程序的需要导入的包。
然后在jsp页面当中加入oscache的标签,如下所示
XML/HTML代码
其中oscache的标签的一些属性含义如下:
key : 缓存的Key,可以是任何的字符,用来寻找缓存的内容用的.可以理解成HashMap中的Key.不能把2个要缓存的东东定义成一个名字,那样后一个会覆盖前一个的内容.默认情况,如果不指定Key的话,OSCache也会自动生成一个Key,规则是请求的URI+当前页面的Query String.scope : 缓存的范围.有2个, application和session.默认值是application.time : 缓存内容的时间.以秒为单位,默认是3600秒.到了指定的时间,就会刷新缓存内容.如果指定一个负数的话,意味着永远不会过期.duration : 也是用来指定缓存内容的时间,它和time属性只能是2选1,它的特点是可以用Simple Data Format 或者是ISO-8601进行日期格式化.cron : 用万年历的形式指定缓存内容何时过期的.它应用的Unix的万年历形式,如("0 * * * *")refresh : 是个Boolean值,如果是True的话,则不管前面提到的过期检查,都刷新.默认情况是false.mode : 设置这项为”silent”将防止把括起来的内容输出.这在你预加载缓存内容而不愿显示给用户看到时很有用.groups : 可以提供一个以逗号分割的组名称.如group="A, B".这将允许你以组的名义来操作他们,分组非常有用,比如你要缓存的内容正好需要另外一个应用程序的一部分或数据,当依赖的发生了改变,正好联动的可以使很多的组过期,进而使与组发生关联的缓存内容得到更新.language : 设置编码方式.refreshpolicyclass:指定自定义的类来处理缓存的内容什么时候过期.这个类需要从 refreshpolicyparam com.opensymphony.oscache.web.WebEntryRefreshPolicy继承.refreshpolicyparam : 它和上面的是联合使用的.是给refreshpolicyclass传任意的参数的.指定这项的话,就必须有refreshpolicyclass,否则就不起作用.
其中,我不得不把cron表达式多说几句.首先这五颗星的位置代表分,小时,一个月中的天,月,一周中的天分: 无疑问0~59.小时 : 无疑问 0~23.天(月) : 1~31月 : 1~12,用英文全称也可以.如January, April天(周): 0~6(0代表Sunday; 1代表Monday… 6代表Saturday)举个例子,比如我们想让缓存的内容在4月的晚上11:45分过期.我们可以这样来写"45 23 * April *".7、测试是否配置成功
要想测试是否成功非常的简单,首先在前面的jsp页面里面,得到文章的标题,即article.getTitle(),其是从数据库当中取得数据,假如我们是用Hibernate做数据持久化,那么我们可以把Hibernate的访问数据库的sql语句显示出来,当我们第一次访问jsp页面的时候,肯定显示查询数据库语句,这时候我们再次的访问这个jsp页面,如果这个时候访问明显变得快了,并且后台没有输出sql语句,那么说明缓存配置成功了。
二、对整个页面的缓存
要想对整个页面的缓存,首先的准备工作同上面一样,然后在web.xml文件里面加上
XML/HTML代码
其中下面的文章列表页面缓存的配置,就表示了对哪个请求做缓存,值得注意的是,这个缓存的配置一定要放在struts过滤器的前面。配置成功后,其测试的方法同上。
三,对象的缓存。
这里介绍的对象的缓存是通过和Spring的集成来实现的,其准备工作同上面一样,然后在spring的配置文件里面加上:
XML/HTML代码
其中cronExpression的含义同前面介绍的cron表达式是一样的,然后我们对一个对象的一个方法来作缓存,我们在ArticleService类里面加上:
Java代码
即在得到一个Article对象的方法上加上Cacheable注解,表示为其作缓存,其中的testCaching就是spring配置文件里面的testCaching。
通过上面的配置,我们在前端访问getArticle这个方法后,其得到的Article的实例就放到缓存里面了,要想测试是否成功,可以同上面介绍的相同方法来进行测试。
Oscache缓存有几种,其中有:
对页面部分的缓存。
对整个页面的缓存。
对对象的缓存。
一、对部分页面的缓存。
1. 下载、解压缩OSCache
请到OSCache的主页http://www.opensymphony.com/oscache/download.html下载Oscache的最新版本,作者下载的是OSCache的最新稳定版本2.0。将下载后的Zip文件解压缩到c:oscache(后面的章节中将使用%OSCache_Home%来表示这个目录)目录下
2. 新建立一个web应用
3. 将主要组件%OSCache_Home%oscache.jar放入WEB-INF/lib目录
4. commons-logging.jar、commons-collections.jar的处理
OSCache组件用Jakarta Commons Logging来处理日志信息,所以需要commons-logging.jar的支持,请将%OSCache_Home%libcorecommons-logging.jar放入classpath(通常意味着将这个文件放入WEB-INFlib目录)
如果使用JDK1.3,请将%OSCache_Home%libcorecommons-collections.jar放入classpath,如果使用JDK1.4或以上版本,则不必了
5. 将oscache.properties、oscache.tld放入WEB-INF/class目录
%OSCache_Home%oscache.properties包含了对OSCache运行特征值的设置信息
%OSCache_Home%oscache.tld包含了OSCache提供的标签库的定义内容
6. 修改web.xml文件
在web.xml文件中增加下面的内容,增加对OSCache提供的taglib的支持:
XML/HTML代码
<taglib> <taglib-uri>oscachetaglib-uri> <taglib-location>/WEB-INF/classes/oscache.tldtaglib-location> taglib>
只需要通过上面简单的配置,我们就可以使用oscache对部分页面的缓存了,我们新建一个jsp页面,先在头部声明如下:
XML/HTML代码
<%@ taglib uri="oscache" prefix="os"%> <%@ page import="com.eway.action.user.ArticleAction"%> <%@ page import="com.eway.entity.Article"%> <%@ page import="java.util.List;"%>
其中的第一行是表示使用oscache的标签,底下的是我为了下面程序的需要导入的包。
然后在jsp页面当中加入oscache的标签,如下所示
XML/HTML代码
<os:cache key="1" time="1800" scope="session"> <% ArticleAction action = new ArticleAction(); List<Article> list = action.testOscache(); for(int i = 0; i < list.size(); i++){ Article article = list.get(i); out.println(article.getTitle()); } %> os:cache>
其中oscache的标签的一些属性含义如下:
key : 缓存的Key,可以是任何的字符,用来寻找缓存的内容用的.可以理解成HashMap中的Key.不能把2个要缓存的东东定义成一个名字,那样后一个会覆盖前一个的内容.默认情况,如果不指定Key的话,OSCache也会自动生成一个Key,规则是请求的URI+当前页面的Query String.scope : 缓存的范围.有2个, application和session.默认值是application.time : 缓存内容的时间.以秒为单位,默认是3600秒.到了指定的时间,就会刷新缓存内容.如果指定一个负数的话,意味着永远不会过期.duration : 也是用来指定缓存内容的时间,它和time属性只能是2选1,它的特点是可以用Simple Data Format 或者是ISO-8601进行日期格式化.cron : 用万年历的形式指定缓存内容何时过期的.它应用的Unix的万年历形式,如("0 * * * *")refresh : 是个Boolean值,如果是True的话,则不管前面提到的过期检查,都刷新.默认情况是false.mode : 设置这项为”silent”将防止把括起来的内容输出.这在你预加载缓存内容而不愿显示给用户看到时很有用.groups : 可以提供一个以逗号分割的组名称.如group="A, B".这将允许你以组的名义来操作他们,分组非常有用,比如你要缓存的内容正好需要另外一个应用程序的一部分或数据,当依赖的发生了改变,正好联动的可以使很多的组过期,进而使与组发生关联的缓存内容得到更新.language : 设置编码方式.refreshpolicyclass:指定自定义的类来处理缓存的内容什么时候过期.这个类需要从 refreshpolicyparam com.opensymphony.oscache.web.WebEntryRefreshPolicy继承.refreshpolicyparam : 它和上面的是联合使用的.是给refreshpolicyclass传任意的参数的.指定这项的话,就必须有refreshpolicyclass,否则就不起作用.
其中,我不得不把cron表达式多说几句.首先这五颗星的位置代表分,小时,一个月中的天,月,一周中的天分: 无疑问0~59.小时 : 无疑问 0~23.天(月) : 1~31月 : 1~12,用英文全称也可以.如January, April天(周): 0~6(0代表Sunday; 1代表Monday… 6代表Saturday)举个例子,比如我们想让缓存的内容在4月的晚上11:45分过期.我们可以这样来写"45 23 * April *".7、测试是否配置成功
要想测试是否成功非常的简单,首先在前面的jsp页面里面,得到文章的标题,即article.getTitle(),其是从数据库当中取得数据,假如我们是用Hibernate做数据持久化,那么我们可以把Hibernate的访问数据库的sql语句显示出来,当我们第一次访问jsp页面的时候,肯定显示查询数据库语句,这时候我们再次的访问这个jsp页面,如果这个时候访问明显变得快了,并且后台没有输出sql语句,那么说明缓存配置成功了。
二、对整个页面的缓存
要想对整个页面的缓存,首先的准备工作同上面一样,然后在web.xml文件里面加上
XML/HTML代码
<filter> <filter-name>cacheFilterfilter-name> <filter-class>com.opensymphony.oscache.web.filter.CacheFilterfilter-class> <init-param> <param-name>timeparam-name> <param-value>3600param-value> init-param> <init-param> <param-name>scopeparam-name> <param-value>applicationparam-value> init-param> filter> <filter-mapping> <filter-name>cacheFilterfilter-name> <url-pattern>/user/article!list.dourl-pattern> filter-mapping>
其中下面的文章列表页面缓存的配置,就表示了对哪个请求做缓存,值得注意的是,这个缓存的配置一定要放在struts过滤器的前面。配置成功后,其测试的方法同上。
三,对象的缓存。
这里介绍的对象的缓存是通过和Spring的集成来实现的,其准备工作同上面一样,然后在spring的配置文件里面加上:
XML/HTML代码
<oscache:config configLocation="classpath:oscache.properties" id="cacheProvider" /> <oscache:annotations providerId="cacheProvider"> <oscache:caching id="testCaching" cronExpression="0 1 * * *" refreshPeriod="86400" /> <oscache:flushing id="testFlushing" /> oscache:annotations> <bean id="cacheManager" class="org.springmodules.cache.provider.oscache.OsCacheManagerFactoryBean"> <property name="configLocation" value="classpath:oscache.properties" /> bean>
其中cronExpression的含义同前面介绍的cron表达式是一样的,然后我们对一个对象的一个方法来作缓存,我们在ArticleService类里面加上:
Java代码
@Cacheable(modelId = "testCaching") public Article getArticle(long id);
即在得到一个Article对象的方法上加上Cacheable注解,表示为其作缓存,其中的testCaching就是spring配置文件里面的testCaching。
通过上面的配置,我们在前端访问getArticle这个方法后,其得到的Article的实例就放到缓存里面了,要想测试是否成功,可以同上面介绍的相同方法来进行测试。
发表评论
-
struts2 token拦截器
2014-01-14 20:44 914之前struts2解决token必须在每个action配置 ... -
JAVA中SELECT COUNT(*) FROM XXX得到的ResultSet行数
2013-06-05 16:37 1123/** * 测试SELECT COUNT(* ... -
数据库表与表连接的方式(内连接、外连接[左连接、右连接、全连接]、交叉连接)
2012-11-20 22:15 1246第一部分、查询理论 连接查询方式有: 内连接、外连接(左连 ... -
hibernate Restrictions 用法 查询
2012-11-20 20:57 716import hibernate classes impor ... -
hibernate Restrictions 用法 查询
2012-11-20 20:54 0import hibernate classes imp ... -
FreeMarker作为Struts2的视图
2012-07-27 17:09 783Struts使用FreeMarker作为其默认的模板技术,因此 ... -
spring security的标签库
2011-11-07 16:35 7588应用标签库:<%@ taglib prefix='sec ... -
STRUTS2 Convention零配置
2011-11-04 15:53 718从struts2.1开始,struts2不再推荐使用Codeb ... -
Hibernate - DetachedCriteria 的完整用法
2011-11-04 15:33 852Hibernate - DetachedCriteria 的完 ... -
struts2的struts.properties配置文件详解
2011-11-04 14:40 841struts.action.extensionThe U ... -
JPA @MappedSuperclass注解的使用说明
2011-10-31 17:51 896基于代码复用和模型分离的思想,在项目开发中使用JPA的@Map ... -
freemarker的国际化
2011-10-27 10:58 971起首在servlet中加上加载资料文件的代码 Local ... -
net.sf.json的使用
2011-10-26 17:26 2178需要jar包:ezmorph-1.0.6.jar,json-l ... -
FreeMarker设计指南
2011-10-18 17:57 767(1)模板 + 数据模型 = 输出 FreeMarke ... -
Freemarker中遍历List实例
2011-10-18 13:12 7717Freemarker中如何遍历List ... -
hibernate中lazy的使用
2011-10-18 11:49 754lazy,延迟加载 Lazy的有效期:只有 ... -
freemarker中使用struts2标签
2011-10-15 16:01 9721.将系统所需的标签库定义文件(也就是tld文件)复制到web ... -
Freemarker源码解析
2011-10-10 17:21 1106FreeMarker 自定义模版文 ... -
实体 Bean 注解
2011-10-06 15:36 1374一、 实体 Bean 每个持久化POJO类都是一个实体Bea ... -
Hibernate 实体类注解
2011-10-06 12:53 880Hibernate注解 1。@Entity(name=&qu ...
相关推荐
在Hibernate中,二级缓存可以使用不同的提供商,例如Ehcache和OSCache。配置Ehcache作为二级缓存提供商,需要在Hibernate的配置文件中设置`hibernate.cache.provider_class`为`...
本实例将介绍如何结合Hibernate和OSCache实现二级缓存,以优化应用程序的性能。 一级缓存是Hibernate内置的Session级别的缓存,它存储了在同一个Session内操作的对象,避免了频繁的数据库读写。然而,一级缓存仅...
### Hibernate 二级缓存详解 #### 一、二级缓存概念与作用 在 Hibernate 中,为了提高查询效率和减少数据库的访问压力,引入了缓存机制。缓存分为一级缓存(Session 级别)和二级缓存(SessionFactory 级别)。...
Hibernate二级缓存是一种持久化层缓存机制,用于提高数据访问效率。一级缓存是由Hibernate的Session提供的,它是一个事务性的缓存,每个Session都有自己的独立缓存,同一个ID的对象在同一个Session内多次加载只会...
### Hibernate二级缓存详解 #### 一、概述与背景 Hibernate作为一款优秀的Java持久层框架,在提高开发效率的同时,也面临着性能优化的问题。缓存机制是解决这一问题的关键技术之一。Hibernate提供了两种缓存机制:...
通过本次实验,不仅深入了解了Hibernate二级缓存的基本概念和工作原理,还掌握了如何通过配置来优化二级缓存的使用。实践证明,合理的缓存策略能够显著提升系统的性能表现。在实际开发过程中,还需要结合具体的应用...
Hibernate支持多种二级缓存实现,如EhCache、JBossCache和OsCache等。二级缓存主要用于存储实体对象,提高了数据检索的效率。 **3. QueryCache** QueryCache是Hibernate的另一种缓存机制,用于缓存查询语句及其返回...
《深入理解Hibernate二级缓存机制》 在Java的持久化框架Hibernate中,缓存机制扮演着重要的角色,尤其是在处理大量数据时,它可以显著提高应用程序的性能。然而,许多人对Hibernate的二级缓存可能存在误解,因此...
为了提高性能,Hibernate 提供了缓存机制,其中 OSCache 是一种广泛使用的二级缓存解决方案。OSCache 是一个开放源码的高性能缓存系统,适用于多种应用环境,包括 Web 应用、EJB 和独立应用。 **1. 安装与配置 ...
在Hibernate3中,二级缓存是一个重要的特性,它可以帮助提高应用程序性能,减少对数据库的直接访问。以下是关于"二级缓存详解"的详细知识: 二级缓存是指在SessionFactory级别上维护的数据缓存,它不同于一级缓存...
Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动管理。它存储了当前会话期间加载的所有实体对象和关联的集合对象。当会话关闭时,一级缓存中...
常见的二级缓存插件有Ehcache、OSCache等。 - **数据一致性问题**:由于二级缓存中的数据是数据库数据的副本,因此需要解决数据一致性的问题。通常情况下,可以通过配置缓存策略(如读写策略、刷新策略等)来保证...
实现二级缓存需要依赖第三方库,如EHCache、OSCache等。 #### Hibernate缓存的工作机制 1. **一级缓存的工作机制** - 当通过`Session`执行查询或加载操作时,首先会检查一级缓存中是否存在所需的数据。 - 如果一...
Hibernate提供了不同级别的缓存,包括一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),还有第三方缓存插件如EhCache、 OSCache等。 **压缩包子文件的文件名称列表:** "s2sh_relation24_3...
hibernate二级缓存也称为进程级的缓存或SessionFactory级的缓存。 二级缓存是全局缓存,它可以被所有的session共享。 二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。 ...
在Hibernate中,缓存主要分为三个层次:一级缓存、二级缓存以及集群范围的缓存。 一级缓存,也称为Session缓存,存在于单个Session实例中。其目的是减少对数据库的访问次数,提高程序效率。一级缓存仅在Session生命...
这个项目中的二级缓存可能使用了EhCache或OSCache等第三方缓存解决方案,将经常访问的数据存储在内存中,减少数据库查询次数,提高响应速度。 **业务封装** 是指将业务逻辑抽象出来,形成独立的服务或组件,以便于...