Hibernate中二级缓存的配置和使用

(一)Hibernate的二级缓存策略的一般过程如下:

1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。

2) 把获得的所有数据对象根据ID放入到第二级缓存中。

3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。

4) 删除、更新、增加数据的时候,同时更新缓存。

Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query Cache。

(二)什么样的数据适合存放到第二级缓存中?

1 很少被修改的数据

2 不是很重要的数据,允许出现偶尔并发的数据

3 不会被并发访问的数据

4 参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。

(三)不适合存放到第二级缓存的数据?

1 经常被修改的数据

2 财务数据,绝对不允许出现并发

3 与其他应用共享的数据。

实践部分:

使用EhCache配置二级缓存:

配置准备:

1)把ehcache-1.2.3.jar加入到当前应用的classpath中。

2)在hibernate.cfg.xml文件中加入EhCache缓存插件的提供类。

<!--配置缓存插件 -->

<property name="hibernate.cache.provider_class">

     org.hibernate.cache.EhCacheProvider

</property>

时间: 2024-11-02 23:43:28

Hibernate中二级缓存的配置和使用的相关文章

hibernate-关于Hibernate的二级缓存配置

问题描述 关于Hibernate的二级缓存配置 配置二级缓存时在实体xx.hbm.xml中配置的 <cache usage="read-only" include="non-lazy" region="personCache"/> 关于这个include属性,我看官方文档上说all是对所有属性就行缓存,non-lazy是对不是lazy加载的属性缓存,问题是我怎么判断它到底有没有对lazy="true"的属性缓存呢?

浅析Hibernate 3二级缓存基础

在向大家详细介绍Hibernate 3之前,首先让大家了解下Hibernate 3二级缓存,以后全面介绍Hibernate 3. 1.Hibernate 3二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存:二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存: 2.sessionFactory级别的缓存,需要手动配置:所有的session可以共享sessionFactory 级别的缓存:(一般把一些不

hibernate memcached 二级缓存无效

问题描述 我用memcached配置的二级缓存Spring-hibernate配置: <property name="hibernateProperties"> <props> <prop key="hibernate.connection.SetBigStringTryClob">true</prop> <prop key="hibernate.dialect">${hibernate

Hibernate的二级缓存问题

问题描述 Hibernate的二级缓存问题 1.hibernate.cfg.xml配置如下 <!-- 设置二级缓存供应商 --> <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <!-- 开启二级缓存 --> <property name="cache.use_second_level_cache&

hibernate Search 继续研究 增加 hibernate memcache 二级缓存 配置成功 附件maven代码(2)

首先安装 memecached 服务端:   之前写过的 文章,centos 安装memcached服务 :   http://toeo.iteye.com/blog/1240607   然后 在 前几天的 弄的  hibernate search 基础上,再添加 memcached 缓存.   因为 hibernate search 虽然 建立了索引.查询速度快了..但是依然要 load 数据.   证据就是 可以看到搜索如果有结果  肯定会执行 hql 将数据一次都查询出来.   Hiber

hibernate二级缓存的配置

问题描述 写了一个hibernate二级缓存的例子,从日志中看,似乎二级缓存已经启用,但在执行效果看,没有到二级缓存中查找数据.忘各位高手们帮帮小弟配置文件如下:hibernate.cfg.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN&qu

hibernate中一级缓存和二级缓存

    一级与二级缓存的作用:一级缓存是Session级别的,也就是说在一个事务中才会启作用.比如在一个事务中同时查询同一个对象,则不会两次去数据库中查询. 而二级缓存是sessionFactory级别的,不同的事务之间是可以共享的,有些权限,当用户首次登陆后便将关联的权限放到二级缓存中,这样每次需要权限时就无需再查询数据库了. 最后再说明为什么这样设计:一般情况下,我们查询的数据一般是实时的,使用二级缓存肯定不行,使用一级缓存既利用了缓存又不会影响实时.  使用二级缓存是为了存储一些比较稳定的

Hibernate使用二级缓存的问题.请大家帮忙看下。

问题描述 我在做Hibernate中做测试的时候 ,使用的是Hibernate3.32版本,在Hibernate.cfg.xml文件中配置了二级缓存.但是在不同的条件下查询的时候,会从数据库里面查询,不会从二级缓存中取出数据, 我看了一下我的打印出的log信息.有两条sql语句.下面是我的Hibernate.cfg.xml配置文件:<session-factory><property name="connection.username">root</pro

hibernate不启用二级缓存的情况下find()还会保存缓存吗

问题描述 如题 hibernate中如果不启用二级缓存 find()方法查询出来的数据还会保存在二级缓存中吗? 解决方案 不会.只会被加入到一级缓存.