首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Hazelcast的分布式缓存用例

使用Hazelcast的分布式缓存用例
EN

Stack Overflow用户
提问于 2015-11-10 17:14:48
回答 1查看 465关注 0票数 0

下面是我们的用例:

我们有4-8个节点实现分布式hazelcast缓存,每个节点可以通过具有相同事务密钥的JMS获得多个消息,我们使用密钥对象对(其中对象是一个可缓存项列表)添加缓存中的所有消息。

聚合是通过apache-camel完成的,其中我们有一个聚合器,在300 MILLISECS之后运行300 MILLISECS,我们关闭聚合窗口并从缓存中删除与事务键对应的所有项,并以编程方式聚合它们。Hazelcast的作用只是在缓存映射中收集消息,并使所有节点保持同步,因为所有节点都知道缓存问题场景中有哪些项:

  1. 节点1在缓存中为事务添加一个item1键=TX1( 17:01:01:100 ),我们假设hazelcast向其他节点广播此信息,以便所有节点都获得缓存项的副本。
  2. 节点2在17:01:01:105的缓存中为事务键=tx1添加了一个item2。
  3. 节点3现在在17:01:01:350的缓存中为transaction-key=tx1添加了一个item3,假设在17:01:01:400我们尝试关闭聚合窗口,并使用transaction-key=tx1编程地将所有项从缓存中删除。

问题是node1、node2知道item1和item2,因为它们有时间同步缓存项。但是node3添加item3的时间太晚了,以至于node1和node2在17:01:01:400不知道item3。假设我们在17:01:01:400从node1 (不知道item3 )开始逐出,它将给我们一个只有2项的对象,然后node1将广播给每个人,将所有用于事务的缓存项逐出-key= it 1作为响应,所有节点都将清除其缓存中的事务-key=tx1,这将导致丢失项(Item3)。

感谢您的帮助.�

EN

回答 1

Stack Overflow用户

发布于 2015-11-11 21:17:48

我认为您的IMap设计如下:

IMap<TransactionKey,List<CacheItem>> transactionMessagesMap

问题是node1、node2知道item1和item2,因为它们有时间同步缓存项。但是node3添加item3的时间太晚了,以至于node1和node2在17:01:01:400不知道item3。

您是如何将条目放入IMap的?您正在使用set()put()putAsync()吗?put()set()是同步调用,因此节点3所做的更改将以同步方式反映出来。

注意,put() / set()IMap的操作是同步的。但是,如果您希望确保当一个节点在您的列表上操作(例如添加一个新项)时,来自其他节点的所有其他后续请求都应该看到更新的列表,那么您可能需要使用针对相关密钥的分布式锁。即

添加新项目的代码如下:

代码语言:javascript
运行
复制
transactionMessagesMap.lock(transactionKey);
list = transactionMessagesMap.get(transactionKey);
list.add(newItem);
transactionMessagesMap.set(transactionKey, list);
transactionMessagesMap.unlock(transactionKey);

驱逐物品的守则如下:

代码语言:javascript
运行
复制
// In your case node1 will block here until node3 has successfully updated 
// item3 in the list.
transactionMessagesMap.lock(transactionKey);
list = transactionMessagesMap.get(transactionKey);
for(CacheItem item : list)
{
   // perform your eviction logic here.
}
transactionMessagesMap.unlock(transactionKey);

您可以根据您的逻辑决定何时释放锁。其基本思想是根据您的用例使用一些分布式锁定机制,如IMap.lock()ILock。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33635752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档