Tôi đang cố gắng chỉ lấy các đối tượng hợp lệ từ bộ nhớ cache. nếu tôi làm List list = cache.getKeys();
, nó cũng sẽ trả lại các khóa đã hết hạn. Tôi mặc dù thêm một người nghe và cố gắng để loại bỏ chìa khóa bản thân mình, nhưng người nghe của tôi notifyElementExpired
không bao giờ được gọi.Ehcache cách xóa khóa khi phần tử hết hạn?
Đây là mã của tôi:
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
CacheManager.getInstance().addCache("test");
Cache cache = CacheManager.getInstance().getCache("test");
cache.getCacheConfiguration().setTimeToLiveSeconds(10);
cache.getCacheEventNotificationService().registerListener(new CacheEventListener() {
public void notifyRemoveAll(Ehcache arg0) {
// TODO Auto-generated method stub
System.out.println("notifyRemoveAll cache=" + arg0);
}
public void notifyElementUpdated(Ehcache arg0, Element arg1)
throws CacheException {
// TODO Auto-generated method stub
System.out.println("notifyElementUpdated cache=" + arg0 + " element=" + arg1);
}
public void notifyElementRemoved(Ehcache arg0, Element arg1)
throws CacheException {
// TODO Auto-generated method stub
System.out.println("notifyElementRemoved cache=" + arg0 + " element=" + arg1);
}
public void notifyElementPut(Ehcache arg0, Element arg1)
throws CacheException {
// TODO Auto-generated method stub
System.out.println("notifyElementPut cache=" + arg0 + " element=" + arg1);
}
public void notifyElementExpired(Ehcache arg0, Element arg1) {
// TODO Auto-generated method stub
System.out.println("notifyElementExpired cache=" + arg0 + " element=" + arg1);
}
public void notifyElementEvicted(Ehcache arg0, Element arg1) {
// TODO Auto-generated method stub
System.out.println("notifyElementEvicted cache=" + arg0 + " element=" + arg1);
}
public void dispose() {
// TODO Auto-generated method stub
System.out.println("dispose");
}
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
});
//cache.getCacheConfiguration().setTimeToLiveSeconds(0);
String key = "key";
String value = "value1";
System.out.println("created at = " + new Date());
//cache.put(new Element(key, value, false, new Integer(1), new Integer(5)));
cache.put(new Element(key, value, false, new Integer(1), new Integer(5)));
System.out.println("key=" + key + "will expired at object=" + new Date(cache.get(key).getExpirationTime()));
Thread.sleep(7000);
@SuppressWarnings("unchecked")
List list = cache.getKeys();
System.out.println("current time = " + new Date());
for (Object item : list) {
System.out.println("created at = " + new Date());
//System.out.println("key=" + item + " object=" + new Date(cache.get(item).getExpirationTime()));
//System.out.println(item + " isExpired=" + cache.get(item).isExpired());
}
Thread.sleep(30000);
}