<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    asdtiang的博客 感謝blogjava提供的博客交流平臺

    s2sh項目整合ehcache頁面緩存

    Posted on 2011-03-08 15:23 asdtiang 閱讀(2511) 評論(0)  編輯  收藏 所屬分類: java ee
    網上用ehcache做對象緩存和數據庫緩存的比較多。但仔細一想,直接做頁面緩存顯然更好,直接點不用繞路。
    本人用的是s2sh開發網站,整合了urlrewrite.其實最后頁面路徑配置時也是用的struts2的路徑。
    網上的比較多的就是直接給出配置文件。

    首先網上查了下,ehcache和oscache,上相應的官網查看,發現oscache到07年以后就沒更新過,不知道是改名字了,還是其它原因,最后采用了ehcache做頁面緩存

    配置可以參考官方頁面:http://ehcache.org/documentation/web_caching.html

    web里面配置如下:
     <filter>
        
    <filter-name>CachePage1CachingFilter</filter-name>
        
    <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter
        
    </filter-class>
        
    <init-param>
          
    <param-name>suppressStackTraces</param-name>
          
    <param-value>false</param-value>
        
    </init-param>
        
    <init-param>
          
    <param-name>cacheName</param-name>
          
    <param-value>CachePage1CachingFilter</param-value>
        
    </init-param>
      
    </filter>

      
    <filter>
        
    <filter-name>SimplePageFragmentCachingFilter</filter-name>
        
    <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageFragmentCachingFilter
        
    </filter-class>
        
    <init-param>
          
    <param-name>suppressStackTraces</param-name>
          
    <param-value>false</param-value>
        
    </init-param>
        
    <init-param>
          
    <param-name>cacheName</param-name>
          
    <param-value>SimplePageFragmentCachingFilter</param-value>
        
    </init-param>
      
    </filter>

      
    <filter>
        
    <filter-name>SimpleCachingHeadersPageCachingFilter</filter-name>
        
    <filter-class>net.sf.ehcache.constructs.web.filter.SimpleCachingHeadersPageCachingFilter
        
    </filter-class>
        
    <init-param>
          
    <param-name>suppressStackTraces</param-name>
          
    <param-value>false</param-value>
        
    </init-param>
        
    <init-param>
          
    <param-name>cacheName</param-name>
          
    <param-value>CachedPage2Cache</param-value>
        
    </init-param>

      
    </filter>

      
    <!-- This is a filter chain. They are executed in the order below.
      Do not change the order. 
    -->
      
    <filter-mapping>
        
    <filter-name>CachePage1CachingFilter</filter-name>
        
    <url-pattern>/CachedPage.jsp</url-pattern>
        
    <dispatcher>REQUEST</dispatcher>
        
    <dispatcher>INCLUDE</dispatcher>
        
    <dispatcher>FORWARD</dispatcher>
      
    </filter-mapping>

      
    <filter-mapping>
        
    <filter-name>SimplePageFragmentCachingFilter</filter-name>
        
    <url-pattern>/include/Footer.jsp</url-pattern>
      
    </filter-mapping>

      
    <filter-mapping>
        
    <filter-name>SimplePageFragmentCachingFilter</filter-name>
        
    <url-pattern>/fragment/CachedFragment.jsp</url-pattern>
      
    </filter-mapping>

      
    <filter-mapping>
        
    <filter-name>SimpleCachingHeadersPageCachingFilter</filter-name>
        
    <url-pattern>/CachedPage2.jsp</url-pattern>
      
    </filter-mapping>
    ehcache.xml文件要放在src下面。
    <Ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation
    ="../../main/config/ehcache.xsd">

        
    <diskStore path="java.io.tmpdir"/>


        
    <defaultCache
                
    maxElementsInMemory="10"
                eternal
    ="false"
                timeToIdleSeconds
    ="5"
                timeToLiveSeconds
    ="10"
                overflowToDisk
    ="true"
                
    />



        
    <!-- Page and Page Fragment Caches -->

        
    <cache name="CachePage1CachingFilter"
               maxElementsInMemory
    ="10"
               eternal
    ="false"
               timeToIdleSeconds
    ="10000"
               timeToLiveSeconds
    ="10000"
               overflowToDisk
    ="true">
        
    </cache>

        
    <cache name="CachedPage2Cache"
               maxElementsInMemory
    ="10"
               eternal
    ="false"
               timeToLiveSeconds
    ="3600"
               overflowToDisk
    ="true">
        
    </cache>

        
    <cache name="SimplePageFragmentCachingFilter"
               maxElementsInMemory
    ="10"
               eternal
    ="false"
               timeToIdleSeconds
    ="10000"
               timeToLiveSeconds
    ="10000"
               overflowToDisk
    ="true">
        
    </cache>

        
    <cache name="SimpleCachingHeadersTimeoutPageCachingFilter"
               maxElementsInMemory
    ="10"
               eternal
    ="false"
               timeToIdleSeconds
    ="10000"
               timeToLiveSeconds
    ="10000"
               overflowToDisk
    ="true">
        
    </cache>

    </ehcache>

    現在的問題是有些頁面要更新,在內存或者硬盤上的數據需要更新,而且是實時的。應該怎么辦,網上多的也是對象的操作,基本沒有緩存頁面的操作。
    首先說下緩存頁面的大概方法。
    ehcache.xml里面對應web.xml,name都一樣的,比如一個具體路徑,show.action?showId=1,配置如下:
     <filter-mapping>
        <filter-name>show</filter-name>
       <url-pattern>/show.action</url-pattern>
      </filter-mapping>
    取前面的部分就可以了。對應ehcache.xml配置:

    <!--

                maxElementsInMemory="10"內存中的最大頁面對象
                eternal="false"
                timeToIdleSeconds="120"   timeToIdleSeconds ,多長時間不訪問該緩存,那么ehcache 就會清除該緩存。           
                timeToLiveSeconds="240" timeToLiveSeconds ,緩存的存活時間,從開始創建的時間算起。
                overflowToDisk="true"     是否寫入硬盤


    -->
        <!-- Page and Page Fragment Caches -->

        <cache name="show"
               maxElementsInMemory="10"
               eternal="false"
               timeToIdleSeconds="30"
               timeToLiveSeconds="60"
               overflowToDisk="true">
        </cache>

    這里只有一個cache,在ehcache即對應一個Ehcache對象,由CacheManager(單例模式實現)去管理,在CacheManager里用配置文件中的name可以獲取Ehcache對象的實例。
    代碼如下:
    Ehcache cache = CacheManager.getInstance().getEhcache(cacheName);

    展示頁面有很多,比如一個商家一個展示頁面,即show.action?showId=1后面的數字是可變的,在ehcache里面是用map去存儲的,比如show.action?showId=1對應的key為:
    GET/show.actionshowId=1
    GET為訪問方式,把問號去掉了,ehcache內部也是這樣存儲的(類似map),這樣保證了請求的頁面在內存中的唯一性,獲取也快。
    既然key都知道了,刪除就好了,直接 查看api文檔Ehcache里有很多remove方法。示例代碼如下:
    Ehcache cache = CacheManager.getInstance().getEhcache(cacheName);
      if (null == cache) {
       return;
      }
      cache.remove(key);

    key的獲取就不用多說了吧,當更新一個頁面的數據時,肯定知道數據的id,直接字符串處理下就可以獲取key了,這里注意下就是,代碼編寫時,一般url里都有項目的名字,正式發布時,肯定沒有,而前者在ehcache里生成key里有項目的名字,即:
    GET/projetName/show.actionshowId=1
    所以最好用spring注入值,到時改也方便。

    更詳細的,請查看api文檔和測試下,官方文檔給的都是對象的,頁面緩存的給的比較少,我也是查看源碼才得出上面代碼。
    記一下,希望幫助有需求的人。




    天蒼蒼,野茫茫,風吹草底見牛羊

    posts - 80, comments - 24, trackbacks - 0, articles - 32

    Copyright © asdtiang

    asdtiang的博客 PaidMailz
    點擊廣告網賺A(每天4個廣告,每個0.0025美元,一個搜索廣告0.03美元)
    主站蜘蛛池模板: 亚洲国产精品一区二区九九 | 亚洲人成网站免费播放| 亚洲性无码一区二区三区| 又黄又大又爽免费视频| 国产偷伦视频免费观看| 亚洲精品天堂在线观看| 亚洲综合色成在线播放| 日韩免费精品视频| av成人免费电影| www.亚洲成在线| 亚洲人色婷婷成人网站在线观看| 57pao国产成永久免费视频| 黄色a级片免费看| 亚洲精品在线免费观看视频| 亚洲av成人一区二区三区在线观看| 免费视频成人手机在线观看网址| 亚洲精华国产精华精华液好用| 国产亚洲一区二区精品| 国产大片线上免费看| 91精品免费久久久久久久久| 一区在线免费观看| 伊人久久亚洲综合影院首页| 久热综合在线亚洲精品| 免费少妇a级毛片| 野花高清在线观看免费完整版中文| 伊人免费在线观看| 免费一级毛片在线播放视频免费观看永久 | sihu国产精品永久免费| 亚洲日韩一区二区一无码| 久久精品国产亚洲AV果冻传媒| 免费国产怡红院在线观看| 免费阿v网站在线观看g| 久艹视频在线免费观看| 九九九国产精品成人免费视频| 亚洲影视自拍揄拍愉拍| 亚洲美女视频网站| 亚洲AV无码一区二区三区系列| 亚洲精品乱码久久久久久不卡| 四虎免费在线观看| 青苹果乐园免费高清在线| 亚洲免费在线视频播放|