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 引入了对 LongAdder 类的严格依赖,该类在 Java 1.8 中添加。我已经尝试使其可选,但失败了 (https://stackoverflow.com/questions/45045314/clojure-optional-definitions)
我已经修改了 defcache 宏(所有测试都通过),以便我实际上可以覆盖这些定义

合并前要完成的事

如果您有兴趣,我会添加更多文档(也许我应该从这一篇开始,这样被接受的可能性会更大?)
润色代码、命名和命名空间

感谢您提供的反馈

共有10个回答

0

评论者:seancorfield

这是一个非常有趣的想法,谢谢你!我可以肯定地看到这对许多{{核心缓存}}(包括我自己)用户的价值。

我将审查补丁,但在同时,我没有看到你在贡献者页面上的名字——如果你还没有完成,能否通过此处的过程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 报告)
...