【问题标题】:ehcache LRU evicting recently used entriesehcache LRU 驱逐最近使用的条目
【发布时间】:2010-02-22 12:34:03
【问题描述】:

使用Ehcache ,Java 应用运行 2.5 天后,我有这个统计数据

cacheHits:  31185262, approximate 131 per sec
cacheMisses:    4642979, approximate 19  per sec
evictedCount:   4106931, approximate 17 per sec

最后一小时看起来像

cacheHits:  60 per sec
cacheMisses:    57 per sec
evictedCount:   53 per sec

缓存大小=400000,项目永不过期。

为什么会这样?

【问题讨论】:

  • 从您发布的内容来看,您如何判断被驱逐的条目是“最近使用的”?您确定您的应用程序不只是访问缓存中的各种项目,包括最近使用的和最近未使用的吗?
  • 我实际上在一些生产实例上看到了一个非常非常相似的模式:运行一周后,一些对象(预计会被缓存)突然变成持久未命中,并且总是需要一直到数据库。

标签: java ehcache


【解决方案1】:

我想我找到了原因。

前段时间我将 ehcache 从 1.6.xx 升级到 1.7.xx。我没有注意到他们改变了驱逐算法的实现。现在它的工作原理如下:选择随机 15 个键(!,它们使用一些启发式方法,但仍然是随机的),然后找到相应的元素,从选定的元素中选择最近使用的元素。 (看MemoryStore类后你可以自己弄清楚)。在那之后,它的工作非常非常糟糕也就不足为奇了。

好消息是您可以通过设置属性“net.sf.ehcache.use.classic.lru”=true 来使用旧实现。在我这样做之后,我的问题就消失了

【讨论】:

    【解决方案2】:

    你可以看看其他Cache Eviction Algorithms。另见Cache replacement policies

    【讨论】:

    • @Akshay:已更新。
    猜你喜欢
    • 2013-09-16
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多