Hbernate二級キャッシュ詳細




Hibernate      

 Session    ,SessionFactory           。SessionFactory                           。
       SessionFactory                  SQL  ,                ,    SQL     Hibernate                 。SessionFactory         ,                      SQL  ,  SessionFactory                 。

       SessionFactory              。      ,SessionFactory        。                 ,                。SessionFactory         Hibernate     。

       Hibernate                   ,     ID key Map         。

         Hibernate         SessionFactory    ,             ,      Session     。

14.2.3.1             

       Hibernate            ,      ID     。   ,              ID       。

                         :

●             ,                 ,              ID        。

●    Hibernate  ID         ,    Session       ,              ,           ,      ,       ,     ID      。

●     、  、       ,      。

14.2.3.2             

       Hibernate                              ,                   。

                                :

●           。

●           ,           。

●             。

●       。

                              :

●           。

●       ,         。

●             。

                                          (                        ,  ,JDBC),    Hibernate            ,                       。

14.2.3.3          

             ,Hibernate   EHCache        。  ,       hibernate.cache.provider_class  ,         ,          org.hibernate.cache.CacheProvider  。

           org.hibernate.cache.CacheProvider                  。

       Hibernate             14.1  。

 14.1    Hibernate          

  

Provider 

  

  

    

Hashtable

org.hibernate.cache.HashtableCacheProvider

  

   

  

EHCache

org.hibernate.cache.EhCacheProvider

  ,  

    

  

OSCache

org.hibernate.cache.OSCacheProvider

  ,  

   

  

SwarmCache

org.hibernate.cache.SwarmCacheProvider

  

  

   

JBoss TreeCache

org.hibernate.cache.TreeCacheProvider

  

  

  

       Hibernate       JCS(Java Caching System)      。

14.2.3.4           

          Hibernate      ,                           。    ,                         。       <cache>        。<cache>             :

      

<cache 

           usage="transactional|read-write|nonstrict-read-write|read-only"               (1)

           region="RegionName"                                                                                                   (2)

           include="all|non-lazy"                                                                                                   (3)

/>

       <cache>



         14.2  。

 14.2    <cache>       

  

  

     

  

   

(1)

usage

      ,       :transactional,read-write,nonstrict-read-write read-only

Y

(2)

region

         

N

(3)

include

             。all,        ;non-lazy,            

N

all

14.2.3.5           

                                 ,       ,             。

                    ,      ,       。        4          ,               。

●       (read-only)

                          ,          ,    read-only  。     ,          。

           ,     ,            。

●    /   (read-write)

                   ,  read-write      。             ,             。

              ,          ,                。

●        /   (nonstrict-read-write)

                   (    ,                      ),             ,    nonstrict-read-write  。

       ,           ,            。

●       (transactional)

       transactional              ,           。    Repeatable Read      。              ,          ,                      。

                   ,                ,      /         ,          。         ,       。

14.2.3.6              

             ,         Hibernate       。              EHCache。

         EHCache        http://ehcache.sourceforge.net    。

        Hibernate               :

●    Hibernate    (   hibernate.cfg.xml) ,           。

●     EHCache     。

●                            。

                         Hibernate     。

         Hibernate     

          Hibernate      ,   Hibernate               ,   Hibernate               。

                  hibernate.cache.provider_class,   EHCache ,        org.hibernate.cache.EhCacheProvider。            :

     

  <property name="hibernate.cache.provider_class">           org.hibernate.cache.EhCacheProvider</property>

 

       Hibernate                  hibernate"src"cn"hxex" hibernate"cache"hibernate.cfg.xml  。

         EHCache    

             ,EHCache  classpath         ehcache.xml     EHCache     。

             ,   EHCache               。          14.9  。

         14.9    EHCache   
<?xml version="1.0" encoding="UTF-8"?>

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

       xsi:noNamespaceSchemaLocation="ehcache.xsd">

       <diskStore path="java.io.tmpdir" />

       <defaultCache 

              maxElementsInMemory="10000" 

              eternal="false" 

              timeToIdleSeconds="120" 

              timeToLiveSeconds="120" 

              overflowToDisk="true" 

              diskPersistent="false" 

              diskExpiryThreadIntervalSeconds="120" 

              memoryStoreEvictionPolicy="LRU" />

</ehcache>



              EHCache             EHCache     ,                   (http: //ehcache.sourceforge.net/)    。       ,                    。

             

                     User  ,     ID,name age    ,                hibernate"src"cn"hxex"cache"User.java  。

             

                       Java                  <cache>             。            “read-write”。  ,               :

       <cache usage="read-write"/>

                         hibernate"src"cn"hxex"cache"User.hbm.xml  。

            

                           ,      Session                   。

               ,         ID          ,     。           ,                   。

                         14.10  。

         14.10            

……
 

public void run() {

           SessionFactory sf = CacheMain.getSessionFactory();

           Session session = sf.getCurrentSession();
           

           session.beginTransaction();

           

           User user = (User)session.get( User.class, "1" );

           System.out.println( user );        

           session.getTransaction().commit();

}
       public static void main(String[] args) {

              CacheMain main1 = new CacheMain();
              main1.start();
              CacheMain main2 = new CacheMain();
              main2.start();
       }

}


    
             

                ,                 。    ID  1,       SQL  。

       INSERT INTO userinfo(userId, name, age) VALUES( '1', 'galaxy', 32 );

                   ,           :

Hibernate: select user0_.userId as userId0_0_, user0_.name as name0_0_, user0_.age as age0_0_ from USERINFO user0_ where user0_.userId=?

ID:  1

Namge:   galaxy

Age:       32

ID:  1

Namge:   galaxy

Age:       32

                  ,           User     ,                  ,      User             ,             。

14.2.3.7        

                          。        SessionFactory         ,         key-value         。

             key        、     、                 。              ,  SELECT                           ,          。                             ID ,            ,       。

               ,      hibernate.cache.provider_class          ,     hibernate.cache.use_query_cache             。

               ,                                      。

                           。

         Hibernate    

             Hibernate     ,  hibernate.cache.use_query_cache     。      :

       <property name="hibernate.cache.use_query_cache">true</property>

       Hibernate                  hibernate"src"cn"hxex" hibernate"cache"hibernate.cfg.xml  。

              

                            ,  ,  EHCache                                 。                 ,   14.11  。

         14.11          

……

   

 public void run() {

           SessionFactory sf = QueryCacheMain.getSessionFactory();

           Session session = sf.getCurrentSession();

           

           session.beginTransaction();

           

           Query query = session.createQuery( "from User" );

           Iterator it = query.setCacheable( true ).list().iterator();

           while( it.hasNext() ) {

                  System.out.println( it.next() );

           }

           

           User user = (User)session.get( User.class, "1" );

           System.out.println( user );

           

           session.getTransaction().commit();

    }

       public static void main(String[] args) {

              QueryCacheMain main1 = new QueryCacheMain();

              main1.start();

              

              try {

                     Thread.sleep( 2000 );

              } catch (InterruptedException e) {

                     e.printStackTrace();

              }

              QueryCacheMain main2 = new QueryCacheMain();

              main2.start();

       }

}


                            。   “from User”        ,     ID                 。  ,                              。

              

                  ,           :

Hibernate: select user0_.userId as userId0_, user0_.name as name0_, user0_.age as age0_ from USERINFO user0_

ID:  1

Namge:   galaxy

Age:       32

ID:  1

Namge:   galaxy

Age:       32

ID:  1

Namge:   galaxy

Age:       32

ID:  1

Namge:   galaxy

Age:       32

                    ,        ,      SQL    。      ID                   ,      ,            。