2024年Clojure状态调查!中分享您的看法。

欢迎!请参阅关于页面,了解如何使用的更多信息。

0
core.cache
我在我的某些项目中使用了 core.cache。这是一个非常好的库,我非常喜欢它。它只缺少统计信息,这样我就可以根据一些统计信息调整缓存的大小。我已经决定编写一个自定义的缓存实现,可以实现缓存命中率/未命中率统计。一开始是一个独立的项目,但我后来意识到我需要在 core.cache 本身进行一个更改,这是我不能优雅地绕过的。所以这里有添加统计感知缓存实现的补丁。

快速演示

{code:none}
(require '[clojure.core.cache :as core.cache]
         '[clojure.core.cache.stats :as ccs]
         '[clojure.core.cache.stats.counters :as ccs.counters])

(def cache (-> {} core.cache/lru-cache-factory ccs/measured-cache))
(ccs/stats cache)  ; {:hit 0, :miss 0, :request 0, :hit-ratio 1.0, :miss-ratio 1.0}
(def cache (assoc cache :foo "bar"))
(ccs/stats cache)  ; {:hit 0, :miss 1, :request 1, :hit-ratio 0.0, :miss-ratio 1.0}
(get cache :foo)  ; "bar"
(get cache :foo)  ; "bar"
(ccs/stats cache)  ; {:hit 2, :miss 1, :request 3, :hit-ratio 0.6666666666666666, :miss-ratio 0.3333333333333333}



新特性

* core.cache.stats 命名空间,它提供了实现了 CacheProtocol 的 MeasuredCache,以及一个创建它的函数 measured-cache。MeasuredCache 还实现了 MeasuredCacheProtocol,其仅有的职责是返回命中率/未命中率统计快照。
* core.cache.stats.counters 命名空间,它提供了一个协议 (StatsCounterProtocol),该协议允许实现命中率/未命中率计数器。已经有两个实现:一个是基于原子包装的长整型,另一个(默认使用)是基于 LongAdder。
* 所有可以调用的方法都有测试。

注意事项(无特定顺序)

* LongAdderStatsCounter 引入了对 java 1.8 中添加的 LongAdder 类的硬依赖。我尝试使其可选但失败了(《https://stackoverflow.com/questions/45045314/clojure-optional-definitions》)
* 我已经修改了 defcache 宏(所有测试都通过),这样我实际上可以覆盖定义

合并前要完成的事情

* 如果您想要这个想法,我会添加更多的文档(也许我应该从这篇开始,这样被接受的可能性会更大?)
* 精炼代码(我根本不是 Clojure 专家),命名和命名空间

提前感谢您的反馈

10 答案

0

评论由:seancorfield 发布

这真是一个有趣的想法,谢谢!我认为这将对许多{{core.cache}}用户(包括我自己)都非常有价值。

我会在看过补丁后做出答复,但在此之前,我没有在贡献者名单上看到你的名字——如果你还没有,你能否走一下这个流程https://clojure.org/community/contributors

0

评论由:akhomchenko 发布

我已经用我的电子邮件和Github用户名签了SLA。也许我弄错了,我会再次检查。

0

评论由:seancorfield 发布

谢谢。我会等明天通知Alex,因为网站有些延迟。

0

评论由:akhomchenko 发布

你好。

贡献者页面仍然没有更新。我能帮上什么忙以解决问题吗?

谢谢。

0

评论由:seancorfield 发布

我让Alex检查最近的CA提交——我预计下个星期他会确认。无论如何,我需要一些时间来审查和分析补丁(并且我现在正忙于产品的推广,请注意耐心等待)。

0

评论由:akhomchenko 发布

哦,我主要是在问贡献者页面为什么没有显示我提交的问题:)

0

评论由:akhomchenko 发布

添加了一些文档。

0

评论由:akhomchenko 发布

大家好。这个有什么更新吗?我能做些什么帮助吗?谢谢

0

评论由:seancorfield 发布

仍在考虑中。我正在查看这个库的一批问题,并将把它们作为其中一部分,当我想清楚其他难题时。

0
参考: https://clojure.atlassian.net/browse/CCACHE-51 (由 akhomchenko 报告)
...