大家好!我在玩LIRSCache时遇到了我认为是一个错误的问题。
https://github.com/clojure/core.cache/blob/master/src/main/clojure/clojure/core/cache.clj#L371
在大量唯一键缺失的情况下,堆栈S将无限增长并超出你所提供的限制。
(def C (cache/lirs-cache-factory {} :s-history-limit 2 :q-history-limit 1))(defn populate [n] (let [pairs (map (fn [x] [x x]) (range n))] (reduce (fn [cache [k v]] (cache/miss cache k v)) C pairs))) (.toString (populate 10)) "{9 9, 1 1, 0 0}, {0 1, 1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 8, 8 9, 9 10}, {9 10}, 10, 2, 1"
您可以看到S堆栈正在无限增长,如果您用(populate 1000),则它将扩展到1000个元素大。
我不确定期望的结果是什么,但每次我们在队列中添加一些东西时,我们需要确保我们正确处理被踢出的事物,除非我误解了事情。
感谢让Clojure变得很棒!