Parsing 在clojure中缓存解析的数据

Parsing 在clojure中缓存解析的数据,parsing,caching,clojure,Parsing,Caching,Clojure,假设我做了一些分析来生成一个数据集。这项工作可能很慢,加载显示数据集的网页也很慢 有没有一种方法可以告诉服务器解析(比如说每分钟一次),缓存这个,并依靠缓存来显示结果 我已经看了一下,但我想不出一个简单的方法来做到这一点: (require '[clojure.core.cache :as cache]) (def Dataset (atom (-> (parse-fn "http://nytimes.com") (cache/ttl-

假设我做了一些分析来生成一个数据集。这项工作可能很慢,加载显示数据集的网页也很慢

有没有一种方法可以告诉服务器解析(比如说每分钟一次),缓存这个,并依靠缓存来显示结果

我已经看了一下,但我想不出一个简单的方法来做到这一点:

(require '[clojure.core.cache :as cache])

(def Dataset 
  (atom 
    (-> (parse-fn "http://nytimes.com")
        (cache/ttl-cache-factory :ttl 20000))) 
缓存如何刷新我可以依赖它吗

(build-html-table @Dataset)

谢谢大家!

您可以启动一个额外的线程来处理数据更新(有关定期运行函数的方法,请参阅),例如:

要访问数据,请执行以下操作:

@data
要取消更新程序,请执行以下操作:

(future-cancel updater)
确保在
parse fn
中处理异常。此外,您可能希望等待初始数据可用,这可以通过使用从
更新程序
中获取
deliver
promise
来实现


core.cache
在您的案例中不会真正起作用,除非您可以接受在TTL过期后传入的请求必须等待数据返回到缓存中。此外,当缓存函数结果已经为您完成了大部分工作时:

(require '[clojure.core.memoize :as memo])
(defn fetch-dataset!
  (memo/ttl
    #(parse-fn "http://nytimes.com")
    :ttl/threshold 60000))

(fetch-dataset!) ;; => <your data> (takes a while)
(fetch-dataset!) ;; => <your data> (immediately)
... 60s ...
(fetch-dataset!) ;; => <your data> (takes a while)
(需要“[clojure.core.memoize:作为备忘录])
(defn获取数据集!
(备忘录/ttl)
#(fn)http://nytimes.com")
:ttl/阈值60000)
(获取数据集!);=>(需要一段时间)
(获取数据集!);=>(立即)
... 60年代。。。
(获取数据集!);=>(需要一段时间)
(require '[clojure.core.memoize :as memo])
(defn fetch-dataset!
  (memo/ttl
    #(parse-fn "http://nytimes.com")
    :ttl/threshold 60000))

(fetch-dataset!) ;; => <your data> (takes a while)
(fetch-dataset!) ;; => <your data> (immediately)
... 60s ...
(fetch-dataset!) ;; => <your data> (takes a while)