请在 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),允许实现击中和未命中计数器。目前已有两个实现:一个是基于原子包装的 long,另一个(默认使用)是基于 LongAdder。
* 为所有可能调用的方法都提供了测试。

注意事项(无特定顺序)

* LongAdderStatsCounter 会在 Java 1.8 中添加 LongAdder 类引入了硬依赖。我已经尝试使其可选,但失败了(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](https://clojure.atlassian.net/browse/CCACHE-51)(由akhomchenko报告)
...