Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

clojure.core.cache just does not work using their own example

I just added clojure.core.cache 0.6.1 to my project, did a lein deps, followed the very short and clear example here: https://github.com/clojure/core.cache and it just flat out does not work.

Example:

$lein repl
REPL started; server listening on localhost port 20513
user=> (require '[clojure.core.cache :as cache])
nil
user=> (def fifoc (cache/fifo-cache-factory {}))
#'user/fifoc
user=> (cache/has? fifoc :foo)
false
user=> (cache/miss fifoc :foo "bar")
{:foo "bar"}
user=> (cache/has? fifoc :foo)
false

What is going wrong here? Am I completely missing the point? I've tried it with the other cache backends all with the same result. Tried it with different keys, different values, different namespace, different alias - nada. Running the tests gives me this:

$ lein test clojure.core.cache.tests

Testing clojure.core.cache.tests

Ran 13 tests containing 273 assertions.
0 failures, 0 errors.

Which makes this all the more mysterious. I looked at the tests, and while they :import the cache backends and instantiate them the java way (miss (BasicCache. {}) ...), which I also tried, that too fails for me in exactly the same way.

Any help before I just implement one that works?

like image 716
lsh Avatar asked Aug 14 '12 03:08

lsh


1 Answers

cache/miss returns a new cache object that you need to use for further operations.

Ex:

user=> (cache/has? (cache/miss fifoc :foo "bar") :foo)
true

Your example becomes:

user=> (def fifoc (atom (cache/fifo-cache-factory {})))
#'user/fifoc
user=> (swap! fifoc  #(cache/miss % :foo "bar"))
{:foo "bar"}
user=> (cache/has? @fifoc :foo)
true
like image 71
Ankur Avatar answered Sep 23 '22 00:09

Ankur