缓存似乎在 clojure 中不起作用,使用它的方法是什么?



我正在做一个简单的项目,它显示了一些我想每天看到的数据。这是我的树莓派。我正在使用一个对请求有限制的免费api,所以我想我应该缓存请求,这样我就不会垃圾api了。以下是我目前得到的:

(def KEY "Cache-Key")
(def CF (cache/ttl-cache-factory {} :ttl 43200)) ; 12 hour cache
(defn get-data-from-api
[url]
(let [response {:cache true :value 1}]
(println "---> getting from http")
response))
(defn get-data
[url]
(cache/lookup-or-miss CF KEY (get-data-from-api url)))

根据这个链接,这是所有需要的。除了:

  • 我的get-data函数总是从api中获取它(我添加到调试中的println总是打印出来)。缓存正在添加,只是似乎没有获取和返回
  • get-data不返回任何东西。因此,当我执行curl http://localhost:3001/display时,我得到一个空响应。

我是否正确使用缓存?

lookup-or-miss的最后一个值必须是一个将在缓存丢失时调用的函数。在您的代码中,您首先调用该函数,然后将其结果传递给查找函数,因此您的函数将被无条件调用(毕竟,lookup-or-miss本身是一个常规函数而不是宏-它不能规定何时对其参数进行求值)。

即使在您链接到的文章中,它们也直接传递http-get,而url充当键,默认情况下,lookup-or-miss将将其用作http-get的参数。

相关内容

  • 没有找到相关文章

最新更新