- PR -

データキャッシュで相談です

1
投稿者投稿内容
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2007-01-26 16:17
こんにちは、お世話になっております。

いま、次のような要件に取り組んでいます。


ウェブサービスにて(サーバ:Tomcat4.1.30、J2EE1.3.1、JDK1.4)
メニューから呼び出されるいくつかのアプリケーションがあります。
各アプリケーションはそれぞれの設定ファイルの情報を読み込み
初期化処理を行います。

しかし、アプリケーションが呼び出されるたびに
毎回設定ファイルを読み込むのはストレスです。
そこでキャッシュすることを考えたのですが
全設定ファイルを保持するのもどうかと思ったのです。
アプリケーションの中にはほとんど起動しないものから
頻繁に起動するものもありますので
頻繁に起動するものはキャッシュし
そうでないものはキャッシュしないようにしました。
(キャッシュする/しないフラグ)

ここで欲が出ました。

キャッシュするだけしておいて
一定時間経ったら自動的にキャッシュから削除されるような
仕組みってないかなぁと。

調べて見ると.NETでは
http://www.microsoft.com/japan/msdn/columns/asp/asp04262001.aspx
Cacheオブジェクトでこの仕組みを実現していました。

Javaでも似たようなものをご存知ないでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-01-26 16:53
陳腐化したオブジェクトを削除する仕組みがあるかどうかはわかりませんが、Jakarta Commons Cache とかいいかもしれません。
http://jakarta.apache.org/commons/sandbox/cache/
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-01-26 17:07
http://www.java-source.net/open-source/cache-solutions
お好きなものをどうぞ。
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2007-01-26 17:38
自前で作るならLinkedHashMapのremoveEldestEntryをオーバーライドすれば簡単にできますよ。
ただし、LinkedHashMapは同期化されていないので、Collections#synchronizedMapでラップしたりする必要があると思いますが。
# ConcurrentLinkedHashMapは残念ながら存在しない…。

追記
引用:

一定時間経ったら自動的にキャッシュから削除されるような


この場合、新しいオブジェクトをキャッシュに追加した際に古いオブジェクトを削除する機会を与えるだけなので、『一定時間経ったら』とはちょっと違いましたね。

[ メッセージ編集済み 編集者: sawat 編集日時 2007-01-26 17:47 ]
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2007-01-26 18:01
みなさんお返事ありがとうございます。

> http://jakarta.apache.org/commons/sandbox/cache/
このページのリンクがいくつも潰れているのが残念

> Open Source Cache Solutions in Java
結構いろいろあるんですね

> ConcurrentLinkedHashMap
こういう考え方もありですね

これらを参考にいろいろ試して見たいと思います。
良い報告ができるといいのですが。
1

スキルアップ/キャリアアップ(JOB@IT)