说我做一些解析来生成数据集。作业可能非常慢,加载显示数据集的网页也是如此。
有没有办法告诉服务器解析说每分钟,缓存这个并依靠缓存来显示结果。
我看过core.cache及其docs,但我无法想出一个简单的方法来做到这一点:
(require '[clojure.core.cache :as cache])
(def Dataset
(atom
(-> (parse-fn "http://nytimes.com")
(cache/ttl-cache-factory :ttl 20000)))
如何刷新缓存我可以依赖它吗?
(build-html-table @Dataset)
谢谢!
答案 0 :(得分:2)
您可以启动一个处理数据更新的额外线程(有关定期运行函数的方法,请参阅this question),例如:
(defonce data (atom nil))
(defonce updater
(future
(while true
(reset! data (parse-fn "http://nytimes.com"))
(Thread/sleep 60000))))
访问数据:
@data
取消更新程序:
(future-cancel updater)
确保在parse-fn
中处理异常。此外,您可能希望等待初始数据可用,这可以使用从promise
内获取deliver
的{{1}}来实现。
updater
将无法真正适用于您的情况。此外,当缓存功能结果core.memoize
已经完成了大部分工作时:
core.cache