Hibernate整合Memcached二级缓存

来源:互联网 发布:java list length 编辑:程序博客网 时间:2024/05/20 13:37

         今天弄了一天Hibernate整合Memcached二级缓存,跌跌撞撞终于初步搞定,不报错,总体感觉是Hibernate整合Memcached的官方支持不足。

一、Memcached 服务端安装

             请参考:http://www.cnblogs.com/xd502djj/archive/2012/09/25/2701800.html

             为了把memcached日志写入到文件,可用如下命令进行启动:

             memcached -d -m 1024 -p 11211 -c 512 -P /tmp/memcached.pid  -vv >>/tmp/memcached.log 2>&1 -u root 


二、Hibernate整合Memcached所需要Jar比较杂乱,不同文章有不同说法,而且没有统一下载地方。

              https://code.google.com/p/hibernate-memcached/wiki/Configuration

              此处为hibernate-memcached官方wiki提供的整合方案。


三、整合依赖的Jar包:

               hibernate-memcached-1.2.2.jar

               memcached-2.3.1.jar

               slf4j-api-1.7.12.jar

               slf4j-log4j12-1.7.2.jar

              下载

四、hibernate的配置文件设置

  

<bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="datasource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">${hibernate.dialect}</prop><prop key="hibernate.show_sql">true</prop><span style="color:#ff0000;"><prop key="hibernate.cache.use_second_level_cache">true</prop><prop key="hibernate.cache.use_query_cache">true</prop><!-- memercached缓存 --><prop key="hibernate.cache.provider_class">com.googlecode.hibernate.memcached.MemcachedCacheProvider</prop><prop key="hibernate.cache.region_prefix">quality.cache.memercached</prop><!-- memcached 服务地址,多个用空格分隔格式host:port --><prop key="hibernate.memcached.servers">lab-linux.winssage.com:11211</prop><!-- 缓存失效时间,单位秒 --><prop key="hibernate.memcached.cacheTimeSeconds">300</prop></span></props></property><!-- 注册映射文件 --><property name="mappingLocations"><list><value>classpath*:/com/winssage/**/*.hbm.xml </value></list></property></bean>


 五、java的bean的*.hbm.xml配置

<hibernate-mapping><class name="com.winssage.service.ServiceType" table="t_service_type" lazy="false"><span style="color:#ff0000;"><cache usage="read-only"/></span><id column="id" type="integer"><generator class="identity" /></id><property name="name" column="name" /><property name="description" column="description" /><many-to-one name="father" column="father_id" class="com.winssage.service.ServiceType" cascade="all"/>  </class></hibernate-mapping>


六、查看Hibernate中缓存统计信息

      在Hibernate的配置文件中,提供了hibernate.generate_statistics属性,

 

<property name="hibernateProperties"><props><prop key="hibernate.dialect">${hibernate.dialect}</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.cache.use_second_level_cache">true</prop><prop key="hibernate.cache.use_query_cache">true</prop><!-- memercached缓存 --><prop key="hibernate.cache.provider_class">com.googlecode.hibernate.memcached.MemcachedCacheProvider</prop><prop key="hibernate.cache.region_prefix">quality.cache.memercached</prop><!-- memcached 服务地址,多个用空格分隔格式host:port --><prop key="hibernate.memcached.servers">lab-linux.winssage.com:11211</prop><!-- 缓存失效时间,单位秒 --><prop key="hibernate.memcached.cacheTimeSeconds">300</prop><span style="color:#ff0000;"><prop key="hibernate.generate_statistics">true</prop></span></props></property>
        这时我们已经将Hibernate的统计信息打开了,接下来我们应该怎样使用它呢?
        在org.hibernate.SessionFactory类中提供了一个得到统计信息的方法,该方法返回一个Statistic类型的数据。之后我们通过Statistics对象取出数据操作时的缓存信息。它提供了取出全部统计信息和取出指定缓存的统计信息,例如:我们就想查看二级缓存中的统计信息,那么可以通过方法指定。

  

public void addPet() {// 创建一个Hibernate Configuration类的实例Configuration config = new Configuration().configure();// 创建SessionFactory对象SessionFactory sf = config.buildSessionFactory();// 调用调添加方法PetDaoImpl petImpl = new PetDaoImpl();petImpl.add();// 创建Statistics对象,并通过SessionFactory对象获得统计信息Statistics st = sf.getStatistics();// 打印全部统计信息System.out.println(st);// 打印二级缓存信息System.out.println(st.getSecondLevelCacheHitCount());}

0 0