core.cache is a new Clojure contrib library providing the following features:
-
An underlying
CacheProtocol
used as the base abstraction for implementing new synchronous caches -
A
defcache
macro for hooking yourCacheProtocol
implementations into the Clojure associative data capabilities. -
Immutable implementations of some basic caching strategies
- First-in-first-out (FIFOCache)
- Least-recently-used (LRUCache)
- Least-used (LUCache)
- Time-to-live (TTLCache)
- Naive cache (BasicCache)
-
Implementation of an efficient buffer replacement policy based on the low inter-reference recency set algorithm (LIRSCache) described in the LIRS paper
-
Factory functions for each existing cache type
core.cache is based on a library named Clache, found at http://github.com/fogus/clache that is planned for deprecation.
You can use core.cache in your Leiningen and Cake projects with the following :dependencies
directive in your project.clj
file:
[org.clojure/core.cache "0.5.0"]
For Maven-driven projects, use the following slice of XML in your pom.xml
's <dependencies>
section:
<dependency>
<groupId>org.clojure</groupId>
<artifactId>core.cache</artifactId>
<version>0.5.0</version>
</dependency>
Enjoy!
The v0.5.0 version of core.cache is based almost wholly on the final version of Clache, with the following changes:
-
An addition of an
evict
function on theCacheProtocol
used to explicitly remove a value from a cache based on a key. All of the existing cache types implement this function except forLIRSCache
. -
The addition of cache factory functions for all of the existing cache types
-
The associative structure behaviors are defined solely in terms of the underlying
CacheProtocol
-
The
SoftCache
implementation was buggy and removed for now
The following capabilities are under design, development, or consideration for future versions of core.cache:
- Asynchronous caching protocol
LIRSCache evict
- Removal of the
seed
function from theCacheProtocol
- Reimplementation of a cache based on soft references
- test.generative usage
- Deprecation of Clache
- Documentation and examples
More planning is needed around capabilities not listed nor thought of.
core.cache would not exist if not for the inspiration and contributions of the following people:
TODO
Copyright © 2011 Rich Hickey
Licensed under the EPL. (See the file epl.html.)