设为首页 收藏本站
查看: 1697|回复: 0

[经验分享] hibernate 配置memcache作为二级缓存(Spring、Hibernate集成在applicationContext.xml中)

[复制链接]

尚未签到

发表于 2015-8-31 10:38:15 | 显示全部楼层 |阅读模式
  这次是我要做的毕业设计,其中memcached-2.5和hibernate-memcached-1.2.2的源代码在网上都可以找到。让memcached作为Hibernate的二级缓存做法比较简单,但想深入了解memcached或者Hibernate-memcached的原理,可参照网址:
  memcached完全剖析:http://kb.cnblogs.com/page/42731/
  Hibernate-memcached的源代码:http://code.google.com/p/hibernate-memcached/
  好!以下是memcached作为Hibernate二级缓存的做法:
  一、memcached的安装
  先下载memcached(注意版本)并安装,详情请参照:http://www.cnblogs.com/Darrenda/articles/memcached_for_java.html
  二、下载memcached、Hibernate的集成相关包
  memcached-2.1.jar
  spy-2.4.jar
  commons-codec-1.3.jar
  slf4j-api-1.5.0.jar
  如果你的项目使用的是Log4j,可以用
  slf4j-log4j12-1.5.0.jar
  最主要的是(里面就是Hibernate-memcached的源代码):http://code.google.com/p/hibernate-memcached/
  三、hibernate的配置如下(配置在applicationContext.xml中,以MYSQL为例):
  <property name="hibernateProperties">
  <!-- hibernate memcached 二级缓存 -->
   <value>
    hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
    hibernate.show_sql=true
    hibernate.format_sql=true
    hibernate.query.substitutions=true 1, false 0
    hibernate.jdbc.batch_size=20
    <!--Oracle中有MySQL中没有这种优化 -->  
    hibernate.jdbc.fetch_size=50
    <!--默认的数据库-->
<!--    hibernate.default_schema=mbp-->
    <!--配置Hibernate使用cache提供类-->
       hibernate.cache.provider_class=com.googlecode.hibernate.memcached.MemcachedCacheProvider
    <!-- 开启Hibernate的二级缓存 -->
      hibernate.cache.use_second_level_cache=true
    <!--设置查询缓存开启-->
    hibernate.cache.use_query_cache=true
    <!-- 设置memcached缓存服务器的端口 -->
       hibernate.memcached.servers=localhost:11211
      <!-- 设置二级缓存的前缀名称 -->
       hibernate.cache.region_prefix=quality.cache.ehcache
       <!-- 否使用结构化的方式缓存对象  -->
       hibernate.cache.use_structured_entries=true
       <!-- 操作超时时间设置,单位ms -->
       hibernate.memcached.operationTimeout=300000
       <!-- 缓存失效时间,单位秒 -->
       hibernate.memcached.cacheTimeSeconds=300
  其它一些参数如下:
PropertyDefaultDescription
hibernate.memcached.serverslocalhost:11211  memcached 服务地址,
  多个用空格分隔 格式host:port
hibernate.memcached.cacheTimeSeconds300缓存失效时间,单位秒
hibernate.memcached.keyStrategyHashCodeKeyStrategy  缓存Key生成存储
  HashCode算法
hibernate.memcached.readBufferSize  DefaultConnectionFactory.
  DEFAULT_READ_BUFFER_SIZE
  从服务器读取数
  据缓存区大小
hibernate.memcached.operationQueueLength  DefaultConnectionFactory
  .DEFAULT_OP_QUEUE_LEN
  Maximum length of
  the operation
  queue returned by
  this connection
  factory
hibernate.memcached.operationTimeout  DefaultConnectionFactory
  .DEFAULT_OPERATION_TIMEOUT
操作超时时间设置
hibernate.memcached.hashAlgorithmHashAlgorithm.KETAMA_HASH  新增缓存数据到服务
  器时使用的Hash散列
  算法。 当
  hibernate-memcached
  设置成 KETAMA_HASH
  算法时,注意:默认客户
  端API使用的是
  HashAlgorithm
  .NATIVE_HASH
hibernate.memcached.clearSupportedfalse  支持MemcachedCache
  .clear()方法
  清空缓存。 建议不要开启。
  将相应的包放进lib下,并启动服务器,提示信息如下:
  2012-12-08 18:32:46.908 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=localhost/127.0.0.1:11212, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2012-12-08 18:32:46.992 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@895684
2012-12-8 18:32:56 org.apache.coyote.http11.Http11Protocol start
  表示我们配置已经成功了,然后就是要对*.hbm.xml中加入<cache usage="read-write"/>
  <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.hwadee.entity.Film" table="film" catalog="mbp">
        <!-- id的缓存 -->
       <cache usage="read-write"/>
        <id name="filmId" type="java.lang.Integer">
            <column name="filmId" />
            <generator class="native" />
        </id>
        <property name="filmName" type="java.lang.String">
            <column name="filmName" length="1024" />
        </property>
  <set name="fimlcomments" inverse="true" cascade="all">
            <!-- 一对多的缓存 -->
         <cache usage="read-write"/>
            <key>
                <column name="filmId" />
            </key>
            <one-to-many class="com.hwadee.entity.Fimlcomment" />
        </set>
  </class>
</hibernate-mapping>
  这样hibernate就会在取id的时候,从缓存中读取数据,但是到此为止,并未完成配置查询缓存!
  在查询时代码要加入(前提是配置查询缓存时:hibernate.cache.use_query_cache=true):
  Query query = getSession().createQuery(finder.getOrigHql());
  query.setCacheable(true);//这样才能使查询的时候调用缓存!
  这样,memcached作为Hibernate的二级缓存就算配置完成了!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-106710-1-1.html 上篇帖子: memcached的PHP扩展之PECL/memcache与PECL/memcached区别 下篇帖子: Windows下的Memcache安装 (转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表