七段

          無論怎樣,請讓我先感謝一下國家。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            35 Posts :: 2 Stories :: 7 Comments :: 0 Trackbacks
          Ref: http://community.jboss.org/wiki/JBossCacheOfficialDocumentation

          Cache的目的是為了以空間換時間,一次計算結果為多次重用。
          空間可以是實時內存空間、持久化的硬盤空間。時間可以是運算時間、連接時間、傳輸時間等。

          Cache可以分為LocalCache和DistributedCache。
          最簡單的LocalCache可以通過維護一個ConcurrentHashMap實現。
          缺點是:
          1,內存有限,容易out of memory (定期清除?持久化?)
          2, 需要對全map做concurrency維護,粗粒度的鎖定爭用會影響性能(樹結構維護?)

          在一個專業的企業級應用中,cache除了高性能和線程安全的要求,還要支持事務、高可用性、持久化、容錯、集群同步等。
          JBossCache是一個典型的企業級cache實現,他采用樹結構且支持集群和事務特性。
          雖然JBossCache這把牛刀也可以在standalone的JS2E應用中用來殺雞,但我們應該更關心用他在集群環境中怎么殺牛。
          JBossCache分為非集群模式(Local)和集群模式。
          集群模式根據實現策略又分為replication和invalidation。
          1 replication:通過拷貝改變的cache對象來保證與集群中其他cache同步。replication又可細分為同步replication和異步repliation兩種,異步replication較快,put以后馬上返回,但是replication出錯了,事務還是算完成了不回回滾。同步replication要花時間等待其他的cache完成replication的通知才能結束。

          2 invalidation: 如果cache狀態改變,僅僅是給其他cache發個通知,收到通知的cache把臟數據清除掉。invalidation也可分為同步和異步兩種,區別是發送通知的廣播方式一個是同步一個是異步。

          在jboss cluster中,我們最好通過MBean來部署jboss cache。這樣又幾個好處:
          1,JBoss NS支持Cluster
          我們就可以通過JBoss NamingService來訪問cache。如果在local NS中查不到cache,jbss NS還會去查cluster中其他的cache。
          2,利用MBean的特性
          通過CacheMBean, 我們可以方便的管理Cache Service,實時的啟動、停止或者改變一些配置,還可以監控到一些cache統計數據。
          3,利用microcontainer的特性
          我們可以通過配置XML文件來完成cache相關的所有對象聲明。簡而言之,就是利用java reflection和AOP的技術就不用寫聲明cache的代碼了。


          <?xml version="1.0" encoding="UTF-8"?>



          <deployment xmlns="urn:jboss:bean-deployer:2.0">



             
          <!-- First we create a Configuration object for the cache -->

             
          <bean name="ExampleCacheConfig"

                   class
          ="org.jboss.cache.config.Configuration">

                

                 build up the Configuration

                

             
          </bean>

             

             
          <!-- Factory to build the Cache. -->

             
          <bean name="DefaultCacheFactory" class="org.jboss.cache.DefaultCacheFactory">      

                
          <constructor factoryClass="org.jboss.cache.DefaultCacheFactory"

                             factoryMethod
          ="getInstance" />

             
          </bean>

             

             
          <!-- The cache itself -->

             
          <bean name="ExampleCache" class="org.jboss.cache.CacheImpl">

                

                
          <constructor factoryMethod="createnewInstance">

                    
          <factory bean="DefaultCacheFactory"/>

                    
          <parameter><inject bean="ExampleCacheConfig"/></parameter>

                    
          <parameter>false</parameter>

                
          </constructor>

                    

             
          </bean>

             

             
          <!-- JMX Management -->

             
          <bean name="ExampleCacheJmxWrapper" class="org.jboss.cache.jmx.CacheJmxWrapper">

                

                
          <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.cache:service=ExampleTreeCache", 

                                   exposedInterface=org.jboss.cache.jmx.CacheJmxWrapperMBean.class, 

                                   registerDirectly=true)
          </annotation>

                

                
          <constructor>

                    
          <parameter><inject bean="ExampleCache"/></parameter>

                
          </constructor>

                    

             
          </bean>



          </deployment> 

          后記:
          1,jboss cache的naga版中,采用Multi-versioned concurrency control來實現并發。下次再從中總結一下多線程的學習。
          2,jboss cache通過結合visitor pattern和command pattern,把對cache node的操作與訪問從中隔離出來,不用改變或者擴展node對象就可以添加新的node行為。也就是開閉原則。下次再從中總結一下幾種設計模式的經典應用。



          posted on 2010-03-28 23:10 sevenduan 閱讀(2511) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 贵德县| 萝北县| 长顺县| 沛县| 开原市| 同德县| 丹阳市| 华容县| 九龙坡区| 阜城县| 石楼县| 抚松县| 临江市| 焉耆| 彰武县| 肥西县| 黑山县| 健康| 泸水县| 永州市| 安图县| 伽师县| 紫金县| 阜宁县| 襄垣县| 日喀则市| 巴东县| 北安市| 剑河县| 阜南县| 封开县| 延津县| 囊谦县| 巴林左旗| 栾城县| 宁波市| 洪江市| 隆林| 天气| 湟中县| 千阳县|