java - Coherence EntryProcessor 查询

标签 java caching concurrency oracle-coherence

我正在尝试实现使用 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/

相关文章:

低 CPU 利用率的 Java 最佳编码实践

java - 将 javaFX 元素直接链接到 Java 代码

ruby-on-rails - Rails : How do I minimize DB hits here? 预加载不适用

git - git实现并发的加锁策略?

java - 导入build.gradle时出现Intellij错误

java - 包含二维双数组用户输入的对象

使用 System.Runtime.Caching 的 Nhibernate 缓存提供程序

sql-server - 防止在 IIS 7.5 上运行的 ASP MVC 站点上进行缓存

Java 同步问题 - 主线程被协程实现锁定

java - 嵌套同步块(synchronized block)