A caching library for Clojure implementing various cache strategies
Clone or download
Pull request Compare This branch is 1 commit ahead, 109 commits behind clojure:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


clojure.core.cache - A Clojure Caching Library

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 your CacheProtocol 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:




Changes from Clache

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 the CacheProtocol used to explicitly remove a value from a cache based on a key. All of the existing cache types implement this function except for LIRSCache.

  • 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 the CacheProtocol
  • 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:




Copyright © 2011 Rich Hickey

Licensed under the EPL. (See the file epl.html.)