2017-04-26 18 views
2

ブラウザからのすべてのページ要求に対して同じクエリを何度も繰り返し実行するアプリケーションが1つあります。最初のリクエストからクエリ結果をキャッシュして、arraylistという結果になります。ブラウザからのすべてのリクエストに対して、同じクエリを何度も繰り返す必要はありません。arraylistをキャッシュする方法

あなたの考えや意見をお寄せください。

編集:

フレームワーク:私はここではUI

ためdisplaytagでデータベースクエリおよび支柱のためのiBATISフレームワークを使用しているコードの抜粋です:

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を使ってストラットを張っています。私は一度最初のページを照会していて、そのarraylistをキャッシュしたり、他のページの同じarraylistに対して再度照会しないように類似のものを保ちたい。 –

+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

これはリストが '変更される。何かを追加したり削除したりする必要がある場合は、サーバーを再起動しない限り、UIに反映されません。 これは動作しないように、編集、削除、新規ユーザーの追加のオプションがあります。 –

+1

その場合、サードパーティのキャッシングフレームワークをご覧ください。エカチェは素晴らしいです。 [www.ehcache.org](http://www.ehcache.org/) –

+0

それはすばらしいことでしょう。 –

関連する問題