隨筆-1  評論-68  文章-98  trackbacks-0
          作者:徐建祥(netpirate@gmail.com

          時間:2007-07-18
          來自:http://www.anymobile.org

          經常使用的數據一般都會緩存起來,提高效率。對于數據量比較大的,如圖片、資訊類,可以采用緩存Cache+索引的機制處理;而對于比較簡單的數據,可以通過簡單的數據容器進行緩存。當然,它們最終一般都存放在Hashtable HashMap等容器中。

                 Cache 應用的原理大致是:初始化時將原數據導入Cache中或惰性加載;經常被查詢(點擊率高)的置前;當數據總大小超過Cache容量后,調整容量大小或清理不經常使用(點擊率低)的數據;數據超過有效期,及時清理;對于查詢失敗的數據,需CHECK一下。

                  簡單的數據容器,將需要緩存的數據保存至單獨的容器,并在一定的條件下進行數據同步。同步的方法大致有2種:啟用一個時間線程,定期集中檢查、處理各個容器的周期同步操作;或者由各個容器單獨維護自身的周期和同步操作。

                  前者統一處理,不會有額外的開銷,缺點是添加一個新的容器,都需要添加到同步線程中;后者單獨處理,實現起來比較快捷、沒有任何約束,而且互不影響,但使用的時候有額外的處理和對象開銷。

                  當然,單獨處理并不代表就是所有的業務邏輯都在各容器中控制執行,可以使用代理機制來解決這個問題。

                  靜態代理:代理對象與被代理的對象都必須實現同一個接口,在代理對象中可以實現CHECK等服務,并在需要的時候再調用被代理的對象,這樣代理對象就只保留業務相關職責。

                 動態代理:JDK1.3以后開始支持動態代理,處理者的類實現java.lang.ref.InvocationHandler類,可以使用一個處理者(Handler)服務于各個對象。

                 動態代理相對效率低些,集合靜態代理機制,數據容器大致流程如下:

                 所有的數據容器都實現Container接口,定義生命周期、同步數據時的時間戳,同步方法和讀取數據的方法;定義一個靜態代理類,在查詢數據的時候,檢查數據容器是否過期,過期則調用容器的同步方法。

          類圖如下:

          序列圖如下:

          樣例代碼如下:

              Container container = new StaticProxy( EntityContainer.getInstance() );

              int[] arr = (int[]) container.getOne("025");

          了解AOP的,很容易就會想到pointcutadvisorMethodBeforeAdviced等等,原理類似,略。

           (全文完)

          posted on 2007-07-18 10:07 Xu Jianxiang 閱讀(530) 評論(0)  編輯  收藏 所屬分類: Design ResearchJava Tech
          主站蜘蛛池模板: 景宁| 奉新县| 富顺县| 三门县| 商都县| 南投县| 木兰县| 长顺县| 伽师县| 南通市| 文登市| 兴业县| 剑川县| 内丘县| 深泽县| 东丰县| 玉田县| 曲周县| 阿勒泰市| 遵义市| 顺昌县| 汝阳县| 南乐县| 灌云县| 磴口县| 华宁县| 璧山县| 辽宁省| 万州区| 金乡县| 宁蒗| 郯城县| 夏河县| 当涂县| 南雄市| 洛浦县| 芮城县| 舒城县| 霍山县| 福清市| 肥东县|