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-outputCopyright (C) 2014 Homer Strong
Distributed under the Eclipse Public License, the same as Clojure.