1.EhCache是什么
EhCache是Hibernate的二級緩存技術之一,可以把查詢出來的數據存儲在內存或者磁盤,節省下次同樣查詢語句再次查詢數據庫,大幅減輕數據庫壓力;
2.EhCache的使用注意點
當用Hibernate的方式修改表數據(save,update,delete等等),這時EhCache會自動把緩存中關于此表的所有緩存全部刪除掉(這樣能達到同步)。但對于數據經常修改的表來說,可能就失去緩存的意義了(不能減輕數據庫壓力);
3.EhCache使用的場合
3.1比較少更新表數據
EhCache一般要使用在比較少執行write操作的表(包括update,insert,delete等)[Hibernate的二級緩存也都是這樣];
3.2對并發要求不是很嚴格的情況
兩臺機子中的緩存是不能實時同步的;
4.在項目做的實現
4.1在工程的src目錄下添加ehcache.xml文件,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="5"<!--緩存可以存儲的總記錄量-->
eternal="false"<!--緩存是否永遠不銷毀-->
overflowToDisk="true"<!--當緩存中的數據達到最大值時,是否把緩存數據寫入磁盤-->
timeToIdleSeconds="15"<!--當緩存閑置時間超過該值,則緩存自動銷毀-->
timeToLiveSeconds="120"<!--緩存創建之后,到達該緩存自動銷毀-->
/>
</ehcache>
4.2在Hibernate.cfg.xml中的mapping標簽上面加以下內容:
<property name="show_sql">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.cache.use_query_cache">true</property>
4.3在要緩存的bean的hbm.xml文件中的class標簽下加入以下內容:
<cache usage="read-only" /><!--也可讀寫-->
4.4創建DAO,內容如下:
Session s = HibernateSessionFactory.getSession();
Criteria c = s.createCriteria(Xyz.class);
c.setCacheable(true);//這句必須要有
System.out.println("第一次讀取");
List l = c.list();
System.out.println(l.size());
HibernateSessionFactory.closeSession();
s = HibernateSessionFactory.getSession();
c = s.createCriteria(Xyz.class);
c.setCacheable(true);//這句必須要有
System.out.println("第二次讀取");
l = c.list();
System.out.println(l.size());
HibernateSessionFactory.closeSession();
4.5這時你會看到打印出來的信息為(表示第二次并沒有去讀庫):
第一次讀取
Hibernate: *******
13
第二次讀取
13