好久没来论坛说话了,前后差不多快有一年了,上次写点东西还是为了网站推广,这次也不例外,因为ITEYE的推广效果太好了,你懂的(应站长网友委托,再添加一个网址http://www.aiqisky.com,嘎嘎)。
工作中也做了很多项目,以前在学习JAVA中只是概念中的技术,现在也有了比较深刻的理解,在项目中也用的如火纯清,比如线程、socket等等。这篇文章就来介绍下oscache在项目中缓存实体的应用,现在正在写采集相关的东西,以后也将采集系统的线程设计公布出来,对解决高并发有很好的效果哦。
oscache相信大家都有了解过,或者其他的一些缓存产品,如hibernate的默认缓存等等。在这里一些基础的oscache知识就不累赘了,相信谷歌一下一大堆,这里具体介绍怎样缓存实体类。
一、项目中使用oscache的基本文件
1、oscache-2.4.1.jar
2、oscache.properties
项目中添加这两个文件就可以使用oscache了
二、使用介绍
这里将用现实中的代码来展示,前段时间推广的电影网站http://www.tiantianfilm.com,现在做了一些优化,就是在前台部分增加了oscache缓存功能,虽然测试起来性能改善不是很明显,但我相信,随着网站数据的增多,这个增加很有必要的,这些代码都是网站中的代码展示。原本网站运行是正常的,这里将一步一步介绍,怎样在正常项目中增加缓存功能。
1、与所有任何的程序、框架一样,oscache的启动也需要入口程序,这里以servlet形式启动
(1)在原来web.xml中添加servlet的启动代码
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.wang.vedio.util.oscache.InitServlet</servlet-class>
<init-param>
<param-name>oscache</param-name>
<param-value>/WEB-INF/classes/oscache.properties</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
代码编辑真纠结
这个web.xml的中配置不需要mapping配置,只作为启动作用
(2)xml配置完毕,接下来需要写InitServlet类
InitServlet .java
public class InitServlet extends HttpServlet {
private static Log logger = LogFactory.getLog(InitServlet.class);
private static final long serialVersionUID = 1L;
public static Properties properties;
public void init() throws ServletException {
try {
//加载oscache
String file = getInitParameter("oscache");
System.out.println("--------> oscache start");
if (file != null) {
InputStream inputString = getServletContext().getResourceAsStream(file);
Properties p = new Properties();
p.load(inputString);
properties = p;
}
} catch (Exception e) {
logger.error("###########缓存启动失败##############");
e.printStackTrace();
}
}
}
这个servlet主要是读取缓存的配置文件
(3)oscache启动后需要一个全局的缓存管理类,我们使用GeneralCacheAdministrator作为全局管理属性,具体代码如下:OsCacheAdmin .java
public class OsCacheAdmin {
public static GeneralCacheAdministrator admin = new GeneralCacheAdministrator(InitServlet.properties);
}
代码中的admin属性,就是具体操作缓存的属性
(4)启动了缓存,加载配置,并创建了操作属性,接下来就是具体的实体类缓存了
oscache中的缓冲池是采用MAP的<key,value>格式来缓存数据,所以对于我们来说,任何一个需要缓存的数据都要有唯一的标识来代表数据,如果标识一样,则原来的数据就被覆盖了。
try{
categorys = (List<Category>) OsCacheAdmin.admin.getFromCache(Define.CATEGORYS_CODE, Define.CATEGORYS_REFRESH_TIME);
log.info("index 从缓存中获得所有电影列表");
}catch(NeedsRefreshException nre){
categorys = categoryService.getAllCategory(0);
OsCacheAdmin.admin.removeEntry(Define.CATEGORYS_CODE);
OsCacheAdmin.admin.putInCache(Define.CATEGORYS_CODE, categorys);
log.info("index 电影类别从数据库中获取成功并缓存");
}
以上代码展示了具体缓存实体类的方法。功能上很好理解,先在缓存中查找,如果存在实体类,然后判断是否过期,如果缓存中不存在该实体类,或者已经过期则抛出需要刷新异常,进行数据库查找,再将查找的实体类进行缓存。
解释:方法
getFromCache(String key)
getFromCache(String key, int refreshPeriod)
getFromCache(String key, int refreshPeriod, String cronExpression)
key:唯一标识
refreshPeriod:过期时间单位毫秒
cronExpression:过期后处理的计划方式
admin属性中还有很多方法,大家在应用可以尝试着测试下,看看效果,这里篇幅已经不少了,就不介绍源码了。
目前www.tiantianfilm.com电影网站的前台部分全部进行了缓存,缓存的网站比较耗内存,所以用虚拟机的朋友需要注意了适量设置过期时间,缓存数量等,这些都可在properties文件中进行配置的。
到此为止,学术不精,如有误请指出,共同进步,谢谢
分享到:
相关推荐
**Hibernate OSCache缓存详解** Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许开发者以面向对象的方式操作数据库。为了提高性能,Hibernate 提供了缓存机制,其中 OSCache 是一种广泛使用的二级缓存...
这里的`@Cacheable`注解表示该实体类的实例可以被缓存,`@Cache`注解用于定义缓存区域,便于管理。 然后,我们需要在OSCache的配置文件(如`oscache.properties`)中进行一些设置,例如缓存大小、过期策略等: ```...
- **Class缓存**:针对实体类的缓存,每个实体类都需要单独配置。缓存键为实体的ID,值为对应的POJO对象。 - **查询缓存**:针对特定HQL或Criteria查询结果的缓存,缓存键为查询条件,值为查询结果。 ##### 2. 缓存...
常见的二级缓存插件有Ehcache、OSCache等。 - **数据一致性问题**:由于二级缓存中的数据是数据库数据的副本,因此需要解决数据一致性的问题。通常情况下,可以通过配置缓存策略(如读写策略、刷新策略等)来保证...
-- 针对特定实体类启用二级缓存 --> ``` 在`ehcache.xml`文件中,你可以详细配置各个缓存区域的大小、过期策略等。 总的来说,Hibernate的缓存机制通过精细的层次和范围划分,提供了一套灵活且高效的缓存解决...
本文将详细介绍Hibernate的缓存机制,包括一级缓存、二级缓存和查询缓存,并探讨不同缓存范围和策略。 首先,一级缓存是每个`Session`内的缓存,它是一个短暂的存在,因为`Session`关闭后,一级缓存随之消失。一级...
在这个项目中,Hibernate可能被用来实现数据持久化,通过实体类与数据库表建立映射关系,简化数据访问。 **二级缓存** 是一种优化策略,主要用于减少对数据库的访问,提高系统性能。在Hibernate中,一级缓存是每个...
一级缓存是Session级别的,存储实体对象,不缓存普通属性。在同一个Session内,对于同一对象的多次加载或获取(如load和get方法),不会重复执行SQL,因为数据会从一级缓存中获取。以下是一级缓存的示例代码: ```...
2. **配置文件**:在Hibernate 3.2中,通常会有一个`hibernate.cfg.xml`配置文件,用于设置数据库连接、缓存策略、实体类等信息。理解这些配置对于调试和优化应用至关重要。 3. **实体类(Entities)**:在...
在Hibernate中配置二级缓存,需要在映射文件中使用元素,以及选择合适的缓存提供者,如EhCache、OSCache等。 6. 最佳实践:最佳实践是指在使用Hibernate时推荐的一些开发习惯和技术选择。例如,应该尽量使用双向...
Hibernate支持多种开源缓存解决方案,如EhCache、OSCache和SwarmCache等,并允许自定义实现。在Hibernate 3.2版本以前,EhCache是默认的二级缓存实现,但之后不再默认设置,需要开发者明确指定。 缓存策略的选用对...
- **创建实体类**:根据数据库表结构创建对应的Java实体类。 - **编写Mapper接口**:定义SQL映射接口,其中包含各种数据库操作的方法声明。 - **编写Mapper XML文件**:对于每个Mapper接口,都需要一个XML文件来定义...
6. 配置与集成:Hibernate 3.2.6可以通过XML配置文件(hibernate.cfg.xml)进行设置,包括数据库连接信息、缓存策略、实体类映射等。同时,它也支持通过Java代码方式进行配置,增加了灵活性。 7. 兼容性:Hibernate...
- **使用第三方缓存提供者**:如EHCache、OSCache等。 - **自定义缓存实现**:可以根据实际需求自定义缓存策略。 - **实体级别的缓存**:为特定实体启用二级缓存。 #### 高级映射技术 除了缓存机制外,Hibernate还...
- **二级缓存**:利用Hibernate提供的二级缓存机制,可以缓存实体对象和查询结果,大幅减少数据库访问次数。 - **Session管理**:合理管理Session生命周期,避免长时间持有Session导致内存泄露等问题。 - **缓存配置...
在这个例子中,`name`对应你的实体类全名,其他参数如`maxElementsInMemory`定义了内存中的最大元素数量,`eternal`、`timeToIdleSeconds`、`timeToLiveSeconds`分别用于设置缓存的过期策略。 最后,为了收集性能...
例如,在Java Web开发中,模型通常由JavaBean或其他类型的实体类来实现。 - **视图(View)**:视图用于展示模型中的数据。它是用户与应用程序交互的界面,包括网页上的HTML、CSS和JavaScript等。视图的主要职责是从...
1. **配置文件**:`hibernate.cfg.xml`是Hibernate的配置文件,其中包含了数据库连接信息、缓存设置、实体类映射等配置。开发者需要在此文件中指定JDBC驱动、数据库URL、用户名和密码。 2. **对象关系映射(ORM)**...