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),允许实现命中/未命中计数器。已经有两种实现:一种基于封装在原子中的 long,另一种(默认实现)是基于 LongAdder。
* 为所有可能调用的方法都提供了测试

注意事项(不分先后)

* LongAdderStatsCounter 引入了 LongAdder 类的强依赖,该类是从 Java 1.8 中添加的。我试图使其可选,但失败了(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](https://clojure.atlassian.net/browse/CCACHE-51)(由 akhomchenko 报告)
...