参考答案和解析
正确答案:

 

按照以下思路来回答:(1)首先说清楚什么是缓存,(2)再说有了hibernate 的Session 就是

一级缓存,即有了一级缓存,为什么还要有二级缓存,(3)最后再说如何配置Hibernate 的

二级缓存。

(1)缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),

这个数据结构通常是或类似Hashmap,当以后要使用某个对象时,先查询缓存中是否有这个

对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在

缓存中,以便下次使用。下面是缓存的伪代码:

引出hibernate 的第二级缓存,用下面的伪代码分析了Cache 的实现原理

Dao

{

hashmap map = new map();

User getUser(integer id)

{

User user = map.get(id)

if(user == null)

{

user = session.get(id);

map.put(id,user);

}

return user;

}

}

Dao

{

Cache cache = null

setCache(Cache cache)

{

this.cache = cache

}

User getUser(int id)

{

if(cache!=null)

{

User user = cache.get(id);

if(user ==null)

{

user = session.get(id);

cache.put(id,user);

}

return user;

}

return session.get(id);

}

}

(2)Hibernate 的Session 就是一种缓存,我们通常将之称为Hibernate 的一级缓存,当想使

用session 从数据库中查询出一个对象时,Session 也是先从自己内部查看是否存在这个对象,

存在则直接返回,不存在才去访问数据库,并将查询的结果保存在自己内部。由于Session

代表一次会话过程,一个Session 与一个数据库连接相关连,所以Session 最好不要长时间

保持打开,通常仅用于一个事务当中,在事务结束时就应关闭。并且Session 是线程不安全

的,被多个线程共享时容易出现问题。通常只有那种全局意义上的缓存才是真正的缓存应用,

才有较大的缓存价值,因此,Hibernate 的Session 这一级缓存的缓存作用并不明显,应用价

值不大。Hibernate 的二级缓存就是要为Hibernate 配置一种全局缓存,让多个线程和多个事

务都可以共享这个缓存。我们希望的是一个人使用过,其他人也可以使用,session 没有这

种效果。

(3)二级缓存是独立于Hibernate 的软件部件,属于第三方的产品,多个厂商和组织都提供

有缓存产品,例如,EHCache 和OSCache 等等。在Hibernate 中使用二级缓存,首先就要在

hibernate.cfg.xml 配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己

的配置文件,最后要配置Hibernate 中的哪些实体对象要纳入到二级缓存的管理中。明白了

二级缓存原理和有了这个思路后,很容易配置起Hibernate 的二级缓存。扩展知识:一个

SessionFactory 可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数

据,当使用Hibernate 的二级缓存后,注意不要有其他的应用或SessionFactory 来更改当前

数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。

