我正在缓存以异步方式发送到组件的对象。换句话说,这些对象到达的顺序是不可预测的。为了避免任何问题,我为我的对象添加了一个版本属性(基本上是一个时间戳)。其思想是,任何带有比已缓存的版本旧的版本的对象都可以被丢弃。
ehcache的“element”类(它将对象包装在ehcache中)似乎有助于实现这一点:除了键和值之外,构造函数还可以采用(长基)版本。但我不能按我期望的方式来完成这项工作。下面的代码片段演示了我的问题(使用ehcache 2.1.1):
public static void main(String[] args) {
final CacheManager manager = CacheManager.create();
final Cache testCache = new Cache(new CacheConfiguration("test", 40));
manager.addCache(testCache);
final String key = "key";
final Element elNew = new Element(key, "NEW", 2L);
testCache.put(elNew);
final Element elOld = new Element(key, "OLD", 1L);
testCache.put(elOld);
System.out.println("Cache content:");
for (Object k : testCache.getKeys()) {
System.out.println(testCache.get(k));
}
}
我希望上面的代码会导致缓存值为“new”,而不是“old”。如果按元素插入的顺序播放一点,您会发现插入的最后一个元素是将保留在缓存中的元素。版本控制似乎被忽略了。
我是否没有正确地使用版本控制功能,或者它可能不打算用于此目的?有人能推荐替代品吗?