请在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)。已经有了两个实现:一个是基于atom包裹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

谢谢。我明天会和Alena确认,因为网站有点延迟。

0

评论者:akhomchenko

大家好。

那个贡献者页面还是没有更新。我可以帮着解决吗?

谢谢。

0

评论者:seancorfield

我让Alex检查最近提交的CA——我预计他下周能确认。无论如何,我评测和解析补丁需要一段时间(我现在正忙于生产环境的部署,所以请多体谅)。

0

评论者:akhomchenko

啊,我主要问的是贡献者页面没有显示我的问题:)

0

评论者:akhomchenko

增加了一些文档。

0

评论者:akhomchenko

你好。这个有什么更新吗?我能做些什么来帮忙?谢谢

0

评论者:seancorfield

还在考虑中。我在查看这个库的一些问题,并将这些问题包括在当我解决了其他难题时。

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