2

私は Web ベースの医療アプリケーションに取り組んでおり、小さなメモリ内オブジェクト キャッシュを作成する必要があります。これが私のユースケースです。

特定のもの (血液、腎臓など) を必要とする人々から提出されたリクエストのリストを表示する必要がありますが、特定の日の血液やその他のリクエストは限られたものになるため、巨大なリストにはなりません。キャッシング API を使用したくないことを考慮してください。これはやり過ぎになるためです。アイデアは、マップを作成し、それを ApplicationContext に配置することです。

新しいリクエストが誰かによって発行された瞬間に、アプリケーション コンテキストでそのマップを更新し、リクエストの有効期限が切れた瞬間にそれらをマップから削除します。さらに、以下の点も検討する必要があります。

  1. 最大要素制限を設定する必要があります。
  2. 最大制限に達した場合は、最初に追加されたエントリを削除する必要があります。
  3. 同期の問題に注意してください。

これを実装する際に、どのデータ構造を使用する必要があり、何を処理する必要があるかを提案してください。

4

4 に答える 4

2

グーグルのグアバキャッシュはどうですか?実装は非常に簡単で、非常に使いやすいです。

グアバキャッシュ

于 2012-08-11T07:35:52.667 に答える
1

OmniFacesプロジェクトの場合も同様の要件があり、concurrentlinkedhashmapを使用して、キャッシュされたアイテムの有効期間を追跡し、そのアイテムが要求されるたびにキャッシュから遅延してパージする小さなラッパーを使用しました。

参照:JavaでLRUキャッシュをどのように実装しますか?

于 2012-08-11T07:40:15.417 に答える
1

サードパーティのライブラリを追加したくない場合は、LinkedHashMapの上に自分で実装できます。LinkedHashMapはキャッシュとしての使用に最適であり、ポリシーを構成できます(最も最近使用されていないエントリまたは最も古いエントリを削除します)。それに応じて構成すると、必要に応じて最も古いエントリが削除されます。
また、スレッドセーフのために、Collections#synchronizedMap()をいつでも使用できます。

これが小さな例です

于 2012-08-11T07:40:19.763 に答える
0
于 2012-08-11T07:56:25.603 に答える