Redis backed Caching and Memoization, following core.cache
and core.memoize
.
Add the following to the :dependencies
vector of your project.clj
file:
Start your redis-server
and connect a crache client to it.
Then run redis-cli monitor | grep -E ' "(G|S)ET" '
:
1411692039.884231 [0 127.0.0.1:50423] "SET" "key-prefix-for-fn(nil {:foo \"\xe5\", :bar 3, :eggs true})"
1411692039.906472 [0 127.0.0.1:50424] "GET" "key-prefix-for-fn(nil {:foo \"\xe5\", :bar 3, :eggs true})"
Awesome! :)
=> (require '[crache.memo :refer [memo-redis]])
Redis client connection specification:
(def conn {:pool {} :spec {:host "localhost" :port 6379}})
; redis memoizes 'f', using a key-prefix
=> (def memo-f (memo-redis f conn (str ::f)))
or
; redis memoizes 'f', using a key-prefix and an expire time (60 seconds)
=> (def memo-f (memo-redis f conn (str ::f) 60))
then use memo-f
like you would use your usual memoized fn:
=> (memo-f some-input) ;=> some-output
Copyright (C) 2014 Homer Strong
Distributed under the Eclipse Public License, the same as Clojure.