更多“介绍一下Hibernate的二级缓存”相关问题
  • 第1题:

    关于Hibernate缓存说法错误的是()。

    • A、Hibernate缓存一般分为三类:一级缓存、二级缓存和查询缓存
    • B、Session的evict()方法用于从缓存中清除指定的持久化对象
    • C、Session的clear()方法用于刷新缓存
    • D、Session的flush()方法用于从缓存中清除所有持久化对象

    正确答案:C,D

  • 第2题:

    不适合放入Hibernate二级缓存的有()

    • A、常被修改的数据
    • B、绝不容许出现并发的数据,例如财务数据
    • C、与其他应用共享的数据
    • D、常用数据

    正确答案:A,B,C

  • 第3题:

    在Hibernate 中关于缓存正确的说法有()    

    • A、Hibernate只有一级缓存
    • B、Hibernate有一级缓存也有二级缓存
    • C、一级缓存不是必须的
    • D、二级缓存可以使用Ehcache、Oscache等

    正确答案:B,D

  • 第4题:

    Spring包装Hibernate之后的Hibernate的DAO应该继承哪个类()。

    • A、Hibernate DAO
    • B、Session Factory
    • C、Hibernate DAO Suport
    • D、Session

    正确答案:C

  • 第5题:

    请介绍一下荚膜的功能。


    正确答案: ①保护作用。荚膜的存在有利于细菌防止干燥的危害,不易干死,有利于防止被吞噬(如有荚膜的肺炎球菌不易被白血球吞噬,毒性大),有利于防止噬菌体的侵袭;
    ②贮藏养料。当缺乏营养时荚膜物质可作为C(或N)源和能源被利用;
    ③表面附着作用。在废水生物处理中有利于污染物被吸附在细菌表面;
    ④ 细菌间的信息识别作用;
    ⑤ 堆积代谢废物。

  • 第6题:

    关于二级缓存,下列描叙不正确的是()。

    • A、二级缓存的英文名称是L2 Cache
    • B、二级缓存是协调CPU和内存之间的速度的
    • C、二级缓存是购买CPU时要考虑的一个重要指标
    • D、二级缓存越小,则CPU的速度越快

    正确答案:D

  • 第7题:

    请谈谈对Hibernate的理解,并简要叙述Hibernate的一级缓存和二级缓存。


    正确答案:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
    一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个
    Session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据;
    二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory
    创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库;

  • 第8题:

    多选题
    在Hibernate中关于缓存中却的说法有()
    A

    Hibernae只有一级缓存

    B

    Hibernate有一级缓存也有二级缓存

    C

    一级缓存不是必须的

    D

    二级缓存可以使用Ehcache、Oscache等


    正确答案: B,C
    解析: 暂无解析

  • 第9题:

    问答题
    请谈谈对Hibernate的理解,并简要叙述Hibernate的一级缓存和二级缓存。

    正确答案: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
    一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个
    Session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据;
    二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory
    创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库;
    解析: 暂无解析

  • 第10题:

    单选题
    在Hibernate 中关于缓存正确的说法有()。
    A

    Hibernate只有一级缓存

    B

    Hibernate有一级缓存也有二级缓存

    C

    一级缓存不是必须的


    正确答案: C
    解析: 暂无解析

  • 第11题:

    填空题
    自我介绍时,可以介绍一下自己的()、身份、单位。

    正确答案: 姓名
    解析: 暂无解析

  • 第12题:

    多选题
    不适合放入Hibernate二级缓存的有()
    A

    常被修改的数据

    B

    绝不容许出现并发的数据,例如财务数据

    C

    与其他应用共享的数据

    D

    常用数据


    正确答案: A,D
    解析: 暂无解析

  • 第13题:

    请简要的描述一下使用Hibernate二级高速缓存的经验


    正确答案: 1.Hibernate3的二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存;二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存;
    2.sessionFactory级别的缓存,需要手动配置;所有的session可以共享sessionFactory 级别的缓存;(一般把一些不经常变化的实体对象放到sessionFactory级别的缓存中,适合放不经常变化的实体对象。)
    3.Hiberante3二级缓存的配置和使用方法如下:
    必须把ehcache.jar包导入,然后到Hibernate3.2的etc文件下把ehcache.xml复制到工程src目录下(ehcache.xml里边的参数里边有详细英文说明);
    说明:ehcache.jar是第三方法的缓存产品,hiberante只是把它做了集成,还有好多第三方hibernate集成的缓存产品,相关说明请查阅hiberante3开发手册;ehcache是不支持分布应用的,如果有分布式需求,请换成支持分布式的二级缓存产品,hiberate3开发手册都有相头说明。配置方法都类似);
    4.Hibernate3的二级缓存默认是开起的,也可以指定开起。

  • 第14题:

    在Hibernate中关于缓存中却的说法有()

    • A、Hibernae只有一级缓存
    • B、Hibernate有一级缓存也有二级缓存
    • C、一级缓存不是必须的
    • D、二级缓存可以使用Ehcache、Oscache等

    正确答案:B,D

  • 第15题:

    自我介绍时,可以介绍一下自己的()、身份、单位。


    正确答案:姓名

  • 第16题:

    在Hibernate 中关于缓存正确的说法有()。

    • A、Hibernate只有一级缓存
    • B、Hibernate有一级缓存也有二级缓存
    • C、一级缓存不是必须的

    正确答案:B

  • 第17题:

    如果别人正在交谈,应选择谈话出现停顿的时候再作自我介绍,并说:“对不起,打扰一下,请允许我自己介绍一下”。


    正确答案:正确

  • 第18题:

    请介绍一下青白瓷。


    正确答案:青白瓷其实是宋代景德镇主要品种,我们元代继续烧造,但胎、釉、造型和装饰方法等和宋代有所不同。元青白瓷的胎体较厚,胎质更白,釉色也略白,器物很少变形,但不如宋影青的玉质感强烈,除了部分光素无纹的以外,也比较注重装饰,刻印串珠纹最有特色。元青白瓷器型较多,还创造出一些新器型,比如扁执壶、多穆壶、笔架山等等。

  • 第19题:

    Hibernate的二级缓存是由()维护的。

    • A、SessionFactory实例
    • B、Session实例
    • C、Query接口实例
    • D、Configuration实例

    正确答案:A

  • 第20题:

    多选题
    关于Hibernate缓存说法错误的是()。
    A

    Hibernate缓存一般分为三类:一级缓存、二级缓存和查询缓存

    B

    Session的evict()方法用于从缓存中清除指定的持久化对象

    C

    Session的clear()方法用于刷新缓存

    D

    Session的flush()方法用于从缓存中清除所有持久化对象


    正确答案: A,B
    解析: 暂无解析

  • 第21题:

    问答题
    请简要的描述一下使用Hibernate二级高速缓存的经验

    正确答案: 1.Hibernate3的二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存;二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存;
    2.sessionFactory级别的缓存,需要手动配置;所有的session可以共享sessionFactory 级别的缓存;(一般把一些不经常变化的实体对象放到sessionFactory级别的缓存中,适合放不经常变化的实体对象。)
    3.Hiberante3二级缓存的配置和使用方法如下:
    必须把ehcache.jar包导入,然后到Hibernate3.2的etc文件下把ehcache.xml复制到工程src目录下(ehcache.xml里边的参数里边有详细英文说明);
    说明:ehcache.jar是第三方法的缓存产品,hiberante只是把它做了集成,还有好多第三方hibernate集成的缓存产品,相关说明请查阅hiberante3开发手册;ehcache是不支持分布应用的,如果有分布式需求,请换成支持分布式的二级缓存产品,hiberate3开发手册都有相头说明。配置方法都类似);
    4.Hibernate3的二级缓存默认是开起的,也可以指定开起。
    解析: 暂无解析

  • 第22题:

    单选题
    关于二级缓存,下列描叙不正确的是()。
    A

    二级缓存的英文名称是L2 Cache

    B

    二级缓存是协调CPU和内存之间的速度的

    C

    二级缓存是购买CPU时要考虑的一个重要指标

    D

    二级缓存越小,则CPU的速度越快


    正确答案: B
    解析: 暂无解析

  • 第23题:

    单选题
    大家让我______的情况。
    A

    参加世界博览会我介绍一下

    B

    介绍我一下参加世界博览会

    C

    参加世界博览会介绍一下我

    D

    介绍一下我参加世界博览会


    正确答案: D
    解析: 暂无解析