2017-04-26 68 views
2

我有一個應用程序在瀏覽器發出的每個頁面請求上反覆觸發相同的查詢。所以我想緩存從第一次請求觸發的查詢結果,這會導致數組列表,因此對於來自瀏覽器的每個請求,它都不應該一次又一次地觸發相同的查詢。如何緩存數組列表

請問您可以分享您的想法或意見嗎?

編輯:

框架:我使用的數據庫查詢iBatis的框架,支柱用displaytag的UI

這裏是代碼的片段:

if (req.getParameter("d-2464500-p") == null) { 
    UserService userService = UserServiceFactory.getUserService(); 
    long startTime1 = System.nanoTime(); 
    log.info("start time is :" + startTime1); 
    userList = userService.getUserList(); 
} else { 
    // I want to use the same queried userList for the other pages 
    // so that i should not go and fire the query 
} 
+0

你使用任何特定的框架?這將影響您可以使用的解決方案。你在緩存數據庫查詢還是調用其他服務?一些更多的細節和代碼示例會很有幫助。 –

+0

@MattWatson我正在使用ibatis框架進行數據庫查詢,並使用帶有用於UI的displaytag的struts。我爲第一頁查詢一次,並希望保留該數組緩存或類似的任何東西,以便我不再查詢其他頁面上的相同數組列表。 –

+0

您應該將這些信息與您的代碼一起添加到問題中。這將使知道這些框架的人更有可能回答你的問題。 –

回答

1

爲什麼不延遲加載?類似這樣的:

private List<?> userList = null; 

private List<?> getUserList() { 
    if(this.userList == null) { 
     UserService userService = UserServiceFactory.getUserService(); 
     long startTime1 = System.nanoTime(); 
     log.info("start time is :" + startTime1); 
     userList = userService.getUserList(); 
    } 
    return userList; 
} 

並使用getUserList()方法獲取您的用戶。

+1

這將工作,如果列表doesn'不會改變。如果我必須添加任何內容或將其移除,除非我們不重新啓動服務器,否則不會反映在用戶界面上。 我有編輯,刪除和添加新用戶的選項,所以這將不起作用 –

+1

在這種情況下,我建議你看看第三方緩存框架。 Ehcache很棒。 [www.ehcache.org](http://www.ehcache.org/) –

+0

是的,那太棒了。 –