hibernate缓存1

转载 2012年03月21日 16:32:12

缓存可以简单的看成一个Map,通过key在缓存里面找value。

一、缓存简介  Cache In Hibernate
HIBERNATE中的CACHE有两级.

一级是在Session范围内的CACHE. 即每个Session有自己的一个CACHE, 当前操作的对象都会被保留在CACHE中. 但是Session关闭后这个CACHE也就没有. 可见这级CACHE的生命期是很短的. (使用id进行关键字存储:缓存的key就是ID,value是POJO)(缓存的是实体对象)

另一级CACHE是在SessionFactory范围的, 可以被来自同一个SessionFactory的Session共享. 在HIBERNATE的文档中称其为SECOND LEVEL CACHE. 显然后者的优势较明显, 也比较复合当前的使用环境.   它可以使用不同的缓存实现,如EhCache、JBossCache、OsCache等 (二级缓存是缓存实体对象的)

还有一个类型的CACHE就是QueryCache. 它的作用就是缓存一个Query以及Query返回对象的Identifier以及对象的类型. 有了QueryCache后就可以高效的使用SECOND LEVEL CACHE.

hibernate查询缓存(hibernate默认是关闭的)
查询缓存是针对普通属性结果集的缓存
对实体对象的结果集只缓存id
查询缓存的生命周期,当前关联的表发生修改,那么查询缓存生命周期结束
查询缓存的配置和使用:
1. 启用查询缓存:在hibernate.cfg.xml中加入:
<property name=”hibernate.cache.use_query_cache”>true</property>
2. 在程序中必须手动启用查询缓存,如:query.setCacheable(true);

QueryCache用来缓存查询语句, 及查询结果集中对象的Identifier与Type. 当再次使用已缓存的Query时, 就可以通过对象的Identifier与Type在SECOND LEVEL CACHE中查找实际的对象.

对于查询缓存来说,缓存的key是根据hql生成的sql,再加上参数,分页等信息(可以通过日志输出看到,不过它的输出不是很可读,最好改一下它的代码)。

注:一级缓存也叫session级的缓存或事务缓存。Hibernate二级缓存也称为进程级的缓存或SessionFactory级的缓存。二级缓存是全局缓存,它可以被所有的session共享。二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。

二、缓存的范围

缓存的范围分为3类:
1.事务范围
     事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围.
2.应用范围
     应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存或硬盘作为存储介质,二级缓存就属于应用范围.
3.集群范围
     在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式.

三、缓存的方式

有四种,分别为:

  CacheConcurrencyStrategy.NONE

  CacheConcurrencyStrategy.READ_ONLY,只读模式,在此模式下,如果对数据进行更新操作,会有异常;

  CacheConcurrencyStrategy.READ_WRITE,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;

  CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不严格的读写模式则不会的缓存数据加锁;

  CacheConcurrencyStrategy.TRANSACTIONAL,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持JTA环境。

缓存的注释写法如下,加在Entity的java类上:

  @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

相关文章推荐

hibernate缓存机制(一)-n+1问题

hebernate 缓存机制,n+1问题

Hibernate框架——缓存(1)

一、缓存类型 1.1缓存分为三种:   1) 一级缓存(session级别缓存、事务级别缓存)  —— The First Level Cache 2) 二级缓存(sessionFactory级别缓存...

【SSH进阶之路】【六】hibernate5 操纵对象入门【1】Session缓存

java对象在JVM中的存活条件在Java中,我们使用User user = new User();来创建一个java对象时,JVM会为其分配一块内存空间,此时,这个对象被变量“user”引用,那么它...

spring学习笔记16--Spring2.x+Hibernate3.x +Struts1.x整合开发(4)-----Hibernate3.x配置二级缓存

一、导入hibernate二级缓存的所用的jar包------------------ehcache-1.2.3.jar 二、在spring配置文件中配置Hibernate的二级缓存相关属性(红色为...

Hibernate中 一 二级缓存及查询缓存(1)

最近趁有空学习了一下Hibernate的缓存,其包括一级缓存,二级缓存和查询缓存(有些是参照网络资源的): 一、一级缓存     一级缓存的生命周期和session的生命周期一致,当前sess...

Hibernate二级缓存.doc

  • 2012-06-05 12:30
  • 32KB
  • 下载

hibernate缓存

  • 2012-10-04 23:37
  • 40KB
  • 下载

关于hibernate的缓存使用

1.     关于hibernate缓存的问题: 1.1.1.         基本的缓存原理 Hibernate缓存分为二级,第一级存放于session中...

模拟hibernate中一级缓存

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)