Cache is configured by a map. Put settings that you use often into a variable to reuse them.
With require as [memento.core :as m]:
(def long-cache {:ttl 30})
(def short-cache {:ttl 1})
(m/memo long-cache my-function)
The keys that are non-namespaced are automatically added the memento.core namespace.
So these specs are equivalent:
{:ttl 30}
{:memento.core/ttl 30}
{::m/ttl 30}
#::m {:ttl 30}
#:memento.core {:ttl 30}
The basic properties of caches are:
memento.core/typeThis property selects the cache implementation. If it's not supplied
then the value of memento.core/*default-type* is used, which is by default :memento.core/guava.
This library has two implementations: :memento.core/guava and memento.core/regional,
and since the latter is automatically selected where appropriate, this property is usually omitted.
memento.core/regionThis sets the region for the cache. Read all about regions here.
This also forces :memento.core/type to :memento.core/regional.
memento.core/seedA map of argument lists to results that is inserted into the cache as it is created.
; preload some sums
(m/memo {:seed {[2 3] 5 [1 4] 5}} +)
memento.core/key-fnA function of 1 argument that is used to transform the argument list into the cache key.
Default is identity.
In documentation, the value before key-fn is applied is called the "argument list" and after
is called "transformed key".
This is used to drop (or add) to the key. e.g.:
(defn get-person-by-id [db-conn person-id] ...)
; drop the db-conn from the key
(m/memo {:key-fn rest} #'get-person-by-id)
Obviously we don't want the cache to hold reference to db-conn or vary the cache by it.
There's other neat things you can do with this:
(defn get-people-map [& id-list] ...)
; only distinct IDs matter and order doesn't matter
(m/memo {:key-fn set} #'get-people-map)
When using a regional cache, first the key-fn of cache spec is applied, then
the key-fn of the region; see regions.
**When talking about original function arguments we will use term args or arguments
memento.core/ret-fnA function of 1 argument that is used to transform the result of a function call before it is cached.
Default is identity.
In documentation, the value before ret-fn is applied is called the "result" and after
is called "transformed result".
It can be used to prevent caching with the use of memento.core/non-cached function.
(def call-service
(m/memo
{:ttl 10
; don't cache error responses
:ret-fn #(if (<= 400 (:status %)) (m/non-cached %) %)}
(fn [....] ... resp)))
Other properties are passed to the Cache implementation and are implementation specific.
For the Guava cache you can find them here.
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |