SSH2中memcached作為hibernate二級緩存


一、安裝memcached服務端

1. 下載memcached的windows穩定版,解壓放某個盤下面,比如在c:\memcached
2. 在CMD下輸入 "c:\memcached\memcached.exe -d install" 安裝.
3. 再輸入:"c:\memcached\memcached.exe -d start" 啟動,可以看到進程中多了memcached。

NOTE:1、 一定要開啟memcached服務;2、以后memcached將作為windows的一個服務每次開機時自動啟動。

二、導包

commons-codec-1.3.jar

hibernate-memcached-1.2.2.jar(很多文章中少了這個,導致失敗!)

memcached-2.1.jar

spy-2.4.jar

slf4j-api-1.5.0.jar

三、修改配置文件

1、applicationContext.xml

 <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<!--默認的數據庫-->
            <!--配置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
           </value>
 </property>    

更多詳細的參數請參考http://code.google.com/p/hibernate-memcached/wiki/Configuration

此時啟動tomcat服務器,console假如有如下的信息,

2013-07-20 18:29:42.426 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=localhost/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2013-07-20 18:29:42.426 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@8c4549

那恭喜您,您已經成功配置memcached作為二級緩存了!但是此時還不能使用memcached。

2、修改數據表映射文件*.hbm.xml

只需在需要緩存的字段前加上<cache usage="read-write"/>,根據不同的需求,usage可改為read、write

<hibernate-mapping>
    <class name="hibernate.TbUserbasic" table="tb_userbasic" catalog="db_xydate">
        <cache usage="read-write"/>         <id name="userId" type="java.lang.Integer">
            <column name="UserId" />
            <generator class="assigned" />
        </id>
        <property name="userName" type="java.lang.String">
            <column name="UserName" length="20" not-null="true" />
        </property>
...

3、查詢語句前

加上query.setCacheable(true);//這樣才能使查詢的時候調用緩存!

 Session session=this.getHibernateTemplate().getSessionFactory().openSession();
 Query query=session.createQuery(sql);
 query.setCacheable(true);//這樣才能使查詢的時候調用緩存!
 query.setFirstResult(start); 
 query.setMaxResults(size);
 List list=query.list();
 System.out.println(list.size());
 session.close();
 return list;

OK,此時應該是可以使用memcached作為強大的二級緩存了!

四、案例


第一次點擊搜索按鈕,console輸出信息為

第二、三、四...次點擊搜索按鈕,console輸出信息為:

Ok,第一次之后的查詢在緩存生命周期內都不用到數據庫去取數據了。

趕緊試試吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM