Caffeine: Javaキャッシュの期限、退避、ロードを設計する
Java 用の高性能キャッシュ ライブラリ。 Cache Caffeine は、Google Guava からインスピレーションを得た API を使用してメモリ内キャッシュを提供します。
ひと目でわかる
- これは何?
- CaffeineのビルダーAPI、TinyLFU系の退避、Java版ごとの依存関係、周辺統合をREADMEから検討する。
- 誰に向いている?
- このプロジェクトは、READMEが示すA high performance caching library for Java. Cache Caffeine provides an in-memory cache using a Google Guava inspired API.という対象と、記載された環境・権限・入力条件が一致するチームに向きます。
- 商用利用できる?
- できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。直近 1 日以内に新しいコミットがあります。
- 何の言語で書かれている?
- 主に Java です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
Caffeineで見る対象と設計上の焦点
CaffeineはJava用のインメモリキャッシュライブラリです。READMEはこれを高性能でほぼ最適なキャッシュライブラリと説明しています。APIはGoogle Guavaのキャッシュに着想を得ており、GuavaのキャッシュとConcurrentLinkedHashMapの設計経験を活かしています。READMEの例では、Caffeine.newBuilder()でLoadingCacheを構築し、最大10,000エントリ、書き込みから5分で期限切れ、1分でリフレッシュ、キャッシュミス時に高コストなグラフを作成する関数を設定しています。この例は、ビルダーパターンがポリシーとロード関数を1つの式で組み合わせる方法を示しています。READMEはまた、ユーザーズガイドと最新リリースのAPIドキュメントへのリンクも提供しています。
Caffeineの中心は、Google Guavaに着想を得たインメモリキャッシュAPIです。READMEのLoadingCache例はmaximumSize、expireAfterWrite、refreshAfterWrite、ロード関数を1つのビルダー式にまとめています。キャッシュを置くことより、期限と再計算の境界をコードで明示できる点が設計上の焦点です。 caffeineでは第1節の確認対象を独立させ、入力、結果、失敗時の記録を同じ単位で残します。READMEに明記された値と、手元で観測した値を分けて記録することで、caffeine固有の判断材料になります。
Caffeineで見る導入条件と依存関係
Caffeineは、最大サイズを超えた場合にサイズベースの退避を提供し、頻度と再帰性に基づいて何を退避するかを決定します。時間ベースの期限切れは最終アクセスまたは最終書き込みから測定され、最初の期限切れリクエストが発生したときにエントリを非同期にリフレッシュできます。READMEには、キーを弱参照でラップし、値を弱参照またはソフト参照でラップする機能もリストされています。これらのポリシーはオプションであり、キャッシュ構築時に組み合わせることができます。READMEは退避ポリシーをほぼ最適と説明し、詳細については専用の効率ページを参照しています。各機能はwikiページにリンクされており、README自体を超えた使用詳細を文書がカバーしていることを示しています。
サイズ退避は最大件数を超えたときに働き、頻度と再帰性を基に対象を選びます。期限は最終アクセスまたは最終書き込みから測定でき、古いエントリへの最初の要求で非同期リフレッシュを始められます。弱参照やソフト参照を使う場合は、JVMのメモリ回収とキャッシュヒット率を同じ条件で観測する必要があります。 caffeineでは第2節の確認対象を独立させ、入力、結果、失敗時の記録を同じ単位で残します。READMEに明記された値と、手元で観測した値を分けて記録することで、caffeine固有の判断材料になります。
Caffeineで見る処理経路と設定項目
このライブラリは、エントリをキャッシュに自動ロードすることをサポートしており、オプションで非同期にも対応します。エントリが退避または削除されたときに通知を送信し、書き込みを外部リソースに伝播し、キャッシュアクセス統計を蓄積できます。READMEはこれらをオプション機能として提示しており、キャッシュ構築時に柔軟に組み合わせることができます。各機能は専用のwikiページにリンクされています。READMEの例と機能リストはどちらも、ビルダーがこれらの動作を構築時に設定し、実行時の変更は説明されていないことを示しています。
READMEはSpring Cache、Quarkus、Kafka、Apache Solrなどを利用例として列挙しますが、統合ごとの設定や保証を説明していません。Java 11以上は3.x、それより古いJavaは2.xという分岐と、Maven Centralの3.2.4座標をまずビルドに反映し、採用する統合の公式文書を別に確認します。 caffeineでは第3節の確認対象を独立させ、入力、結果、失敗時の記録を同じ単位で残します。READMEに明記された値と、手元で観測した値を分けて記録することで、caffeine固有の判断材料になります。
Caffeineで見る出力と運用記録
READMEには、JSR-107 JCacheサポート、Guavaアダプタ、シミュレーションツールの3つの拡張機能がリストされています。また、Spring Cache、Play Framework、Micronaut、Quarkus、Apache Camel、Bootique、JHipsterなどのコミュニティ統合や、Scala用のScaffeineやKotlin用のAedileなどの言語ラッパーも挙げられています。別のリストには、Cassandra、Kafka、HBase、Apache Solr、Infinispan、Redisson、Neo4jなど、Caffeineを使用するインフラストラクチャプロジェクトが含まれています。READMEはこれらをコミュニティ提供の統合として提示しており、公式にサポートされたモジュールではありません。各プロジェクトがCaffeineをどのように使用しているかはREADMEでは説明されていません。
Caffeineの中心は、Google Guavaに着想を得たインメモリキャッシュAPIです。READMEのLoadingCache例はmaximumSize、expireAfterWrite、refreshAfterWrite、ロード関数を1つのビルダー式にまとめています。キャッシュを置くことより、期限と再計算の境界をコードで明示できる点が設計上の焦点です。 caffeineでは第4節の確認対象を独立させ、入力、結果、失敗時の記録を同じ単位で残します。READMEに明記された値と、手元で観測した値を分けて記録することで、caffeine固有の判断材料になります。
Caffeineで見る対応範囲の読み方
READMEには、Caffeineのアーキテクチャ設計を説明する2つのHighScalability記事へのリンクがあり、「Design of a Modern Cache」パート1とパート2と題され、付随するスライドデッキもリンクされています。また、Caffeineが使用するTinyLFU退避ポリシーを評価する、Ben Manesが共著した3つの研究論文も紹介されています。これらの論文はACMの会議やジャーナルに掲載されています。READMEはこれらをCaffeineの新しい退避ポリシーを評価する研究として位置づけていますが、論文の具体的な発見をREADME内で要約してはいません。
サイズ退避は最大件数を超えたときに働き、頻度と再帰性を基に対象を選びます。期限は最終アクセスまたは最終書き込みから測定でき、古いエントリへの最初の要求で非同期リフレッシュを始められます。弱参照やソフト参照を使う場合は、JVMのメモリ回収とキャッシュヒット率を同じ条件で観測する必要があります。 caffeineでは第5節の確認対象を独立させ、入力、結果、失敗時の記録を同じ単位で残します。READMEに明記された値と、手元で観測した値を分けて記録することで、caffeine固有の判断材料になります。
Caffeineで見る制約を切り分ける確認
READMEは、Maven Centralからダウンロードするか、Gradleで依存関係を宣言するよう説明しています。例ではimplementation("com.github.ben-manes.caffeine:caffeine:3.2.4")と、同じバージョンのオプションのguavaおよびjcacheモジュールが示されています。Java 11以上の場合は3.xを使用し、それ以外の場合は2.xを使用すると書かれています。また、リリースノートと開発バージョンのSonatypeスナップショットリポジトリへのリンクもあります。READMEにはMaven座標の例や他のビルドツールの説明はなく、それらがサポートされているかどうかはソースでは確認できず、検証が必要です。
READMEはSpring Cache、Quarkus、Kafka、Apache Solrなどを利用例として列挙しますが、統合ごとの設定や保証を説明していません。Java 11以上は3.x、それより古いJavaは2.xという分岐と、Maven Centralの3.2.4座標をまずビルドに反映し、採用する統合の公式文書を別に確認します。 caffeineでは第6節の確認対象を独立させ、入力、結果、失敗時の記録を同じ単位で残します。READMEに明記された値と、手元で観測した値を分けて記録することで、caffeine固有の判断材料になります。
Caffeineで見るライセンスと採用判断
CaffeineはApache License 2.0の下で配布されています。このライセンスは、複製、派生作品の作成、公開表示および公開演奏、サブライセンス、配布のための永続的で世界的、非独占的、無償、ロイヤリティフリー、取消不能な著作権ライセンスを付与します。また、同様の特許ライセンスも付与されますが、特許訴訟を提起した場合は終了する可能性があります。ライセンス本文には、セキュリティ保証、サポート義務、保証条件については記載されていません。利用者はライブラリを自由に使用および変更できますが、ライセンスはメンテナにサポート義務を課すものではありません。
Caffeineの中心は、Google Guavaに着想を得たインメモリキャッシュAPIです。READMEのLoadingCache例はmaximumSize、expireAfterWrite、refreshAfterWrite、ロード関数を1つのビルダー式にまとめています。キャッシュを置くことより、期限と再計算の境界をコードで明示できる点が設計上の焦点です。 caffeineでは第7節の確認対象を独立させ、入力、結果、失敗時の記録を同じ単位で残します。READMEに明記された値と、手元で観測した値を分けて記録することで、caffeine固有の判断材料になります。
編集部の結論
このプロジェクトは、READMEが示すA high performance caching library for Java. Cache Caffeine provides an in-memory cache using a Google Guava inspired API.という対象と、記載された環境・権限・入力条件が一致するチームに向きます。採用前にはREADMEはSpring Cache、Quarkus、Kafka、Apache Solrなどを利用例として列挙しますが、統合ごとの設定や保証を説明していません。Java 11以上は3.x、それより古いJavaは2.xという分岐と、Maven Centralの3.2.4座標をまずビルドに反映し、採用する統合の公式文書を別に確認します。を実際の小さな構成で確認し、READMEにない性能や互換性を前提にしないでください。
コミュニティノート