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 函数。MeasurementCache 还实现了 MeasuredCacheProtocol,它只有一个职责 - 返回命中/未命中的统计快照
* core.cache.stats.counters 命名空间,它提供了一个协议(StatsCounterProtocol),允许实现命中/未命中计数器。已有两种实现:一个是基于原子包裹的长整数,另一个是默认使用的基于 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(由akhomchenko报告)
...