介绍一下Hibernate的二级缓存

  按照以下思路来回答:(1)首先说清楚什么是缓存,(2)再说有了hibernate的Session就是一级缓存,即有了一级缓存,为什么还要有二级缓存,(3)最后再说如何配置Hibernate的二级缓存。

  (1)缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),这个数据结构通常是或类似Hashmap,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在缓存中,以便下次使用。

  (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来更改当前数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。

最新文章

  1. 如何在Windows7上完全卸载Oracle 11g(转)
  2. EasyUI+MVC+EF简单用户管理Demo(问题及解决)
  3. JavaScript中数组去除重复
  4. try : finally语句
  5. Java-简陋的图书管理
  6. application:didFinishLaunchingWithOptions:详解
  7. Linux安装python 2.7.9
  8. 针对各主流数据mysql、sqlserver、oracle中文乱码问题。
  9. openwrt 家用备忘
  10. Oracle 12cR1 RAC 在VMware Workstation上安装(上)—OS环境配置
  11. KEIL中逻辑分析仪的使用
  12. 防止fixed元素遮挡其他元素的方法
  13. JDK自带的Timer类
  14. LintCode主元素
  15. Logistic Regression vs Naive Bayes
  16. LeetCode之“动态规划”:House Robber && House Robber II
  17. 11招玩转黑客攻防——用Python,更安全
  18. linux下的shell脚本的使用
  19. [No0000E7]C# 封装 与访问修饰符
  20. vue 用v-if 或者 v-show 渲染dom时,初次加载闪烁的问题

热门文章

  1. CodeIgniter框架——CI组件间信息流走向
  2. 1282 时钟(最小表示法+hash)
  3. Axis2Service客户端访问通用类集合List自定义类型
  4. javascript中字符串截取的两种方法
  5. Django的models方法返回值异常,待解决
  6. CSDN论坛停站维护公告
  7. C# 函数3
  8. vim常规操作
  9. Way to OpenSource
  10. Amend Last Commit选项使用注意点