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

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

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

    linugb118--java space

    Java

    WhirlyCache

     

                                                                     WhirlyCache

    借著最近項目用到cache,就順便研究了一下cache 的設計,研究對象WhirlyCache 一個sun公司輕量的cache工具

    作為一個cache的整體架構 他分這么幾個模塊

    1.配置信息 包括config 文件和resource文件

    Config文件 用來記錄cacheManger 中需要的信息以及對每種cache 的屬性記錄,他的結構就是以cache 為基本單位,

    <whirlyCache>

    <cache>..</cache>

    <cache>…</cache>

    </whirlyCache>

    而對于cache 我認為cache包括可以有一個或多個policycache策略)的定義,這些policy現在主要有FIFO,LRU等等,這些多個policys組合成當前該cachecache策略。除了主要策略 cache 還可以定義其他屬性。

    cacheConfig對象與config文件中的cache 聲明可以認為是一一對應的

    2.CacheManager cache管理器是cache功能中不可缺少的,和其他管理一樣,通常cache管理器是singleton模式,他的功能如下:

    A. load config文件, config文件load到內存,將每個cache信息set到對應的cacheconfig

    B. create cache 根據前面load config,根據不同的cacheconfig創建不同的cache,其中包括policy

    C.destroy 可以對manager中某個指定的cache進行destroy或者destroy 所有的cache

    D.getCache 通過指定的name來獲取緩存對象

    E.shutdown Whirlycache 他實現的其實是 destroy all caches 的功能, 我認為shutdown 應該是destroy all data in cachemanger的功能,包括unload config file

    CacheManager的數據結構:

    主要有兩個Map 用來存放數據

    一個是configMap load config之后,存放多個cacheConfig

    另一個是caches 用于存放不同的cache。、

    3.Cache 接口

    Cache 應該具有如下功能

    A. store cache中存放需要存放的對象

    B.retrieve cache中獲取需要的對象

    C.remove 清除cache中的某個對象

    D.size 獲取cachesize

    對于數據結構來說, 最終cache應該是map這種數據結構

    WhirlyCache cache中的key 有兩種

    一種就是map 中的object

    另外一種就是他獨有的對象 Cacheable object

    4.Cacheable 只是whirlyCache中的一個接口,他下面有三個方法的聲明

    OnRemoveonRetreiveonStore。這個接口表示,當你將Cacheable object

    作為cachekey的話,那么在執行cache中的remove,retrieve,store 三個操作

    的時候,他同時調用cacheable中對于的onXXX方法。我們可以認為這個是Listener

    當做Store的操作時候,如果put key cacheable 也就對于調用Cacheable onStore方法,那么實現onStore 就能在store 觸發器事件。

    5.CachePolicy

    所謂CachePolicy 就是cache的策略,那么他與ManagerCache 有關,需要為該Policy指定ManagerCache,  所以就有SetManagedCache(), 而某個Policy的屬性是在配置文件中指定的,所以就有了SetConfig(). 那么有混淆的就是Cache ManagedCache, 其實他們的區別在于一個是行為聲明, 一個是具體的數據結構,后面會具體分析,而這里需要說明他們和Policy的關系不同的是,cache 中應該是可以有多個policy,他是面向用戶的,用戶通常說的“我為某個Cache 指定了這么幾個策略組合” 那么這里的cache 就是指的Cache。而對于ManagedCache 他其實就是有個map實體,那么具體policy 的實現就是對該map的操作,比如FIFO 那么就要對這個map實行 FIFO的操作。

    下面還有一個方法是Policy interface 必須聲明的,那就是 performMaintenance(), 他就是具體執行該策略。Whirly 提供了下面幾種CachePolicy:

    a. FIFO   先進先出策略

    b. LFU Least Frequently Used algorithm

    c.LRU least recently used algorithm

    Policy的機制:

    首先需要一個Item對象, 他記錄被引用的object最近被使用,最近用的,以及被使用的記錄數等相關信息,在store的時候New 一個item 對象 一并putmanagedCache,在執行cacheremove store retrieve等操作的時候同時需要更新item中的信息。當執行到某個策略的時候,首先需要根據不同的policy 實現不同的Comparator( AddedComparatorCountComparator, UsedComparator) 而這些ComparatorObject比較原則就是將前面說的Item的記錄信息進行比較,然后將Object排序。managedCache 根據相應的Comparator進行Sort。然后將managedCache中大于Cache設置大小的數據進行remove,這樣整個過程就是performMaintenance

    6. CacheDecorator

    前面的cache只是接口,其實CacheDecrator才是cache的具體實現,前面的cache只是一個interface,他定義了面向用戶接口的相關行為,具體他表示對于cache而言,提供給外部人員使用的行為接口。比如用戶只要關心從cacheremove,retrieve object的這樣的邏輯行為。而對于內部數據結構方面的具體操作,用戶并不關心。為了清晰我們需要另外獨立定義接口。這樣我們定義了ManagedCache接口,他繼承map  interface。同時可以在該接口中定義其他數據操作的方法。

    AbstractMapBackedCache是實現ManagedCache的抽象類,到這里就需要引入具體的數據結構,所以AbstractMapBackedCache中有個 map field。而具體ManagedCache中的方法的實現,也是對該map 變量的操作。

    下面我們講講題外話:

    對于map type java世界中有很多種,有jdk里面的HashMap TreeMap 這些我們都比較熟悉,我們可以認為這些Map classic map而今天我們在WhirlyCache中看見了其他幾個map 有的我也看到過 有的也是第一次。

    ConcurrentHashMap

    來源:

    http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html

    FastHashMapImpl

    來源:

    org.apache.commons.collections.FastHashMap

    他是apache commons項目中collections的一個Map

    SynchronizedHashMapImpl:

    Collections.synchronizedMap( new HashMap())

    他表示該HashMap synchronized,該Map保證了該對象任何時候的一致性

    通過繼承AbstractMapBackedCache,為他的map field設置不同的map,就實現不同的cache策略,這個策略有別與前面的policy,前面的是算法的策略,這里應該是數據結構的策略。

    7.其他

    a.實現對Hibernate Cache的控制 ,實現net.sf.hibernate.cache.Cache接口

    b.添加關閉功能,當ServletContext reload的時候具體實現ServletContextListener

    posted on 2007-10-31 10:24 linugb118 閱讀(1400) 評論(1)  編輯  收藏

    Feedback

    # re: WhirlyCache [未登錄] 2008-01-24 10:28 linugb118

    他的缺陷是 他設置的緩存大小其實是存儲object的多少 而不是實際的內存大小 因此如果object 很大并且設置的緩存大小也很大 會出現內存溢出的問題   回復  更多評論   



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


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲色欲色欲www在线播放| 亚洲国产最大av| 国产成人无码精品久久久免费| 免费无遮挡无码视频网站| 亚洲中文字幕AV每天更新| 成人免费一区二区三区在线观看| 亚洲六月丁香婷婷综合| 无人影院手机版在线观看免费| 亚洲丝袜中文字幕| 午夜老司机免费视频| 亚洲AV日韩AV一区二区三曲| 免费A级毛片无码久久版| 好爽好紧好大的免费视频国产| 亚洲熟妇AV乱码在线观看| 午夜老司机免费视频| 日韩电影免费在线观看网址| 国产精品亚洲高清一区二区| 中文字幕不卡免费视频| 成人免费视频小说| 婷婷国产偷v国产偷v亚洲| 亚洲综合亚洲综合网成人| 免费a级毛片无码a∨免费软件| 免费A级毛片无码A| 国产成人无码免费看片软件| 亚洲欧洲国产精品你懂的| 99久久99久久精品免费看蜜桃| 亚洲色大18成人网站WWW在线播放| 国产福利免费观看| 四虎影视无码永久免费| 91亚洲性爱在线视频| 免费人成在线观看网站品爱网日本| 色老头综合免费视频| 亚洲网站免费观看| 免费女人18毛片a级毛片视频| a级毛片毛片免费观看永久| 亚洲人成图片网站| 国产亚洲成人在线播放va| 在线永久免费的视频草莓| 理论秋霞在线看免费| 亚洲女人影院想要爱| 亚洲日韩国产成网在线观看|