OSS探訪

Java process内のdataを高速なin-memory cacheへ保持し、size・expiration・refresh policyで再計算やI/Oを減らす

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
17,882
主要言語
Java
ライセンス
Apache-2.0
リポジトリ最終更新
2026/09/30
ページ内ナビ

概要

CaffeineはJava向けのhigh-performance in-memory cache libraryです。Guavaに近いbuilder APIでcacheを構成し、size-based eviction、time-based expiration、refresh、async loading、statisticsなどを組み合わせてapplication process内の再利用dataを管理できます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

sizeとtime policyを組み合わせてentryをevictする

maximum sizeやaccess/writeからの経過時間を条件にentryを自動的にevictし、memory使用量とdata freshnessを制御できます。

出典:[1]

loading・async処理・refreshでcache missと更新を扱う

LoadingCacheやasync loadingを使ってcache miss時の生成処理を組み込み、refreshAfterWriteでstale entryの更新をbackgroundへ寄せられます。

出典:[1]

reference・removal listener・statisticsを用途に合わせて追加する

weak/soft reference、entry removal notification、cache access statisticsなどを選択し、lifecycleと観測性を用途に合わせて構成できます。

出典:[1]

向いている用途

同一JVM内で高コスト処理やI/O結果を再利用したい場合に向く

database/API lookup、metadata、計算結果など、短時間に繰り返し参照されるdataをapplication process内で低latencyに再利用する用途に向きます。

出典:[1]

導入前の確認

distributed cacheではなく各process内のlocal stateとして扱う

Caffeineはin-memory libraryなので、複数instance間でentryを自動共有しません。cluster全体で厳密な一貫性が必要ならexternal cacheやsource-of-truthとの同期設計が必要です。

出典:[1]

eviction・expiration・refresh policyを実workloadで調整する

cache sizeを大きくし過ぎるとheapを圧迫し、小さ過ぎるとmissが増えます。stale data許容時間、refresh cost、hot-key patternをproductionに近いloadで評価します。

出典:[1][2]

3.xはJava 11以上を前提にversion lineを選ぶ

READMEはJava 11以上で3.xを使い、それ以前では2.xを使うよう案内しています。2026年10月3日時点の最新安定版は3.3.0で、runtime Java versionとframework integrationの互換性を確認します。

出典:[1][2][3]

参考にした公式資料

  1. [1]Caffeine v3.3.0 README(2026-10-03)
  2. [2]Caffeine v3.3.0 release(2026-10-03)
  3. [3]Caffeine Apache-2.0 license(2026-10-03)
編集部からの補足

database/API accessや高コスト計算の結果を同一process内で再利用したいJava applicationに適します。高速でもcacheは正本ではないため、失効条件、最大size、stale data許容時間、cache miss時の負荷を実trafficに合わせて設計してください。

3ステップで試す

  1. 1

    Caffeine 3.3.0をMaven cacheへ取得する

    Java 11以上とMavenを使い、Caffeine 3.3.0と公開API dependencyを含むruntime classpathをlocalに生成します。

    mkdir caffeine-demo && cd caffeine-demo && printf '%s\n' '<project xmlns="http://maven.apache.org/POM/4.0.0"><modelVersion>4.0.0</modelVersion><groupId>demo</groupId><artifactId>caffeine-demo</artifactId><version>1.0</version><dependencies><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.3.0</version></dependency></dependencies></project>' > pom.xml && mvn -q dependency:build-classpath -Dmdep.outputFile=classpath.txt
  2. 2

    最小cache操作のJShell scriptを作成する

    maximumSizeを持つprocess-local cacheへ値をput/getするだけのscriptを用意します。

    printf '%s\n' 'import com.github.benmanes.caffeine.cache.*;' 'var cache = Caffeine.newBuilder().maximumSize(10).build();' 'cache.put("key", "value");' 'System.out.println(cache.getIfPresent("key"));' '/exit' > caffeine.jsh
  3. 3

    JShellでcache動作を確認する

    caffeine-demo directory内で実行し、valueと表示されればcacheの生成・保存・取得をlocal JVM内で確認できます。

    jshell --class-path "$(cat classpath.txt)" caffeine.jsh
公式READMEで確認

成長

成長の推移 · 直近30日

17,882 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
53
Open PR
0

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

カテゴリ

GitHubデータ

GitHubのデータGitHubの詳細データを見る
Stars
17,882
Forks
1,721
Watchers
359
Open Issues
1
Contributors
69
所有者種別
User
主要言語
Java
ライセンス
Apache-2.0
リポジトリ最終更新
2026/09/30

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?