请在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 宏(所有测试都通过),这样我实际上可以覆盖定义

合并前需要完成的任务

* 如果您想添加更多文档(也许我应该先写这个,这样更容易被接受?)
* 精简代码(我根本不是 Clojure 专家),命名和命名空间

提前感谢您的反馈

10 个回答

0

评论者:seancorfield

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

我将检查补丁,但在那之前,我没有在你的贡献者页面上看到你的名字——你还没有完成这个过程吗?请点击https://clojure.org/community/contributors

0

评论者:akhomchenko

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

0

评论者:seancorfield

谢谢。由于网站滞后,我明天会确认阿列克斯的。

0

评论者:akhomchenko

你好。

贡献者页面还是没有更新。我能帮上忙解决这个问题吗?

谢谢。

0

评论者:seancorfield

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

0

评论者:akhomchenko

啊,我主要是想知道为什么贡献者页面没有显示我的问题 :)。

0

评论者:akhomchenko

添加了一些文档。

0

评论者:akhomchenko

您好。这个有更新吗?我能帮上什么忙吗?谢谢

0

评论者:seancorfield

仍在考虑中。我正在查看一些关于该库的问题,并将在解决其他问题后将其包括在内。

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