2

我正在尝试EhCache在我的项目中使用 Tomcat 6。我使用的 EhCache 是 1.4 版,因为它已经在我的 Hibernate 项目中使用。我已经编写了自己的自定义 CacheEventListener(包括在下面),除了notifyElementExpired(). 似乎notifyElementExpired()只有在我向缓存中添加其他内容时才会调用它。在旁注中,notifyElementPut()被调用了。

有人可以提出解决方案吗?

public class EhCacheEventListener implements CacheEventListener {
  private Logger log4j =
    LoggerFactory.getLogger(this.getClass().getPackage().getName());   

  public void notifyElementRemoved(Ehcache cache, Element element) throws CacheException {
    log4j.debug("cache element removed---->"+element.getKey());
  }

  public void notifyElementPut(Ehcache cache, Element element) throws CacheException {
    log4j.debug("cache element put---->"+element.getKey());
  }

  public void notifyElementUpdated(Ehcache cache, Element element) throws CacheException {
    log4j.debug("cache element updated---->"+element.getKey());
  }

  @Override
  public void notifyElementExpired(Ehcache cache, Element element) {
    //log4j.debug("Element creation time is "+element.getCreationTime());
    log4j.debug("cache element expired---->"+element.getKey());
    //log4j.debug("Element expiry time is "+element.getExpirationTime());
  }

  @Override
  public void notifyElementEvicted(Ehcache cache, Element element) {
    log4j.debug("cache element evicted---->"+element.getKey());
  }

  public void notifyRemoveAll(Ehcache cache) {}

  public void dispose() {}

  public Object clone(){
    throw new UnsupportedOperationException("Not supported yet.");
  }
}
4

1 回答 1

2

ehcache在以下时间检查元素是否过期:

当发出get请求时,当元素根据MemoryStore eviction policy. 在DiskStore到期线程运行时,默认为

Cache.DEFAULT_EXPIRY_THREAD_INTERVAL_SECONDS

有关更多详细信息,请查看:ehCache 文档

于 2013-06-03T09:02:26.193 回答