`
kidiaoer
  • 浏览: 822707 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

在开发中使用二级缓存

阅读更多

在开发中使用二级缓存

       在这一部分中,将细致地介绍如何在Hibernate中使用二级缓存。在这里所使用的二级缓存组件为EHCache。

       关于EHCache的详细信息请参考http://ehcache.sourceforge.net上的内容。

       在Hibernate中使用二级缓存需要经历以下步骤:

●   在Hibernate配置文件(通常为hibernate.cfg.xml)中,设置二级缓存的提供者类。

●   配置EHCache的基本参数。

●   在需要进行缓存的实体对象的映射文件中配置缓存的策略。

       下面就来逐步演示一下如何在开发中使用Hibernate的二级缓存。

       修改Hibernate的配置文件

       在使用Hibernate的二级缓存时,需要在Hibernate的配置文件中指定缓存提供者对象,以便于Hibernate可以通过其实现对数据的缓存处理。

       在这里需要设置的参数是hibernate.cache.provider_class,在使用EHCache时,需要将其值设置为org.hibernate.cache.EhCacheProvider。具体要增加的配置如下所示:

     

  <property name="hibernate.cache.provider_class">           org.hibernate.cache.EhCacheProvider</property>

 

       Hibernate配置文件的详细内容请参考配套光盘中的hibernate"src"cn"hxex" hibernate"cache"hibernate.cfg.xml文件。

       增加EHCache配置参数

       在默认情况下,EHCache会到classpath所指定的路径中寻找ehcache.xml文件来作为EHCache的配置文件。

       在配置文件中,包含了EHCache进行缓存管理时的一些基本的参数。具体的配置方法如清单14.9所示。

       清单14.9    EHCache的配置
<?xml version="1.0" encoding="UTF-8"?>

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

       xsi:noNamespaceSchemaLocation="ehcache.xsd">

       <diskStore path="java.io.tmpdir" />

       <defaultCache 

              maxElementsInMemory="10000" 

              eternal="false" 

              timeToIdleSeconds="120" 

              timeToLiveSeconds="120" 

              overflowToDisk="true" 

              diskPersistent="false" 

              diskExpiryThreadIntervalSeconds="120" 

              memoryStoreEvictionPolicy="LRU" />

</ehcache>



       在这里只是使用EHCache所提供的默认配置文件进行了EHCache的基本配置,对于这些参数的详细含义请参考其官方网站(http: //ehcache.sourceforge.net/)中的资料。在实际的开发中,应该依据自己的具体情况来设置这些参数的值。

       开发实体对象

       这里所使用的是一个非常简单的User对象,它只包含了ID,name和age三个属性,具体的实现方法请参见配套光盘中的hibernate"src"cn"hxex"cache"User.java文件。

       配置映射文件

       映射文件的配置与不使用二级缓存的Java对象的区别就在于需要增加前面所介绍的<cache>元素来配置此对象的缓存策略。在这里所使用的缓存策略为“read-write”。所以,应该在映射文件中增加如下的配置:

       <cache usage="read-write"/>

       映射文件的详细配置请参考配套光盘中的hibernate"src"cn"hxex"cache"User.hbm.xml文件。

       测试主程序

       在这里的测试主程序采用了多线程的运行方式,以模拟在不同Session的情况下是否真的可以避免查询的重复进行。

       在这个测试程序中,所做的工作就是依据ID来得到对应的实体对象,并将其输出。然后通过多次运行此程序,来检查后面的运行是否进行了数据库的操作。

       测试主程序的主要测试方法的实现如清单14.10所示。

       清单14.10    测试主程序的实现

……
 

public void run() {

           SessionFactory sf = CacheMain.getSessionFactory();

           Session session = sf.getCurrentSession();
           

           session.beginTransaction();

           

           User user = (User)session.get( User.class, "1" );

           System.out.println( user );        

           session.getTransaction().commit();

}
       public static void main(String[] args) {

              CacheMain main1 = new CacheMain();
              main1.start();
              CacheMain main2 = new CacheMain();
              main2.start();
       }

}


    
       运行测试程序

       在运行测试程序之前,需要先手动地向数据库中增加一条记录。该记录的ID值为1,可以采用下面的SQL语句。

       INSERT INTO userinfo(userId, name, age) VALUES( '1', 'galaxy', 32 );

       接下来在运行测试主程序时,应该看到类似下面的输出:

Hibernate: select user0_.userId as userId0_0_, user0_.name as name0_0_, user0_.age as age0_0_ from USERINFO user0_ where user0_.userId=?

ID:  1

Namge:   galaxy

Age:       32

ID:  1

Namge:   galaxy

Age:       32

       通过上面的结果可以看到,每个运行的进程都输出了User对象的信息,但在运行中只进行了一次数据库读取操作,这说明第二次User对象的获得是从缓存中抓取的,而没有进行数据库的查询操作。

分享到:
评论

相关推荐

    深入理解MyBatis中的一级缓存与二级缓存

    开启二级缓存需要在MyBatis的配置文件中加入 `&lt;settings&gt; &lt;setting name="cacheEnabled" value="true"/&gt;&lt;/settings&gt;`,并在需要开启二级缓存的mapper.xml中加入 `&lt;cache/&gt;`标签,同时让使用二级缓存的POJO类实现...

    hibernate一级缓存、二级缓存和查询缓存

    - **依赖二级缓存**:查询缓存的结果依赖于二级缓存,只有实体对象存在于二级缓存中,查询结果才能被缓存。 - **不保证数据一致性**:查询缓存不提供数据一致性保证,可能存在脏读问题。因此,适用于那些对实时性...

    mybatis一级缓存和二级缓存简单示例

    - **缓存安全**:二级缓存中的数据是全局共享的,所以在多用户、多事务的场景下,需要考虑并发控制和数据一致性。 理解并合理运用 MyBatis 的缓存机制,能显著提高应用程序的性能,减少对数据库的访问压力。在实际...

    hibernate一级和二级缓存配置与详解

    本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    当对象在一级缓存中被修改并提交后,Hibernate会根据配置将这些变化同步到二级缓存中。这个过程包括了更新、删除和插入操作。值得注意的是,对于删除操作,Hibernate不仅会移除相应对象,还会清除可能存在的关联对象...

    spring二级缓存

    在这个例子中,我们将探讨如何在Spring环境中实现二级缓存,主要涉及Spring与Hibernate集成使用EhCache的情况。 一级缓存是ORM框架(如Hibernate)自身提供的缓存,它存储了最近查询的数据,减少了对数据库的直接...

    47-二级缓存 Hibernate-Shiro-MyBatis

    在IT行业中,二级缓存是一种优化数据库访问性能的重要技术,特别是在使用ORM框架(如Hibernate)、权限管理框架(如Shiro)以及SQL映射框架(如MyBatis)时。二级缓存可以存储经常访问的数据,避免频繁地从数据库中...

    mybatis一二级缓存

    如果在同一个 SqlSession 内再次执行相同的查询,MyBatis 就会直接从一级缓存中获取结果,而不再执行 SQL 查询。然而,当 SqlSession 关闭或提交事务时,一级缓存会被清空。 一级缓存的优势在于减少了对数据库的...

    二级缓存配置

    2. **更新实体**:当对实体进行修改时,如果启用了`read-write`缓存策略,则更新会同时反映在二级缓存中。 3. **删除实体**:执行删除操作时,相关的实体不仅从数据库中删除,还会从二级缓存中移除。 #### 五、注意...

    hibernate5.1二级缓存包

    Hibernate 是一个非常流行的 Java 应用程序开发框架,主要...在实际项目中,合理使用二级缓存能显著提升系统的响应速度和处理能力,降低数据库负载,但同时需要注意缓存管理和一致性问题,防止数据不一致的情况发生。

    二级缓存详解

    在使用二级缓存时,需要注意缓存同步和失效的问题,因为缓存中的数据可能与数据库中的数据不同步。因此,需要正确配置缓存的生命周期和清理策略,以确保数据一致性。 总之,Hibernate的二级缓存是一个强大的工具,...

    Spring集成的Hibernate配置二级缓存

    以EhCache为例,我们需要在项目中引入ehcache-core或ehcache的依赖,并在Hibernate配置文件(hibernate.cfg.xml或persistence.xml)中启用二级缓存,添加如下配置: ```xml ...

    mybatis二级缓存

    正确理解和使用二级缓存,可以帮助我们在开发过程中优化系统性能,同时需要注意数据安全和并发问题。对于“mapper”这个压缩包子文件的文件名称,可能包含的是MyBatis的Mapper配置文件或对应的接口代码,这些都是...

    android 图片的二级缓存

    在Android开发中,有许多优秀的图片加载库如Glide、Picasso和 Fresco,它们都内置了二级缓存机制。这些库在后台线程中异步加载图片,减少UI阻塞,并自动处理缓存策略。例如,Glide的内存缓存使用了LruResourceCache...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    通过以上步骤,我们就成功地在Spring Boot 2.1.4.RELEASE项目中配置了使用Redis作为Hibernate二级缓存的环境。这将显著提升数据库查询效率,减少对数据库的压力,尤其在高并发场景下,效果尤为明显。记得在实际生产...

    一级缓存和二级缓存

    在实际应用中,理解一级缓存和二级缓存的工作机制对软件开发人员至关重要。例如,在编写高并发、高性能的代码时,开发者可以利用缓存友好的数据结构和算法来最大化缓存利用率,减少缓存未命中的情况。此外,工具如...

    hibernate二级缓存java包下载

    当对象被加载到 Session 中,它们会被存储在一级缓存中,直到 Session 被关闭。一级缓存是事务范围的,只对当前 Session 可见。 - 二级缓存:是全局的,跨越多个 Session 和 Transaction,由缓存提供者管理。二级...

    hibernate二级缓存包

    6. **缓存更新**:当数据库中的数据发生变化时,Hibernate可以通过事件监听机制,将这些变化同步到二级缓存中,确保缓存数据的实时性。 7. **缓存失效**:除了预设的过期策略外,还可以通过查询后清除、手动清除等...

    hibernate二级缓存 SSH

    SSH(Struts2、Spring、Hibernate)是一种...通过部署到Tomcat服务器,初学者可以了解和学习如何在实际环境中配置和使用Hibernate二级缓存。这将是一个不错的实践项目,有助于理解SSH框架和Hibernate缓存的工作原理。

Global site tag (gtag.js) - Google Analytics