我正在尝试实现使用 Coherence transient 缓存的业务功能。
我计划依赖的功能之一是在将项目放入缓存时提供(可配置的)生存时间时自动逐出缓存条目。 NamedCache 接口(interface)提供了一个 API 来实现此目的( http://download.oracle.com/otn_hosted_doc/coherence/330/com/tangosol/net/NamedCache.html#put(java.lang.Object , java.lang.Object, long))。
但是,我还计划使用入口处理器来确保跨集群的有效并发。我现在陷入了一个困境,在处理器的范围内,我应该使用 InvocableMap.Entry 使用缓存中的键获取/设置值。不幸的是,没有 setValue 方法可以让我指定生存时间值。
我在这里假设直接与 EntryProcessor 的 process 方法内的 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
关于java - Coherence EntryProcessor 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27124664/