熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java程序性能優化-緩存(Cache)(2)

2022-06-13   來源: Java高級技術 

    緩存(Cache)(

  以上代碼將載入EHCache的配置文件並生成CacheManager的實例之後就可以通過CacheManager對Cache進行管理

  將數據存入Cache的實現如下

  public static void put(String cachenameSerializable keySerializable value){

  managergetCache(cachename)put(new Element(key value))

  }

  在put()操作中首先指定要使用的Cache名稱接著就是類似於HashMap的名值對get()操作也是類似

  public static Serializable get(String cachenameSerializable key){

  try {

  Element e=managergetCache(cachename)get(key)

  if(e==null)return null;

  return egetValue()                //取得緩存中的數據

  } catch (IllegalStateException e) {

  eprintStackTrace()

  } catch (CacheException e) {

  eprintStackTrace()

  }

  return null;

  }

  有了以上的工具類便可以更方便地在實際工作中使用EHCache從軟件設計的角度來說筆者建議在頻繁使用且重負載的函數實現中加入緩存以提高它在頻繁調用時的性能

  在為方法加入緩存時可以使用最原始的硬編碼方式根據傳入的參數構造key然後去緩存中查找結果如果找到則立即返回如果找不到則再進行相關的業務邏輯處理得到最終結果並將結果保存到緩存中並返回這個結果這種方式的實現好處是代碼比較直白缺點是緩存組件和業務層代碼緊密耦合依賴性強

  本小節介紹基於動態代理的緩存解決方案對動態代理尚不了解的讀者可以回顧前文中代理模式一節基於動態代理的緩存方案的最大好處是在業務層無需關注對緩存的操作緩存操作代碼被完全獨立並隔離並且對一個新的函數方法加入緩存不會影響原有的方法實現是一種非常靈活的軟件結構

  注意使用動態代理無需修改一個邏輯方法的代碼便可以為它加上緩存功能提高其性能

  現在假設有一個可能被頻繁調用的方法它用於對一個整數做因式分解實現如下(由於本文不關注因式分解算法故只列出該類的結構)

  public class HeavyMethodDemo {

  public String heavyMethod(int num) {

  StringBuffer sb = new StringBuffer()

  //對 num 進行因式分解將結果保存在sb中

  return sbtoString()

  }

  }

  使用CGLIB生成動態代理類的方法攔截器的邏輯如下

  public class CglibHeavyMethodInterceptor implements MethodInterceptor {

  HeavyMethodDemo real=new HeavyMethodDemo()

  @Override

  public Object intercept(Object arg Method arg Object[] arg

  MethodProxy arg) throws Throwable {

  String v=(String)EHCacheUtilget(cache (Serializable)arg[])                                                      //查詢緩存

  if(v==null){

  v=realheavyMethod((Integer)arg[])        //緩存中未找到結果

  EHCacheUtilput(cache (Integer)arg[] v)  //保存計算結果

  }

  return v;

  }

  //省略其他代碼

       返回目錄Java程序性能優化讓你的Java程序更快更穩定

  編輯推薦

       Java程序設計培訓視頻教程

       JEE高級框架實戰培訓視頻教程

       JME移動開發實戰教學視頻

  Visual C++音頻/視頻技術開發與實戰

  Oracle索引技術

  ORACLEG數據庫開發優化指南


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27803.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.