我正在开发一个简单的项目,它显示一些我每天想看到的数据。这将继续到我的树莓派上。我使用的免费 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)))
Run Code Online (Sandbox Code Playgroud)
根据此链接,这就是所需要的。除了:
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
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |