问题:软件锁定的缓存条目已被底层Ehcache过期

时间:2011-01-02 03:15:22

标签: java hibernate caching ehcache second-level-cache

我收到了警告,我不知道该怎么做。每当bannedIPs更新时,大约有80000个条目将此警告写入tomcat中的catalina.out日志文件:

WARNING: Cache package.BannedIP Key package.BannedIP#73121 Lockable : null
A soft-locked cache entry was expired by the underlying Ehcache. If this happens regularly   you should consider increasing the cache timeouts and/or capacity limits
Dec 16, 2010 10:00:53 PM net.sf.ehcache.hibernate.strategy.AbstractReadWriteEhcacheAccessStrategy handleLockExpiry

ehcache.xml文件中BannedIP的配置:

    <cache name="package.BannedIP"
       maxElementsInMemory="80000"
       eternal="true"
       overflowToDisk="true"
       diskPersistent="true" />

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您是否因此警告而遇到任何性能或可用性问题?如果没有,那么您似乎应该将此警告视为:警告。

否则,解决方案似乎是增加maxElementsInMemory的大小以解释缓存内容与实际使用内容之间的差异。

希望这有帮助。

答案 1 :(得分:2)

您是否确定package.BannedIP实际上包含您的期望?

您可以通过编程方式使用统计信息来查看正在发生的事情。鉴于你在那里的配置位,Ehcache应该永远不会驱逐任何东西(只要你的BannedIP实例少于80k)。

此外,要明确该消息的含义:您正在更新BannedIP实例,但是,当提交发生时,Hibernate已经为实现此条目而设置的SoftLock正在进行中更新,由于某种原因被驱逐......我想知道为什么这些更新需要这么长时间?

另外,虽然我只是大声思考,但是其他进程(批量更新)是否会使整个缓存区域无效?