銷售助手-緩存優化實驗報告
2015.4.7 by ouyida3java
移動APP-銷售助手(又名外勤通),個別頁面訪問很是慢,急需優化。ios
某些表使用Ehcache把數據經過Key-Value緩存,不用每次均從數據庫取數。web
優化代碼:
詳見:/mapp/src/com/age/mapp/bean/MappTaskBean.javasql
修改前,每次均讀取oracle的方法:數據庫
javacomdao.getStaticValue 修改後,只第一次從oracle讀取,第二次之後從緩存讀取:CacheUtils.getStaticValue 代碼以下: // 優化效率,改成讀取緩存 author Ouyida3 2015.4.4 //taskmap.put("URGENT", comdao.getStaticValue(task.getString("URGENT"), "MAPP_EMERGENT_TYPE")); taskmap.put("URGENT", CacheUtils.getStaticValue(task.getString("URGENT"), "MAPP_EMERGENT_TYPE", pd));
爲了測試使用時間,在先後均加上時間的打印代碼:segmentfault
java// 增長時間差顯示,優化效率時使用 2015.4.4 Date beginDate = null; if (log.isDebugEnabled()) { beginDate = new java.util.Date(); } taskmap.put("URGENT", CacheUtils.getStaticValue(task.getString("URGENT"), "MAPP_EMERGENT_TYPE", pd)); // 增長時間差顯示,優化效率時使用 author OuyangDa 2015.4.4 if (log.isDebugEnabled()) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); Date endDate = new Date(); String beginTime = sdf.format(beginDate); String endTime = sdf.format(endDate); log.debug("請求和返回時間分別是:" + endTime + " , " + beginTime); }
修改前的時間佔用
連續進行了5次測試。第一次和第三次分別佔用了15和16毫秒,其他均佔用0毫秒。證實即便鏈接oracle,也不是每次都佔用毫秒級的時間,應該是oracle內部做了優化,把一樣的sql放到緩存池了,提升了命中率。緩存
DEBUG(MappTaskBean) 請求和返回時間分別是:2015-04-07 14:46:12 039 , 2015-04-07 14:46:12 024服務器
DEBUG(MappTaskBean) 請求和返回時間分別是:2015-04-07 14:46:35 539 , 2015-04-07 14:46:35 539oracle
DEBUG(MappTaskBean) 請求和返回時間分別是:2015-04-07 14:46:59 149 , 2015-04-07 14:46:59 133app
DEBUG(MappTaskBean) 請求和返回時間分別是:2015-04-07 14:47:47 117 , 2015-04-07 14:47:47 117
DEBUG(MappTaskBean) 請求和返回時間分別是:2015-04-07 14:48:11 117 , 2015-04-07 14:48:11 117
修改後的時間佔用
第一次訪問,使用時間均爲16毫秒。重啓了weblogic,再次試驗,第一次訪問仍是爲16毫秒。
DEBUG(MappTaskBean) 請求和返回時間分別是:2015-04-07 14:34:45 961 , 2015-04-07 14:34:45 945
第二次之後的訪問,使用時間均爲0毫秒。說明此時的佔用時間已是微妙級如下。
DEBUG(MappTaskBean) 請求和返回時間分別是:2015-04-07 14:28:36 524 , 2015-04-07 14:28:36 524
DEBUG(MappTaskBean) 請求和返回時間分別是:2015-04-07 14:36:26 695 , 2015-04-07 14:36:26 695
實驗結論
結論一
結論二
ouyida3的segmentfault的blog 2015.4.7