caffeine
Caffeine is a high performance, near optimal caching library. For more details, see our user's guide and browse the API docs for the latest release.
Cache
Caffeine provides an in-memory cache using a Google Guava inspired API. The improvements draw on our experience designing Guava's cache and ConcurrentLinkedHashMap.
LoadingCache<Key, Graph> graphs = Caffeine.newBuilder()
.maximumSize(10_000)
.expireAfterWrite(Duration.ofMinutes(5))
.refreshAfterWrite(Duration.ofMinutes(1))
.build(key -> createExpensiveGraph(key));
Features at a Glance
Caffeine provides flexible construction to create a cache with a combination of the following optional features:
- automatic loading of entries into the cache, optionally asynchronously
- size-based eviction when a maximum is exceeded based on frequency and recency
- time-based expiration of entries, measured since last access or last write
- asynchronously refresh when the first stale request for an entry occurs
- keys automatically wrapped in weak references
- values automatically wrapped in weak or soft references
- notification of evicted (or otherwise removed) entries
- writes propagated to an external resource
- accumulation of cache access statistics
In addition, Caffeine offers the following extensions:
Use Caffeine in a community provided integration:
- Play Framework: High velocity web framework
- Micronaut: A modern, full-stack framework
- Spring Cache: As of Spring 4.3 & Boot 1.4
- Coroutines: Kotlin Coroutines extension
- Bootique: A fast, simple Java platform
- Quarkus: Supersonic Subatomic Java
- Camel: Routing and mediation engine
- Scaffeine: Scala wrapper for Caffeine
- ScalaCache: Simple caching in Scala
- JHipster: Generate, develop, deploy
- Aedile: Kotlin wrapper for Caffeine
Powering infrastructure near you:
- Dropwizard: Ops-friendly, high-performance, RESTful APIs
- Cassandra: Manage massive amounts of data, fast
- Coherence: Mission critical in-memory data grid
- Accumulo: A sorted, distributed key/value store
- Kafka: A distributed event streaming platform
- HBase: A distributed, scalable, big data store
- Apache Solr: Blazingly fast enterprise search
- Infinispan: Distributed in-memory data grid
- Redisson: Ultra-fast in-memory data grid
- OpenWhisk: Serverless cloud platform
- Corfu: A cluster consistency platform
- Grails: Groovy-based web framework
- Finagle: Extensible RPC system
- Neo4j: Graphs for Everyone
- Druid: Real-time analytics
In the News
- An in-depth description of Caffeine's architecture.
- Caffeine is presented as part of research papers evaluating its novel eviction policy.
- TinyLFU: A Highly Efficient Cache Admission Policy by Gil Einziger, Roy Friedman, Ben Manes
- Adaptive Software Cache Management by Gil Einziger, Ohad Eytan, Roy Friedman, Ben Manes
- Lightweight Robust Size Aware Cache Management by Gil Einziger, Ohad Eytan, Roy Friedman, Ben Manes
Download
Download from Maven Central or depend via Gradle:
implementation("com.github.ben-manes.caffeine:caffeine:3.1.8")
// Optional extensions
implementation("com.github.ben-manes.caffeine:guava:3.1.8")
implementation("com.github.ben-manes.caffeine:jcache:3.1.8")
For Java 11 or above, use 3.x
otherwise use 2.x
.
See the release notes for details of the changes.
Snapshots of the development version are available in Sonatype's snapshots repository.