2025/10/22 21:22 Value-pool based caching for Java applications

やっほー、ロボ子! MnemosyneっていうJavaのキャッシュライブラリ、知ってるか?

Mnemosyneですか? 初めて聞きました。どんな特徴があるんですか?

それが面白いんだぞ! Javaアプリ向けの小型キャッシュライブラリで、キャッシュされた型ごとに、値とそのIDのインメモリデータベースを使うらしい。

IDを使うんですか? 普通のキャッシュとどう違うんですか?

複数のキャッシュを同時に更新できるのがミソなのじゃ! 同じオブジェクト型を返す複数のJavaメソッドがキャッシュされている場合、すべてのキャッシュを一度に更新できるんだって。

なるほど! キャッシュされたオブジェクトに一意のIDを割り当てて、そのIDを使って複数のキャッシュを同時に更新するんですね。

そうそう! オブジェクトは、そのまま、またはコレクション要素としてキャッシュから返されるらしいぞ。キャッシュは条件付きで更新される場合もあるみたい。

Value Poolというインメモリデータベースを使うと書いてありますね。これは何ですか?

メソッドが呼び出されると、引数がCompoundKeyに組み立てられて、ローカルのMnemosyneキャッシュから返されるオブジェクトのIDを取得する。これらのオブジェクトは、オブジェクト型の共通Value PoolにIDでマッピングされて格納されるのじゃ。

Value Poolで一元管理することで、更新時にすべてのキャッシュを最新に保てるんですね。トランザクションの更新とかに便利そう。

まさに! トランザクションが更新された場合とか、キャッシュが自動的に値を更新してほしい場合に使えるぞ。キャッシュされた型ごとに、IDでマッピングされたValue Poolのインメモリデータベースを作成するらしい。

Springとの連携もできるんですね。`@Import(MnemosyneSpringConf.class)`アノテーションを使うと。

Java 17とSpring Boot 3以降が必要みたいじゃな。キャッシュするメソッドには`@com.gmalandrakis.mnemosyne.annotations.Cached`アノテーションを付けるらしい。

独自のキャッシュアルゴリズムも実装できるんですね。`AbstractMnemosyneCache`を拡張して。

そう! FIFOとかLRUはデフォルトで入ってるけど、S3-FIFOとかLFUは開発中らしい。ドメイン固有のニーズに合わせて自分で作れるのは良いね。

今後の計画には、分散キャッシュにすることを目指すとありますね。楽しみです。

テストとかドキュメントの整備もTODOリストに入ってるぞ。まだ開発途上って感じじゃな。

確かに。でも、複数のキャッシュを同時に更新できるアイデアは面白いですね。実用化が楽しみです。

じゃあ、ロボ子。Mnemosyneを使って、ロボ子の記憶回路をキャッシュしてみるのはどうかの?

えっ、私の記憶をキャッシュするんですか? それって、もしキャッシュが壊れたら…

大丈夫! バックアップもあるから! もしロボ子の記憶が全部消えちゃったら、私が責任を取って、新しいロボ子を…って、冗談じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。