我正在做一个简单的项目,它显示了一些我想每天看到的数据。这是我的树莓派。我正在使用一个对请求有限制的免费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
的参数。