`
shun6826118
  • 浏览: 14380 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

oscache缓存实体类的详细应用

 
阅读更多

好久没来论坛说话了,前后差不多快有一年了,上次写点东西还是为了网站推广,这次也不例外,因为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 OSCache缓存详解** Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许开发者以面向对象的方式操作数据库。为了提高性能,Hibernate 提供了缓存机制,其中 OSCache 是一种广泛使用的二级缓存...

    hibernate+oscache实现二级缓存实例

    这里的`@Cacheable`注解表示该实体类的实例可以被缓存,`@Cache`注解用于定义缓存区域,便于管理。 然后,我们需要在OSCache的配置文件(如`oscache.properties`)中进行一些设置,例如缓存大小、过期策略等: ```...

    Hibernate_二级缓存 实验心得,手册

    - **Class缓存**:针对实体类的缓存,每个实体类都需要单独配置。缓存键为实体的ID,值为对应的POJO对象。 - **查询缓存**:针对特定HQL或Criteria查询结果的缓存,缓存键为查询条件,值为查询结果。 ##### 2. 缓存...

    Hibernate的缓存策略

    常见的二级缓存插件有Ehcache、OSCache等。 - **数据一致性问题**:由于二级缓存中的数据是数据库数据的副本,因此需要解决数据一致性的问题。通常情况下,可以通过配置缓存策略(如读写策略、刷新策略等)来保证...

    hibernate 缓存机制

    -- 针对特定实体类启用二级缓存 --&gt; ``` 在`ehcache.xml`文件中,你可以详细配置各个缓存区域的大小、过期策略等。 总的来说,Hibernate的缓存机制通过精细的层次和范围划分,提供了一套灵活且高效的缓存解决...

    hibernate缓存简介

    本文将详细介绍Hibernate的缓存机制,包括一级缓存、二级缓存和查询缓存,并探讨不同缓存范围和策略。 首先,一级缓存是每个`Session`内的缓存,它是一个短暂的存在,因为`Session`关闭后,一级缓存随之消失。一级...

    带二级缓存和业务封装的SSH项目源码

    在这个项目中,Hibernate可能被用来实现数据持久化,通过实体类与数据库表建立映射关系,简化数据访问。 **二级缓存** 是一种优化策略,主要用于减少对数据库的访问,提高系统性能。在Hibernate中,一级缓存是每个...

    Hibernate 缓存 实例

    一级缓存是Session级别的,存储实体对象,不缓存普通属性。在同一个Session内,对于同一对象的多次加载或获取(如load和get方法),不会重复执行SQL,因为数据会从一级缓存中获取。以下是一级缓存的示例代码: ```...

    hibernate3.2 源码

    2. **配置文件**:在Hibernate 3.2中,通常会有一个`hibernate.cfg.xml`配置文件,用于设置数据库连接、缓存策略、实体类等信息。理解这些配置对于调试和优化应用至关重要。 3. **实体类(Entities)**:在...

    Hibernate4(关系映射-事务-原理-性能和二级缓存-最佳实践)

    在Hibernate中配置二级缓存,需要在映射文件中使用元素,以及选择合适的缓存提供者,如EhCache、OSCache等。 6. 最佳实践:最佳实践是指在使用Hibernate时推荐的一些开发习惯和技术选择。例如,应该尽量使用双向...

    java hibernate

    Hibernate支持多种开源缓存解决方案,如EhCache、OSCache和SwarmCache等,并允许自定义实现。在Hibernate 3.2版本以前,EhCache是默认的二级缓存实现,但之后不再默认设置,需要开发者明确指定。 缓存策略的选用对...

    hibernate 3.2.6架包(包括所有jar,eg,api)

    6. 配置与集成:Hibernate 3.2.6可以通过XML配置文件(hibernate.cfg.xml)进行设置,包括数据库连接信息、缓存策略、实体类映射等。同时,它也支持通过Java代码方式进行配置,增加了灵活性。 7. 兼容性:Hibernate...

    hibernate的高级特性

    - **使用第三方缓存提供者**:如EHCache、OSCache等。 - **自定义缓存实现**:可以根据实际需求自定义缓存策略。 - **实体级别的缓存**:为特定实体启用二级缓存。 #### 高级映射技术 除了缓存机制外,Hibernate还...

    hibernate优化

    - **二级缓存**:利用Hibernate提供的二级缓存机制,可以缓存实体对象和查询结果,大幅减少数据库访问次数。 - **Session管理**:合理管理Session生命周期,避免长时间持有Session导致内存泄露等问题。 - **缓存配置...

    JSP 开发之hibernate配置二级缓存的方法

    在这个例子中,`name`对应你的实体类全名,其他参数如`maxElementsInMemory`定义了内存中的最大元素数量,`eternal`、`timeToIdleSeconds`、`timeToLiveSeconds`分别用于设置缓存的过期策略。 最后,为了收集性能...

    常用的Java驾包

    1. **配置文件**:`hibernate.cfg.xml`是Hibernate的配置文件,其中包含了数据库连接信息、缓存设置、实体类映射等配置。开发者需要在此文件中指定JDBC驱动、数据库URL、用户名和密码。 2. **对象关系映射(ORM)**...

Global site tag (gtag.js) - Google Analytics