<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免费久久| 久久亚洲免费视频| 成人在线免费观看| 成人无码视频97免费| 亚洲国产成人资源在线软件| 国产又大又黑又粗免费视频| 成人电影在线免费观看| 亚洲 暴爽 AV人人爽日日碰| 久久99亚洲综合精品首页| 青青青国产在线观看免费| 一级黄色免费网站| 亚洲精品综合在线影院| 国产成人A人亚洲精品无码| 免费看少妇作爱视频| 久久aa毛片免费播放嗯啊| 亚洲第一综合天堂另类专| 久久久久无码精品亚洲日韩 | 粉色视频免费入口| 亚洲国产一区二区三区青草影视 | 免费一级毛片在线观看| 18禁美女裸体免费网站| 在线播放国产不卡免费视频| 久久精品国产亚洲αv忘忧草| 在线精品亚洲一区二区小说| 四虎影院免费在线播放| 最近中文字幕高清免费中文字幕mv | 日本中文一区二区三区亚洲| 亚洲一区二区免费视频| 99久久99这里只有免费的精品| 亚洲人成网亚洲欧洲无码| 久久精品国产亚洲av影院| 久久久亚洲精品蜜桃臀| 日韩免费视频观看| AV大片在线无码永久免费| 日本人成在线视频免费播放| 人体大胆做受免费视频| 亚洲国产aⅴ成人精品无吗| 亚洲欧洲日本在线观看 |