Clojure TTL cache with background refresh