<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 閱讀(2510) 評論(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成人无码国产电影| 国产精品国产免费无码专区不卡| 久久精品国产亚洲AV电影网| 免费v片视频在线观看视频| 美女扒开屁股让男人桶爽免费| 亚洲A∨精品一区二区三区| 99久久免费精品国产72精品九九| 亚洲制服丝袜一区二区三区| 可以免费看黄的网站| 亚洲乱码日产精品一二三| 免费观看国产小粉嫩喷水| 一区二区视频免费观看| 亚洲产国偷V产偷V自拍色戒| 最近中文字幕国语免费完整| 亚洲色中文字幕在线播放| 免费h黄肉动漫在线观看| 999zyz**站免费毛片| 亚洲精品亚洲人成在线观看麻豆 | 国产一区二区视频免费| 在线播放免费人成视频网站| 亚洲av无码潮喷在线观看| 国产片AV片永久免费观看| 特级毛片免费播放| 亚洲日本在线看片| 国产精品无码免费视频二三区| eeuss草民免费| 亚洲一级毛片免费观看| 亚洲精品国产日韩无码AV永久免费网 | 外国成人网在线观看免费视频| 亚洲中文久久精品无码1| 婷婷综合缴情亚洲狠狠尤物| 日韩内射激情视频在线播放免费|