理解hibernate高速二級緩存區域
Hibernate在不同的高速緩存區域(cache region)保存不同的類/集合。
區域即是一個具有名稱的高速緩存塊,你可以給每一個高速緩存塊設置不同的緩存策略。如果沒有設置任何的緩存區域,
則所有被緩存的對象,都將使用默認的緩存策略。即:<defaultCache.../>
對于類而言,區域的名稱是類名。如:cn.itcast.domain.Person(一般情況后面會跟一個.data)
對于集合而言,區域的名稱是類名加屬性名。如cn.itcast.domain.Person.cars(一般情況,后面會跟一個.data)
hibernate的配置屬性:hibernate.cache.region_prefix可以給每一個區域配置一個前綴的名稱。但這種情況一般發生在一個項目中
有多個SessionFactory的情況。如果一個項目有多個SessionFactory則此配置也是必須的。
以下是示例:ehcache的具名緩存區域配置示例:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true" monitoring="autodetect"
dynamicConfig="true">
<diskStore path="d:/a"/> //指定文件保存路徑
<defaultCache //配置默認緩存區域,這是必須配置項。如果沒有給某個類設置緩存區域,它將使用默認緩存區域
maxElementsInMemory="100"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="300"
overflowToDisk="true"
/>
<cache name="cn.itcast.domain.Person" //指定Person類的緩存區域,所有Person類,都會保存在此區域
maxElementsInMemory="2" //故意指定內存中放很少的數據,以觀察生成的文件大小
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="300"
overflowToDisk="true"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="120"
maxElementsOnDisk="100"
>
</cache>
</ehcache>
測試代碼:一次生成多個Person實例,看看生成的文件大小:
Session s1 = HibernateUtils.openSession();
Person p1 = (Person) s1.get(Person.class,"11");
Person p2 = (Person) s1.get(Person.class,"402880e
Person p3 = (Person) s1.get(Person.class,"402880e6347311fa01347311fb
<!--[if !supportLineBreakNewLine]-->