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

hiberante入门(十四):缓存2

阅读更多
>>步骤四、测试二级缓存:现在仍用前面的类来测试,尽管第一个session关闭了,但是我们在第二个session查询时,仍不会连库,这也就是二级缓存的作用,通常情况下,hibernate查询时会首先在一级缓存中查询数据,再到二级缓存中查询,如果仍查不到才会连库。 这时请注意,尽管我们在一级缓存中清掉了数据,但是在二级缓存中还存有数据,所以在清掉数据后执行的查询操作也不会引起连库,这就是为什么我们最终只看到一条查询语句的原因。强调,前面说用evict或clear只是清掉一级缓存中的内容。

>>步骤五、感知二级缓存:经过上面的测试我们不能明确感知到二级缓存的作用效果,下面我们配置“统计信息”属性来进行二级缓存信息的获取。首先我们在主配置文件中配置以下属性:<property name="hibernate.generate_statistics">true</property>来打开统计信息,由于统计信息会耗资源,所以一般不打开。然后在测试类的main方法中增加如下代码:     

       Statistics st = HibernateUtil.getSessionFactory().getStatistics();

       System.out.println(st);

       System.out.println("put:" + st.getSecondLevelCachePutCount());

       System.out.println("hit:" + st.getSecondLevelCacheHitCount());

       System.out.println("miss:" + st.getSecondLevelCacheMissCount());

执行后结果为:

put:1

hit:2

miss:1    在进行代码结果分析前先来说两个概念:命中,miss。命中是指在二级缓存中查到数据,没有找到就称为miss.  命中率:在查询时有多少次是从缓存中得到。 下面我们看上面的执行结果put=1,说明hibernate放了一次数据到缓存中,这发生在第一次查询时,当不能在二级缓存中找到(这也是为什么会有一次miss的原因)时,会去连库并把数据放到缓存中去,使put变为1.随后进行的三次查找中:第一次仍是从一级缓存中查找到,后两次查找均在二级缓存中查到,所以命中hit=2。

4.二级缓存中的细节问题:

(1)体会save自动填充缓存,save填充缓存不支持id的native方式生成,所以我们先修改User的实体配置文件让id生成方式为:

<id name="id">   
            <generator class="hilo"/>   
</id>  
后,这样修改后再来测试执行结果会发现执行结果为:

put:1

hit:3

miss:0  分析:当我们保存User对象到数据库时也会自动把此数据填充到缓存中,所以第一次put实质是发生在保存数据时。这样也就不难解释为什么hit=3,miss=0了。

(2)除了save外,update、saveOrUpdate、list、iterator、get、load(查询时从二级缓存中取数据的三个方法)、Query、Criteria都会填充二级缓存,且它们支持主键的nativa生成方式。

(3)让Query支持二级缓存:首先是主配置中配置如下属性:

<property name="#hibernate.cache.use_query_cache">true</property>因为Query命中率较低,所以默认此属性是关闭的。随后在Query方式查询时设置q.setCacheable(true);这两步执行后便完成了让Query支持二级缓存。

(4)怎样清除二级缓存:HibernateUtil.getSessionFactory().evict(User.class);这样将清除二级缓存中所有的User类相关的数据。

5.分步式缓存:

首先我们用图来模拟分步式缓存:


说明:在大型的web系统中,通常都会采用多个服务器来进行web服务,比如在上面的实例中,我们在服务器一存有“数据data”,在服务器二中也存有这个数据,但当我们在服务器N中更改这个数据时,如果我们继续访问在服务器一或二的数据,将不能得到正确的数据,这时采取的方式就是只要有服务器改变这个数据就在这些服务器组成的内网中广播这个信息来更新每个改变的数据。虽然服务器在内网中通讯,但是这种方式也是非常耗资源的,后来提出了“中央缓存”来解决此问题,如下图:
[img]http://dl.iteye.com/upload/picture/pic/47681/fcb20780-b589-341c-a555-85af86385b70.gif
[/img]
原理:当我们去某个服务器查询数据时,这个服务器会去中央缓存查询,同样如果下面的某个服务器修改数据时,中央缓存也会及时把数据更新到库并重新保存新数据。但是如果数据交互快的话,我们仍不能保证数据这些服务器访问中央缓存时是及时数据。比如在服务器一访问中央缓存修改数据时,其它的几个服务器也能访问修改,这样就不能保证及时获取正确信息。所以使用缓存的条件有如下几点:读取大于写入;数据量不能超过内存容量;对数据要有独立的控制;允许无效的数据存在。

分享到:
评论

