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 , , 。