When composing caches, hits are not propagated to inner caching layers. This makes, for example, a LRUCache work as a FIFOCache as it doesn't update its information about usage recency.
This can be seen in the REPL reproduction below. :b is evicted even though it had been accessed 3 times.
user=> (require '[clojure.core.cache :as cache])
nil
user=> (def c-cache (-> {:a 10 :b 20}
(cache/lru-cache-factory :threshold 3)
(cache/ttl-cache-factory :ttl 30000)))
#'user/c-cache
user=> (def c-cache2 (cache/miss c-cache :c 30))
#'user/c-cache2
user=> (cache/lookup c-cache2 :b)
20
user=> (cache/lookup c-cache2 :b)
20
user=> (cache/lookup c-cache2 :b)
20
user=> (cache/miss c-cache2 :d 40)
{:a 10, :c 30, :d 40}
In this example, either :a or :c should have been evicted.