沉睡森林@漂在北京

          本處文章除注明“轉(zhuǎn)載”外均為原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            152 隨筆 :: 4 文章 :: 114 評(píng)論 :: 0 Trackbacks
          1.EhCache是什么
              EhCache是Hibernate的二級(jí)緩存技術(shù)之一,可以把查詢出來的數(shù)據(jù)存儲(chǔ)在內(nèi)存或者磁盤,節(jié)省下次同樣查詢語(yǔ)句再次查詢數(shù)據(jù)庫(kù),大幅減輕數(shù)據(jù)庫(kù)壓力;

          2.EhCache的使用注意點(diǎn)
              當(dāng)用Hibernate的方式修改表數(shù)據(jù)(save,update,delete等等),這時(shí)EhCache會(huì)自動(dòng)把緩存中關(guān)于此表的所有緩存全部刪除掉(這樣能達(dá)到同步)。但對(duì)于數(shù)據(jù)經(jīng)常修改的表來說,可能就失去緩存的意義了(不能減輕數(shù)據(jù)庫(kù)壓力);

          3.EhCache使用的場(chǎng)合
              3.1比較少更新表數(shù)據(jù)
                  EhCache一般要使用在比較少執(zhí)行write操作的表(包括update,insert,delete等)[Hibernate的二級(jí)緩存也都是這樣];
              3.2對(duì)并發(fā)要求不是很嚴(yán)格的情況
                  兩臺(tái)機(jī)子中的緩存是不能實(shí)時(shí)同步的;

          4.在項(xiàng)目做的實(shí)現(xiàn)
              4.1在工程的src目錄下添加ehcache.xml文件,內(nèi)容如下:
                  
          <?xml version="1.0" encoding="UTF-8"?>
                  
          <ehcache>    
                      
          <diskStore path="java.io.tmpdir" />
                    
          <defaultCache maxElementsInMemory="5"<!--緩存可以存儲(chǔ)的總記錄量-->
                      eternal="false"
          <!--緩存是否永遠(yuǎn)不銷毀-->
                      overflowToDisk="true"
          <!--當(dāng)緩存中的數(shù)據(jù)達(dá)到最大值時(shí),是否把緩存數(shù)據(jù)寫入磁盤-->
                      timeToIdleSeconds="15"
          <!--當(dāng)緩存閑置時(shí)間超過該值,則緩存自動(dòng)銷毀-->
                          timeToLiveSeconds="120"
          <!--緩存創(chuàng)建之后,到達(dá)該緩存自動(dòng)銷毀-->
                    />
                  
          </ehcache>
              4.2在Hibernate.cfg.xml中的mapping標(biāo)簽上面加以下內(nèi)容:
                  
          <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標(biāo)簽下加入以下內(nèi)容:
                 
          <cache usage="read-only" /><!--也可讀寫-->
              4.4創(chuàng)建DAO,內(nèi)容如下:
                  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這時(shí)你會(huì)看到打印出來的信息為(表示第二次并沒有去讀庫(kù)):
                  第一次讀取
                  Hibernate: *******
                  13
                  第二次讀取
                  13
          posted on 2010-03-14 17:47 王總兵 閱讀(252) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南城县| 雅江县| 琼结县| 读书| 湘潭市| 申扎县| 澳门| 神农架林区| 双鸭山市| 松江区| 祁门县| 永清县| 通江县| 铁岭市| 托克逊县| 东平县| 唐山市| 福鼎市| 海原县| 鞍山市| 龙门县| 泸定县| 永靖县| 正蓝旗| 吉林市| 孟津县| 洛扎县| 防城港市| 峨边| 晋城| 金平| 施甸县| 金塔县| 阿勒泰市| 江孜县| 旬邑县| 阜阳市| 石柱| 交口县| 乌鲁木齐市| 承德县|