java - 动态切换 Caffeine Cache 上的记录统计信息
问题描述
我希望能够通过 REST 端点或 JMX 方法按需动态切换咖啡因缓存统计信息的记录
我们有一个大型应用程序,我们在其中使用多个咖啡因缓存实例。我们可以使用所有可能的性能升级,因此持续录制似乎是多余的。特别是如果 JavaDoc 说记录有性能成本。经过我的分析,我认为它没有直接支持。或者是吗?
我有 2 个统计目标,第一个是能够调整我们的缓存策略。确定我们的命中率糟糕的地方,或者我们实际上不需要缓存的地方。为了适应这种情况,我们可能会在打开录制的情况下进行临时发布,然后再进行最终发布。这意味着这个解决方案根本不是动态的。
第二个目标是使用它来确定系统故障的原因。在实时生产环境中诊断错误状态。为了保持我所有的理想要求,这必须是动态的。如果我不能更改缓存实例,我想我可以替换该实例。这会给系统带来巨大的时间负载,因为它基本上会清除所有缓存。
为了避免清除,我们可能会以某种方式将值廉价地传递给新实例,并切换统计记录。我还不知道如何,甚至可能。
所以我的问题是实现我的目标的最佳方式是什么?
解决方案
您是对的,不支持动态配置统计信息。但是,您可以自己StatsCounter
提供可以提供这种支持的服务。
StatsCounter
由于存储在LongAdder
柜台中,使用内置的成本应该很便宜。在不干净的环境中,我观察到读取吞吐量下降了 20%,但仍然超过 100M ops/s。在那个吞吐量下,缓存不应该成为实际应用程序逻辑的瓶颈。
您很可能可以毫无顾虑地打开统计信息。如果您担心,请先尝试进行基准测试,看看额外的解决方法是否值得付出努力。如果是这样,StatsCounter
则可能可以接受自定义(但同样是基准)。
推荐阅读
- google-cloud-platform - 数据存储模式下的 Cloud Firestore - 是否不再需要分片计数器?
- excel - 在字符串中查找子字符串,但从右到左查找excel
- python-3.x - 不再能够在 Vscode 中执行 python 代码
- python - 如何找到float64中一列和另一列的两列熊猫数据框之间的相关性是对象(字符串)
- python - 用python解析CSV中的困难字符串
- c++ - 调试器因新的 UWP C++ 解决方案而失败
- matlab - 配对函数的阶复杂度
- deep-learning - 使用 CNN 进行图像分割的骰子系数太高
- html - 剩余可用空间 HTML 的高度
- scala - 查找 sbt 找到插件或 JAR 的存储库