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

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

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

1. jdbc版本實現:直接用jdbc執行select方法,代碼大致如下

Java代碼 複製代碼
  1. PreparedStatement pst = null;   
  2. ResultSet set = null;   
  3.   
  4.     sql = "select " + TABLECOLUMN + " from " + TABLENAME + " where "  
  5.             + IDCOLUMN + " = '"+id+"'";   
  6.     pst = con.prepareStatement(sql);   
  7.     set = pst.executeQuery();   
  8.     BizObject b = helpSetValue(set); //從set到orm業務對象數據拷貝   
  9.     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代碼 複製代碼
  1. mcc.setCompressEnable( true );   
  2. mcc.setCompressThreshold( 64 * 1024 );   
  3.   
  4. BizObject o = (BizObject)mcc.get(mccid);   
  5. if (o==null){   
  6.     o = loadObject(id); //調用jdbc查詢,並set到memcached server               
  7. }   
  8. 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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章