相关推荐

    hiberante入门(十七):简要总结及源码文档

    NULL 博文链接:https://86asm.iteye.com/blog/493165

    Hiberante part 9:一对一关系映射

    2. **外键约束**:默认情况下,Hibernate会在被引用方(通常是拥有`mappedBy`的那一方)生成外键,但可以通过`@JoinColumn`自定义外键列。 3. **Fetch策略**:默认情况下,一对一关系的Fetch策略为`EAGER`,即加载主...

    最新springboot2hiberante5项目

    最新springboot2基础hiberante5完整项目,打包jar,运行jsp,包括后台与前台,拦截器,登录,后台下载就可以使用,注意不是jpa,里面有完整Dao,千万级数据项目分离的代码,为了适合老项目开发特意集成hiberante5....

    hiberante3 注解帮助文档

    hiberante3 注解帮助文档hiberante3 注解帮助文档hiberante3 注解帮助文档hiberante3 注解帮助文档hiberante3 注解帮助文档

    hiberante 源码 配置资料

    4. 缓存配置:Hibernate提供了一级缓存和二级缓存,一级缓存是Session级别的,而二级缓存可以通过第三方插件如Ehcache进行配置,提高数据访问性能。 5. SessionFactory初始化:通过`Configuration`类加载配置信息并...

    Hiberante3相关文档

    2. **Hibernate3_缓存机制**: Hibernate使用缓存技术来减少对数据库的访问次数,从而提高性能。第一级缓存是Session级别的,每个Session都有自己的缓存,对象在此缓存中自动存储和检索。第二级缓存是SessionFactory...

    hiberante4.2.3-part2

    hiberante4.2.3-part2

    DAO层中对Hiberante

    它提供了一种对象级别的缓存,确保了对象状态的一致性。 2. `Transaction transaction`:代表了一个数据库事务,用于管理一组数据库操作,确保它们要么全部成功,要么全部失败(ACID属性)。 `HibernateDAO` 类提供...

    Hiberante3.jar + API

    四、API详解 1. Configuration类:负责读取配置文件,创建SessionFactory实例。例如: ```java Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); ``` 2. ...

    spring4+hiberante4+struts2+maven

    SSH是Java开发中的一种经典企业级应用框架组合,由Spring、Hibernate和Struts2组成,分别负责控制层、持久层和表现层。Spring是整个应用的核心,提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,极大地简化了...

    Struts+Hiberante+Sprint 框架整合

    开发工具:MyEclipse 6....Struts+Spring+Hiberante框架整合的简单登录系统 无需配置任何文件、只需在mysql中创建一个空数据库 如:create database test; 注:mysql数据库用户名:root 密码:root

    Struts2+hiberante+Spring+Extjs+OA办公系统,完整包

    Struts2、Hibernate、Spring、ExtJS 和 OA(Office Automation)办公系统的整合是企业级Java应用开发中的常见架构,这个组合通常被称为SSH2E。这是一个强大的框架集合,用于构建高效、可扩展且易于维护的企业级应用...

    hiberante5.0.7安装jar包

    2. **hibernate-entitymanager.jar**: 提供了JPA(Java Persistence API)的支持,使得开发者可以使用JPA规范来操作数据,同时享受到Hibernate的优化和功能。 3. **hibernate-validator.jar**: 实现了JSR-303/JSR-...

    Struts2+Hiberante+ajax+Mysql 三级联动

    总的来说,"Struts2+Hiberante+ajax+Mysql 三级联动"项目展示了如何利用这些技术进行高效的Web开发,特别是在处理多级交互和动态数据展示方面。通过学习和实践这样的项目,开发者可以提升对Java Web开发的理解,尤其...

    Struts2 Spring2.5 Hiberante3.3.2 +ExtJS(Struts2-json)做的CRUD

    Struts2、Spring2.5、Hibernate3.3.2以及ExtJS是Java Web开发中的四大核心技术,它们共同构建了一个强大的MVC(Model-View-Controller)架构,用于实现高效、灵活的企业级应用。这个DEMO是将这些技术集成在一起,以...

    Hiberante 有关jar包

    Hibernate Tools是一套全新而且完整的面向Hibernate3的工具集合,它包含了Eclipse插件和Ant编译流程。Hibernate Tools是JBoss Tools的核心组件,所以他也是JBoss Developer Studio的一部分

    spring+mvc+hiberante

    Spring 框架是 Java 企业级应用开发中的核心组件,它提供了全面的软件基础设施,包括依赖注入(DI)、面向切面编程(AOP)以及众多的模块如数据访问、Web 应用、任务调度等。Spring MVC 是 Spring 框架的一部分,...

    hiberante查询方式使用详解

    本文将深入探讨Hibernate的四种主要查询方式:HQL(Hibernate Query Language)、SQL、QBC(Query By Example)以及存储过程的使用。 首先,HQL是Hibernate提供的面向对象的查询语言,它类似于SQL,但与对象模型更...

    Struts2、 Hiberante、 Spring、 Extjs、 OA办公系统,完整包

    Struts2、Hibernate、Spring、ExtJS以及OA(Office Automation)办公系统是Java开发领域中常用的五大技术框架,它们在构建高效、稳定的Web应用程序时起着至关重要的作用。以下将详细解析这些技术及其在OA办公系统中...

    springmvc hiberante

    2. 国际化:Spring MVC可以通过MessageSource接口实现国际化。开发者需要创建资源文件,比如messages.properties(英文)和messages_zh_CN.properties(中文),并配置MessageSource来加载这些文件,以便在应用中...

Global site tag (gtag.js) - Google Analytics