我正在尝试实现使用Coherence瞬态缓存的业务功能。
我计划依赖的功能之一是在将项目放入缓存时提供(可配置的)生存时间时自动退出缓存条目。接口NamedCache提供了实现此目的的API(http://download.oracle.com/otn_hosted_doc/coherence/330/com/tangosol/net/NamedCache.html#put(java.lang.Object,java.lang.Object,长)。
但是,我还计划使用Entry-Processor来确保整个集群的有效并发。我现在停留在处理器范围内的某个点上,我应该使用InvocableMap.Entry来获取/设置缓存中的键值。不幸的是,没有setValue方法可以让我指定生存时间值。
我在这里假设在EntryProcessor的处理方法内部直接与NamedCache引用接口不是一个好主意,并且会损害EntryProcessor提供的并发保证。
您能否分享您的想法,即在确保一定数量的节点并发性的同时并发的情况下,最好的方法是在一定时间(由动态决定)后驱逐条目,这是最好的方法?
我还没有完全习惯使用自动逐出功能。但是,如果我放弃了这一点,则可能不得不依靠基于计时器的程序性删除条目,该删除在整个集群中都可以可靠地工作。再说一次,我对这个想法没什么想法。理想情况下,我希望Coherence处理此问题。
提前谢谢了。
最好的祝福,
-阿迪亚
最佳答案
您可以尝试以下操作:
将EntryProcessor中的条目强制转换为BinaryEntry并设置到期时间。
例如:
public class MyEntryProcessor extends AbstractProcessor implements PortableObject {
@Override
public Object process(Entry myEntry) {
((BinaryEntry)myEntry).expire(100);
return myEntry;
}
}
http://docs.oracle.com/middleware/1212/coherence/COHJR/com/tangosol/util/BinaryEntry.html