-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Home
Caffeine is a high performance Java 8 based caching library.
A Cache is similar to ConcurrentMap, but not quite the same. The most fundamental difference is that a ConcurrentMap persists all elements that are added to it until they are explicitly removed. A Cache
on the other hand is generally configured to evict entries automatically, in order to constrain its memory footprint. In some cases a LoadingCache
or AsyncLoadingCache
can be useful even if it doesn't evict entries, due to its automatic cache loading.
Caffeine provide flexible construction to create a cache with a combination of the following features:
- automatic loading of entries into the cache, optionally asynchronously
- least-recently-used eviction when a maximum size is exceeded
- time-based expiration of entries, measured since last access or last write
- 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
To improve integration, JSR-107 JCache and Guava adapters are provided in extension modules. JSR-107 standardizes a Java 6 based API to minimize vendor specific code at the cost of features and performance. Guava's Cache is the predecessor library and the adapters provide a simple migration strategy.
The tracing and simulator extensions allow for offline investigation of cache performance and tuning. For developers needing to write custom caches the variety of policies may help determine which is the best fit for a particular use-case.
Contributions are welcome. Please read the design document, developer setup guide, and roadmap.