沉睡森林@漂在北京

          本處文章除注明“轉載”外均為原創,轉載請注明出處。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            152 隨筆 :: 4 文章 :: 114 評論 :: 0 Trackbacks
          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
          posted on 2010-03-14 17:47 王總兵 閱讀(253) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 孟连| 东兴市| 尼木县| 阜新市| 普陀区| 河北区| 清水河县| 久治县| 黎平县| 拉萨市| 太原市| 西城区| 新宁县| 甘孜| 枣庄市| 天峨县| 奎屯市| 安徽省| 沁水县| 久治县| 通道| 顺昌县| 池州市| 乌拉特前旗| 石城县| 滁州市| 洞头县| 盖州市| 清水县| 延吉市| 四平市| 焉耆| 嘉义市| 丰顺县| 故城县| 龙海市| 佛教| 高州市| 桓仁| 中牟县| 斗六市|