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 命名空间提供了 MeasuredCache,它实现了 CacheProtocol 并提供了一个测量缓存函数来实例化它。MeasuredCache 还实现了 MeasuredCacheProtocol,它的唯一职责是返回成功/失败统计信息的快照。
* core.cache.stats.counters 命名空间提供了一个协议(StatsCounterProtocol),允许实现命中/失败计数器。已有两种实现:一种是基于原子封装的长整型,另一种(默认使用)是基于 LongAdder。
* 对所有可调用的方法都进行了测试

注意事项(不分先后顺序)

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

合并前需要完成的事宜

* 如果您想看相关的文档(可能我本应该先做这个,这样可能会更容易被接受?),请添加更多文档
* 精简代码(我不是 Clojure 专家),命名和命名空间

提前感谢您的 feedback

10 个答案

0 投票

评论者为:seancorfield

这是一个很有趣的想法,谢谢!我确实认为这一点对很多{{core.cache}}的用户(包括我自己)都很有价值。

我会查看补丁,但在此之前,我没有在贡献者页面看到您的名字——所以如果您还没有做过,请走一下这个流程https://clojure.org/community/contributors

0 投票

评论者为:akhomchenko

我已经用我的电子邮件和github用户名签署了SLA。可能我做错了,我会再次检查。

0 投票

评论者为:seancorfield

谢谢。我明天会和Alex确定,因为网站有点卡。

0 投票

评论者为:akhomchenko

您好。

那个贡献者页面还没有更新。我能帮什么忙以解决这个问题吗?

谢谢。

0 投票

评论者为:seancorfield

我已经要求Alex检查最近提交的CAs——我预计他下周可以确认。无论如何,我审查和分析补丁都需要一点时间(现在我正忙于上线生产,所以请耐心等待)。

0 投票

评论者为:akhomchenko

哦,我主要要求的是贡献者页面不要显示我的问题:)

0 投票

评论者为:akhomchenko

增加了一些文档。

0 投票

评论者为:akhomchenko

您好。这方面有什么更新吗?我能做些什么来帮忙吗?谢谢

0 投票

评论者为:seancorfield

仍在考虑中。我正在查看这个库的一堆问题,并将这个问题作为那部分的一部分来处理,当我解决了其他难点问题时。

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