memcached,jcs,jdbc直接訪問之 優劣比較

使用memcached作爲orm緩存實現已經有一段時間了,
今天寫了一段測試代碼,想看看緩存對系統性能到底有多大提升,結果出乎意料。

測試方法 getById(String id),根據記錄id從數據庫中查出對象。

1. jdbc版本實現:直接用jdbc執行select方法,代碼大致如下
Java代碼
PreparedStatement pst = null;  
ResultSet set = null;  
 
    sql = "select " + TABLECOLUMN + " from " + TABLENAME + " where " 
            + IDCOLUMN + " = '"+id+"'";  
    pst = con.prepareStatement(sql);  
    set = pst.executeQuery();  
    BizObject b = helpSetValue(set); //從set到orm業務對象數據拷貝  
    return b; 

  PreparedStatement pst = null;
  ResultSet set = null;
  
   sql = "select " + TABLECOLUMN + " from " + TABLENAME + " where "
     + IDCOLUMN + " = '"+id+"'";
   pst = con.prepareStatement(sql);
   set = pst.executeQuery();
   BizObject b = helpSetValue(set); //從set到orm業務對象數據拷貝
   return b;

2.memcached實現,使用whalin客戶端實現
Java代碼
mcc.setCompressEnable( true );  
mcc.setCompressThreshold( 64 * 1024 );  
 
BizObject o = (BizObject)mcc.get(mccid);  
if (o==null){  
    o = loadObject(id); //調用jdbc查詢,並set到memcached server              
}  
return o; 

  mcc.setCompressEnable( true );
  mcc.setCompressThreshold( 64 * 1024 );
  
  BizObject o = (BizObject)mcc.get(mccid);
  if (o==null){
   o = loadObject(id); //調用jdbc查詢,並set到memcached server   
  }
  return o;

具體測試就是循環調用 getById方法 取出指定id,測試結果如下:
執行10次:
jdbc耗時:haoshi 31毫秒
memcached耗時:haoshi 109毫秒
執行100次:
jdbc耗時:haoshi 188毫秒
memcached耗時:haoshi 406毫秒
執行1000次:
jdbc耗時:haoshi 1579毫秒
memcached耗時:haoshi 2435毫秒,

memcache和oracle11g都安裝在同一IBMx3650服務器上,
測試結果是在另外一臺客戶機上運行得到的。
改用jcs本地緩存後,測試1000次循環只需要94毫秒。

oracle和memcached在同一臺服務器上(生產機),網絡狀況應該都一樣,排除這個差別,
memcached性能表現竟然比直接jdbc訪問要差,
由此可見,由於memcached的網絡訪問方式所限,無法達到很高的響應速度,
使用memcached只能分擔數據庫壓力,對系統性能的改善主要體現在提高系統可伸縮性,而不是提高絕對速度。

而是用本地jvm緩存能極大提高響應速度,但是由於集羣支持問題,擴展性有限。

綜述,在系統規模不是很大,沒有用到集羣,memcached佔用內存幾十兆的情況下,也就是普通的企業應用環境,
memcached並不能很好的發揮其優勢,可以考慮用普通的jvm緩存,如jcs等,在系統性能,部署複雜性等方面都較理想。

發佈了26 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章