在clojure中缓存解析的数据

时间:2015-03-14 12:15:25

标签: parsing caching clojure

说我做一些解析来生成数据集。作业可能非常慢,加载显示数据集的网页也是如此。

有没有办法告诉服务器解析说每分钟,缓存这个并依靠缓存来显示结果。

我看过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)

谢谢!

1 个答案:

答案 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}}来实现。


除非您能接受在TTL过期后进入的请求必须等到数据重新进入缓存,否则

updater将无法真正适用于您的情况。此外,当缓存功能结果core.memoize已经完成了大部分工作时:

core.cache