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

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

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

    隨筆-72  評論-20  文章-0  trackbacks-1

         TreeCache是一種結(jié)構(gòu)化的、基于復(fù)制的事務(wù)緩存。TreeCache是JBoss應(yīng)用服務(wù)器中集群服務(wù)—包括JNDI集群、HTTP和EJB的Sesssion集群、JMS集群—的基礎(chǔ)框架。其可以單獨(dú)使用,可以集成到JBossAS應(yīng)用,也可以集成到其他的應(yīng)用服務(wù)器上。TreeCache是一種樹狀結(jié)構(gòu),每個節(jié)點(diǎn)擁有一個名字和多個或者沒有子節(jié)點(diǎn),除跟節(jié)點(diǎn)沒有子節(jié)點(diǎn)其他節(jié)點(diǎn)有且只有一個父母節(jié)點(diǎn),可以通過路徑名來訪問子節(jié)點(diǎn)(FQN:Full Qualified Name),在一個TreeCache中可以存在多棵樹,,即可以有多個根節(jié)點(diǎn)。當(dāng)應(yīng)用于分布式環(huán)境時,由于TreeCache是基于復(fù)制的,每個子節(jié)點(diǎn)的值必須是可序列化的。
         在下面中,將通過例子來了解TreeCache的功能及其配置,使用JBossCache1.4和JDK5.0。首先是一個最基本使用TreeCache的程序例子并配置一個TreeCache的配置骨架(各種常用的配置可參見jboss-cache-dist-1.4.0.CR1版本的etc目錄,如下各種配置參考也可見該目錄下的范例配置,以下不再強(qiáng)調(diào)),見下:

     1TreeCache tree = new TreeCache();
     2tree.setClusterProperties("treecache.xml"[img]/images/wink.gif[/img]; 
     3tree.createService(); 
     4tree.startService(); 
     5tree.put("/a/b/c""name""Ben"[img]/images/wink.gif[/img];
     6tree.put("/a/b/c/d""uid"new Integer(322649));
     7Integer tmp = (Integer) tree.get("/a/b/c/d""uid"[img]/images/wink.gif[/img];
     8tree.remove("/a/b"[img]/images/wink.gif[/img];
     9tree.stopService();
    10tree.destroyService(); 
    11

    treecache.xml:
     1<server>
     2    <mbean code="org.jboss.cache.TreeCache"
     3        name="jboss.cache:service=TreeCache">
     4        <depends>jboss:service=Naming</depends>
     5        <depends>jboss:service=TransactionManager</depends>
     6        <attribute name="ClusterName">TreeCache-Cluster</attribute>
     7        <attribute name="ClusterConfig">
     8            <config>
     9                <UDP mcast_addr="228.1.2.3" mcast_port="48866"
    10                    ip_ttl="64" ip_mcast="true" 
    11                    mcast_send_buf_size="150000" mcast_recv_buf_size="80000"
    12                    ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
    13                    loopback="false"/>
    14                <PING timeout="2000" num_initial_members="3"
    15                    up_thread="false" down_thread="false"/>
    16                <MERGE2 min_interval="10000" max_interval="20000"/>
    17                <FD_SOCK/>
    18                <VERIFY_SUSPECT timeout="1500"
    19                    up_thread="false" down_thread="false"/>
    20                <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
    21                    max_xmit_size="8192" up_thread="false" down_thread="false"/>
    22                <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10"
    23                    down_thread="false"/>
    24                <pbcast.STABLE desired_avg_gossip="20000"
    25                    up_thread="false" down_thread="false"/>
    26                <FRAG frag_size="8192"
    27                    down_thread="false" up_thread="false"/>
    28                <pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
    29                    shun="true" print_local_addr="true"/>
    30                <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
    31            </config>
    32        </attribute>
    33    </mbean>
    34</server>

         其中ClusterConfig配置在前面JavaGroups的介紹詳細(xì)介紹,其它配置比較簡單,需要進(jìn)一步了解請參見TreeCache文檔。
         一、Cache分類
         TreeCache按功能分為三類:本地(Local)Cache、復(fù)制(Replication)Cache和失效(Invalidation)Cache。本地Cache只應(yīng)用于本地環(huán)境,后兩個Cache可應(yīng)用于分布式環(huán)境,其中,在分布式環(huán)境中,復(fù)制Cache當(dāng)一個Cache實例的一個節(jié)點(diǎn)值發(fā)生變化時會將變化復(fù)制到其它實例中,而失效Cache是當(dāng)一個Cache實例的一個節(jié)點(diǎn)值發(fā)生變化時會將其它實例的相應(yīng)節(jié)點(diǎn)的值設(shè)為空,讓其重新去獲得該值,可通過這種方式緩存大對象以減少在實例中復(fù)制對象的代價。分布式Cache(復(fù)制和失效Cache)又分為兩種,同步(REPL_ASYNC)和異步(REPL_SYNC),同步Cache是在一個Cache實例做修改時,等待變化應(yīng)用到其它實例后才返回,而異步Cache是在一個Cache實例做修改時,即刻返回。其配置見下:
    1<!--
    2   Valid modes are LOCAL
    3                   REPL_ASYNC
    4                   REPL_SYNC
    5                   INVALIDATION_ASYNC
    6                   INVALIDATION_SYNC
    7-->
    8<attribute name="CacheMode">REPL_SYNC</attribute>
    9

         二、事務(wù)和并行(Transaction And Concurrent)
         TreeCache是一種事務(wù)Cache,與JDBC一樣,其包括兩方面內(nèi)容:鎖和隔離級別。鎖分為悲觀鎖和樂觀鎖,當(dāng)使用悲觀鎖時,分為五個隔離級別,分別是SERIALIZABLE、REPEATABLE_READ (default)、READ_COMMITTED、READ_UNCOMMITTED和NONE,隔離級別逐步減弱。樂觀鎖也叫版本鎖,其對數(shù)據(jù)進(jìn)行操作時,將其復(fù)制到臨時區(qū),操作之后將版本與原有數(shù)據(jù)比較,如果一致則將遞增版本并寫回,如果不一致則回滾,由于樂觀鎖僅在復(fù)制出數(shù)據(jù)和提交數(shù)據(jù)時對數(shù)據(jù)加鎖,所以并行度更高,但如果寫操作比較頻繁地話則容易出現(xiàn)沖突導(dǎo)致回滾。TreeCache默認(rèn)使用悲觀鎖。使用TreeCache時,需要使用容器提供的事務(wù)管理器,一般使JBossTransactionManagerLookup和GenericTransactionManagerLookup,前者應(yīng)用于JBOSS服務(wù)器,后者應(yīng)用于其他服務(wù)器,也可使用DummyTransactionManagerLookup用于測試。如上介紹的配置如下:
    1<attribute name="NodeLockingScheme">OPTIMISTIC</attribute>
    2       <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
    3      <attribute name="TransactionManagerLookupClass">org.jboss.cache.DummyTransactionManagerLookup</attribute>
    4 
    5

         三、逐出策略(Eviction Policy)
         由于內(nèi)存數(shù)量的局限,不可能將所有的Cache數(shù)據(jù)存放在內(nèi)存中,但使用內(nèi)存達(dá)到一定極限時,會將部分?jǐn)?shù)據(jù)清除出內(nèi)存,保存到其它持久媒質(zhì)中,定義的什么時候清除、如何清除的策略就是逐出策略。自定義一個逐出策略需要實現(xiàn)org.jboss.cache.eviction.EvictionPolicy、org.jboss.cache.eviction.EvictionAlgorithm、
    org.jboss.cache.eviction.EvictionQueue 和org.jboss.cache.eviction.EvictionConfiguration四個接口,系統(tǒng)提供了LRU(Least recently used,最近最少使用)、LFU(Least Frequently Used最不經(jīng)常使用)、FIFO(First In First Out先進(jìn)先出)、MRU(Most Recently Used最近最經(jīng)常使用)四種實現(xiàn),詳細(xì)參見org.jboss.cache.eviction包的源代碼。配置如下:
     1<attribute name="EvictionPolicyConfig">
     2   <config>
     3      <attribute name="wakeUpIntervalSeconds">5</attribute>
     4      <region name="/_default_">
     5        <attribute name="maxNodes">5000</attribute>
     6        <attribute name="timeToLiveSeconds">1000</attribute>
     7      </region>
     8      <region name="/org/jboss/data"
     9policyClass="org.jboss.cache.eviction.FIFOPolicy">
    10        <attribute name="maxNodes">5000</attribute>
    11      </region>
    12      <region name="/test/" policyClass="org.jboss.cache.eviction.MRUPolicy">
    13        <attribute name="maxNodes">10000</attribute>
    14      </region>
    15      <region name="/maxAgeTest/">
    16        <attribute name="maxNodes">10000</attribute>
    17        <attribute name="timeToLiveSeconds">8</attribute>
    18        <attribute name="maxAgeSeconds">10</attribute>
    19      </region>
    20   </config>
    21</attribute>
    22
         四、Cache加載
        由于逐出策略的存在,那么當(dāng)我們重新需要獲得一個原來在緩存中但確由內(nèi)存原因被逐出的數(shù)據(jù)時,就需要定義一種加載策略,使地可以重新找回數(shù)據(jù),同時,Cache加載也肩負(fù)在將數(shù)據(jù)逐出時將數(shù)據(jù)保存到持久媒質(zhì)的責(zé)任。
        根據(jù)將數(shù)據(jù)保存媒質(zhì)的不同,Cache加載包括FileCacheLoader、JDBCCacheLoader等等,可以同時使用多種加載器來靈活定制加載策略。例見下:
     1<attribute name="CacheLoaderConfiguration">
     2    <config>
     3        <passivation>false</passivation>
     4        <preload>/</preload>
     5        <shared>true</shared>
     6        <cacheloader>
     7            <class>org.jboss.cache.loader.ClusteredCacheLoader</class>
     8            <properties>
     9                 timeout=1000
    10            </properties>
    11            <async>true</async>
    12            <fetchPersistentState>false</fetchPersistentState>
    13            ignoreModifications>false</ignoreModifications>
    14            <purgeOnStartup>false</purgeOnStartup>
    15        </cacheloader>
    16        <cacheloader>
    17            <class>org.jboss.cache.loader.JDBCCacheLoader</class>
    18            <properties>
    19                        cache.jdbc.table.name=jbosscache
    20                        cache.jdbc.table.create=true
    21                        cache.jdbc.table.drop=true
    22                        cache.jdbc.table.primarykey=jbosscache_pk
    23                        cache.jdbc.fqn.column=fqn
    24                        cache.jdbc.fqn.type=varchar(255)
    25                        cache.jdbc.node.column=node
    26                        cache.jdbc.node.type=longblob
    27                        cache.jdbc.parent.column=parent
    28                        cache.jdbc.driver=com.mysql.jdbc.Driver
    29                        cache.jdbc.url=jdbc:mysql://localhost:3306/jbossdb
    30                        cache.jdbc.user=root
    31                        cache.jdbc.password=
    32             </properties>
    33             <async>true</async>
    34             <fetchPersistentState>false</fetchPersistentState>
    35             <purgeOnStartup>false</purgeOnStartup>
    36         </cacheloader>
    37    </config>
    38</attribute>
    39

       我們將通過定制如上的配置信息以更有效地使用JBossCache。詳細(xì)情況可參考JBoss TreeCache參考文檔和范例。
    posted on 2007-07-03 15:20 前方的路 閱讀(2903) 評論(3)  編輯  收藏

    評論:
    # re: JBossCache-TreeCache體驗[未登錄] 2008-02-26 11:49 | test
    恨好  回復(fù)  更多評論
      
    # re: JBossCache-TreeCache體驗[未登錄] 2008-02-26 11:50 | test
    如果能夠更詳細(xì)的給出整個實現(xiàn)過程就再好不過,可以發(fā)個配置(二)嗎?
      回復(fù)  更多評論
      
    # re: JBossCache-TreeCache體驗 2008-02-27 17:37 | jute
    如果能夠更詳細(xì)的給出整個實現(xiàn)過程就再好不過  回復(fù)  更多評論
      

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本成人在线免费观看| a级毛片高清免费视频| 亚洲精品国产精品乱码在线观看| 亚洲AV成人一区二区三区在线看| 日韩精品内射视频免费观看| 国产亚洲人成A在线V网站| 亚洲韩国在线一卡二卡| 无码人妻丰满熟妇区免费| 久久精品a亚洲国产v高清不卡| 香蕉免费一区二区三区| 亚洲最大的视频网站| 91成年人免费视频| 亚洲国产精品一区二区第一页免 | 国产乱子影视频上线免费观看| 最新亚洲精品国偷自产在线| 67194成是人免费无码| 国产亚洲欧美日韩亚洲中文色| 国产精品免费看久久久久| 亚洲精品视频免费看| 国产在线a免费观看| 亚洲色成人四虎在线观看 | 亚洲精品国精品久久99热| 亚洲欧洲综合在线| 无码少妇一区二区浪潮免费| 中文字幕 亚洲 有码 在线 | 最新亚洲春色Av无码专区| 亚洲国产成人a精品不卡在线| 久久www免费人成精品香蕉| 亚洲性天天干天天摸| 最近最新的免费中文字幕| 国产亚洲视频在线观看网址 | 在线看免费观看AV深夜影院| 亚洲av无码有乱码在线观看| 亚洲综合色在线观看亚洲| 91香蕉国产线在线观看免费| 亚洲成a人无码亚洲成www牛牛| 亚洲一区日韩高清中文字幕亚洲 | 亚洲天堂中文字幕在线观看| 日本高清免费网站| a毛片免费播放全部完整| 国产成人精品日本亚洲专|