大家好,我是Infinispan的新手,我对infinispan/infinispan-quickstart · GitHub中提供的分布式模式和快速入门有一些疑问,特别是clustered-cache-quickstart。
首先,据我所知,分布式模式允许定义数量的条目副本而不是复制模式,这复制了所有节点中的条目。例如,如果我们有3个条目(1,2,3)和3个缓存(A,B,C),其中numOwners(2)在分布式模式下生成的集群视图可能会导致: A含1,2 B含2,3 C含3,1 复制模式群集将导致: A,B和C含有1,2,3 如果我的假设是错误的,请纠正我。
更重要的是,我使用这些说明运行infinispan-quickstart/clustered-cache · GitHub这个快速入门
要尝试使用分布式缓存,请在分开的终端中运行以下命令:
1号航站楼
mvn compile exec:java -Djava.net.preferIPv4Stack=true -Dexec.mainClass="org.infinispan.quickstart.clusteredcache.Node" -Dexec.args="-d A"
2号航站楼
mvn compile exec:java -Djava.net.preferIPv4Stack=true -Dexec.mainClass="org.infinispan.quickstart.clusteredcache.Node" -Dexec.args="-d B"
3号航站楼
mvn compile exec:java -Djava.net.preferIPv4Stack=true -Dexec.mainClass="org.infinispan.quickstart.clusteredcache.Node" -Dexec.args="-d C"
我的所有节点都会产生相同的条目(我将条目号限制为10):
节点A
Cache contents on node A-29339
key-0 = A-29339-0
key-1 = A-29339-1
key-2 = A-29339-2
key-3 = A-29339-3
key-4 = A-29339-4
key-5 = A-29339-5
key-6 = A-29339-6
key-7 = A-29339-7
key-8 = A-29339-8
key-9 = A-29339-9
节点B
Cache contents on node B-36604
key-0 = A-29339-0
key-1 = A-29339-1
key-2 = A-29339-2
key-3 = A-29339-3
key-4 = A-29339-4
key-5 = A-29339-5
key-6 = A-29339-6
key-7 = A-29339-7
key-8 = A-29339-8
key-9 = A-29339-9
节点C
Cache contents on node C-26839
key-0 = A-29339-0
key-1 = A-29339-1
key-2 = A-29339-2
key-3 = A-29339-3
key-4 = A-29339-4
key-5 = A-29339-5
key-6 = A-29339-6
key-7 = A-29339-7
key-8 = A-29339-8
key-9 = A-29339-9
但是,在文档Getting Started with Infinispan中它说:您还可以通过按Enter键看到每个节点包含一组不同的条目。 尽管如此,我的输出显示所有条目基本上都是在复制模式下完成的。 任何想法为什么会这样发生?
答案 0 :(得分:2)
Tristan Tarrant在JBoss论坛上回答,复制粘贴回复:
这是因为我们在7.0中更改了entrySet / keySet的行为时未正确更新快速入门。以前这些方法只返回本地节点上的数据,但现在它们从所有节点返回数据。要获取旧行为(即仅本地内容),您需要指定CACHE_MODE_LOCAL标志,以便不查询其他远程节点的数据。
因此,从:
更改Node.java @第133行ArrayList<Map.Entry<String, String>> entries = new ArrayList<>(cache.entrySet());
到
ArrayList<Map.Entry<String, String>> entries = new ArrayList<>(cache.getAdvancedCache().withFlags(Flag.CACHE_MODE_LOCAL).entrySet());