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

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

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

    WZ_XJTU_JAVA_SPACE

    while(true) {System.out.println("wz.xjtu");}

    Cache之我見

    這兩日對Cache研究了一點,讀了一些源代碼,自己也寫了點code,借此假期也算是休閑加學習了。

    什么時候用Cache?

    在系統中,如果要考慮系統的性能,我們最好都使用Cache,在各個層次上都用上Cache,這樣的話可以盡最大程度的減少數據庫的壓力。估計現在的系統都在分層,vo,po,do(domain object);我們可以把這些東西能緩存的都緩存起來,當然要根據具體系統具體分析(Cache多長時間,Cache多少東西)。
    Tip:公司的系統中,由于用一臺數據庫,數據庫的壓力一直都是一個很大的問題,timeout,too many connection,等問題應接不暇。

    怎么用Cache?

    估計每個公司都有自己的Cache framework,簡單的就是幾個類,麻煩的可以做個小的framework去包裝已有的opensource的cache provider。很多opensource的cache provider(例如:oscahe,ehcache)都對性能進行了優化,所以肯定性能比Map好很多,但是肯定不能拿過來就用,那樣的話每次調用的時候太過于麻煩,寫很多的類,很多的方法。所以說包裝是很重要的,建議包裝成一個Bus一樣的東西(CacheBus,叫做CacheManager比較好),這樣的話就可以在各個層次都向上面寫和讀了。

    Tip: Cache就是key value,我們只要能寫好key-value怎么寫都可以的。這樣也讓系統變得簡單實用(更能體現OO)

    Cache Provider

    Oh,這方面太多東西了,oscache(貌似停止開發了),ehcache(被terracotta收購了,前途不錯),treecache(jbosstreecache大而全),memecached(很火了很久),nosql相關的東西(couchdb,mongodb)。Oh...不能忘記Map

    其實用什么都可以,關鍵是用好,一般的解決方案很簡單,既然你要在系統中用Cache并且想風風火火的用一下,那就來個二級Cache,第一級用本地Cache(速度快,但是東西不能太多),第二級,用memcached (能存放大的東東,便宜)。第一級Cache上3分鐘(自己要調試確定時間),自動收割到第二級Cache中。

    什么在第一級Cache中永遠存活? 小的,永遠都要用的,例如用戶信息,Site信息,一些template等。

    特別強調一下nosql 這方面mongodb和couchdb做的很好,在document相關的東西,可以緩存到這里面,例如:系統要在半天后發一封郵件,這封郵件所有的數據現在內存中都有,比較大的東東。到時候再去太復雜,太浪費內存了。怎么辦呢? 放在一級緩存肯定不合適,放在二級緩存,要存活半天呀,太浪費時間了,存在數據庫里面,增加壓力,也不是很好,NOSQL的mongodb和couchdb就可以解決這個問題,這個schemaless的數據庫,可以讓你輕松的存任何的東西(性能不錯)。(自己要優化一下代碼)


    舉例:

    Annotation

    @Documented
    @java.lang.annotation.Target(value
    ={java.lang.annotation.ElementType.TYPE})
    @java.lang.annotation.Retention(value
    =java.lang.annotation.RetentionPolicy.RUNTIME)
    public @interface CacheIt {
        
    //Provide the cacheProvider which will be use to cache the object which is just used to replace the xml configuration.
        public String cacheProvider();
        
    //Used to define how long the cache need to be provide
        public long cacheDuration();
        
    //The level of the cache, define, level1, level2 (If there is level2 defination in the annotation, the cache will be kick to level2 after the timeout in the level1)
        public int cacheLevel();

    }

    一個VO的configuration

    @CacheIt(cacheProvider="com.javaeye.wmwm.cache.impl.HashMapCacheProvider", cacheDuration=10000, cacheLevel=1)
    public class TestVo {
        
        @Identifier
        
    public String key;

        
    public String test;

        
    public String getKey() {
            
    return key;
        }

        
    public void setKey(String key) {
            
    this.key = key;
        }

        
    public String getTest() {
            
    return test;
        }


    之后寫一個CacheManager

    public class CommonCacheManager implements CacheManager {
        
    /**
         * Cache the object into the cache.
         * <p> the provider is defined in the annotation in the related Vo/PO/DO
         * <p> the key is annotated by the <code>Identifier</code>.
         * 
    @param object represents the input objects which needs to be cached.
         
    */
        
    public void cache(Object object) {
            Cache cache 
    = CachePool.getInstance().loadCache(object.getClass());
            Object key 
    = new CacheKeyFinder().find(object);
            cache.put(key, object);
        }

        
    public Object load(Class<?> clazz, Object key) {
            Cache cache 
    = CachePool.getInstance().loadCache(clazz);
            
    return cache.get(key);
        }
    }






    posted on 2009-12-09 11:44 wz.xjtu 閱讀(1928) 評論(6)  編輯  收藏

    評論

    # re: Cache之我見 2009-12-10 10:44 凡客誠品網

    三度空間富商大賈客服  回復  更多評論   

    # re: Cache之我見 2009-12-19 13:01 awp001

    我這幾天正在研究在系統內引入緩存,樓主說的一級緩存 二級緩存 是一個很好的想法。  回復  更多評論   

    # re: Cache之我見 2009-12-19 13:13 awp001

    目前我的核心任務是實現一個對象池,減少垃圾收集,樓主能否提供一些建議?  回復  更多評論   

    # re: Cache之我見 2009-12-19 14:06 awp001

    在分布式環境里,多個用戶共用一個Cache,從Cache中獲取對象的時候,如何解決用戶之間的爭搶問題,鎖定嗎?  回復  更多評論   

    # re: Cache之我見 2009-12-20 01:01 wz.xjtu

    @awp001

    對象池能減少垃圾收集嗎?現在的Cache(TreeCache)一般都能設置最大存儲數目和存儲的時間長度,這樣的話就可以實現當達到這個時間長度后進行GC了。不需要單獨的進行垃圾收集吧。

    一般系統中可以設置一個CacheBus一樣的東西,你的所有的應用都可以往CacheBus里面扔東西,只要Key不同就好了。這樣的話基本上就是一個Key-Value的內存結構了。也就是一個簡單的池了。

    分布式環境多個用戶共用一個Cache? (好像跟分布式無關吧),應該說是多個用戶共用一個Cache的話,會出現怎么讀數據的問題,最簡單的實現如果是用ConcurrentHashMap是不用設置鎖的(讀的時候),而且性能還不錯。如果是一些Cache Solution基本上也都解決了這樣的問題。

    如果是分布式環境,仍然要用Cache,這樣的話MemCached無疑是一個最好的選擇,也不用考慮這么多了。(現在也有很多好的實現。)  回復  更多評論   

    # re: Cache之我見 2009-12-20 13:32 awp001

    呵呵,對象池當然能減少垃圾收集啦,你說的TreeCache一般都能設置最大存儲數目和存儲的時間長度,對于單個對象的利用率已經提高了很多,不采用Cache的話,new一個對象,調用完了以后,過不了多久就被收集器回收了。所以啊采用Cache實際上已經減少垃圾收集了。
    我說的分布式環境,多個用戶共用一個Cache的爭搶問題,實際上通俗的說就是該Cache是不是線程安全,要解決資源競爭導致的死鎖。我研究了一下OSCache,它的規則是當一個線程訪問Cache,在Cache被更新之前,其他線程都被阻塞。這樣實際上也限制了系統的吞吐率。
    我目前在自己寫一個Map結構的對象池,正要解決資源競爭的問題。  回復  更多評論   


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


    網站導航:
     

    導航

    <2009年12月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統計

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    • 1.?re: Cache之我見
    • 評論內容較長,點擊標題查看
    • --awp001
    • 2.?re: Cache之我見
    • 評論內容較長,點擊標題查看
    • --wz.xjtu
    • 3.?re: Cache之我見
    • 在分布式環境里,多個用戶共用一個Cache,從Cache中獲取對象的時候,如何解決用戶之間的爭搶問題,鎖定嗎?
    • --awp001
    • 4.?re: Cache之我見
    • 目前我的核心任務是實現一個對象池,減少垃圾收集,樓主能否提供一些建議?
    • --awp001
    • 5.?re: Cache之我見
    • 我這幾天正在研究在系統內引入緩存,樓主說的一級緩存 二級緩存 是一個很好的想法。
    • --awp001

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久A级毛片免费观看| 中文字幕无码免费久久9一区9 | 无码专区一va亚洲v专区在线| 亚洲成人激情小说| 毛片在线免费视频| 亚洲欧洲国产综合AV无码久久| 女人被免费视频网站| 亚洲av无码日韩av无码网站冲| 毛片视频免费观看| 亚洲av成人一区二区三区观看在线| 免费视频淫片aa毛片| 在线看亚洲十八禁网站| 亚洲А∨精品天堂在线| 美女被免费网站91色| 亚洲bt加勒比一区二区| 国产成人精品免费视| 亚洲中文字幕无码爆乳app| 国产精品无码一区二区三区免费| 日韩在线观看视频免费| 亚洲国产精品va在线播放| 2019中文字幕免费电影在线播放| 亚洲婷婷第一狠人综合精品| 国产小视频在线观看免费| 一级中文字幕免费乱码专区| 国产aⅴ无码专区亚洲av| 精品国产sm捆绑最大网免费站| 亚洲日韩精品国产3区| 亚洲男人的天堂一区二区| 暖暖在线视频免费视频| 久久精品国产亚洲αv忘忧草| 国产国产人免费人成免费视频 | 亚洲av午夜成人片精品网站 | 久久国产乱子伦免费精品| 亚洲无人区码一二三码区别图片 | 亚洲成综合人影院在院播放| 日韩成人免费在线| a级毛片免费播放| 亚洲av专区无码观看精品天堂| 免费人成在线观看播放国产| 97人妻精品全国免费视频 | 国产成人亚洲精品影院|