2014-11-25 28 views
1

我試圖實現一個使用Coherence瞬態緩存的業務功能。一致性EntryProcessor查詢

我打算依賴的功能之一是在將項目放入緩存時提供(可配置的)生存時間時自動逐出緩存條目。接口NamedCache提供了一個API來實現這個(http://download.oracle.com/otn_hosted_doc/coherence/330/com/tangosol/net/NamedCache.html#put(java.lang.Object,java.lang.Object,long))。

但是,我還計劃使用Entry-Processors來確保跨集羣的有效併發性。我現在被困在一個點上,在處理器的範圍內,我應該使用InvocableMap.Entry來使用緩存中的鍵來獲取/設置值。不幸的是,沒有setValue方法可以讓我指定生存時間值。

我在這裏假設直接與EntryProcessor的process方法內的NamedCache引用接口不是一個好主意,並且會危及EntryProcessor提供的併發保證。

您可以分享一下您的想法:在確保某個時間段(這是動態決定的)之後驅逐一個條目的最佳方式,同時確保跨羣集節點的最佳併發性?

我並未完全掛斷使用自動驅逐功能。但是,如果我放棄這一點,我可能不得不依賴基於計時器的程序刪除條目,該條目在集羣中可靠地工作。再一次,我沒有想到這一點。理想情況下,我希望Coherence來解決這個問題。

非常感謝提前。

最好的問候, - 阿迪亞

回答

2

,你可以嘗試以下方法: 投在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

+0

謝謝!我最終做到了這一點。 – 2014-11-26 15:04:07