Infinispan 分布式模式 clustered-cache-quickstart
Infinispan Distributed mode clustered-cache-quickstart
大家好,我是 Infinispan 的新手,我对 infinispan/infinispan-quickstart · GitHub 中提供的分布式模式和快速入门有一些疑问,特别是 clustered-cache-quickstart。
首先,据我所知,分布式模式允许定义数量的条目副本,而不是复制模式,后者在所有节点内复制条目。例如,如果我们有 3 个条目(1、2、3)和 3 个缓存(A、B、C),其中 numOwners(2) 集群在分布式模式下的结果视图可能是:
一个含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 键看到每个节点都包含一组不同的条目。
尽管如此,我的输出显示所有条目基本上都被复制,就像在复制模式下所做的那样。
知道为什么会这样吗?
Tristan Tarrant 在 JBoss 论坛上回答,复制粘贴回复:
那是因为当我们在 7.0 中更改 entrySet/keySet 的行为时,快速入门没有正确更新。以前这些方法只returned 本地节点上的数据,但现在它们return 来自所有节点的数据。要获得旧行为(即仅本地内容),您需要指定 CACHE_MODE_LOCAL 标志,以便不会向其他远程节点查询数据。
因此,将第 133 行的 Node.java 更改为:
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());
大家好,我是 Infinispan 的新手,我对 infinispan/infinispan-quickstart · GitHub 中提供的分布式模式和快速入门有一些疑问,特别是 clustered-cache-quickstart。
首先,据我所知,分布式模式允许定义数量的条目副本,而不是复制模式,后者在所有节点内复制条目。例如,如果我们有 3 个条目(1、2、3)和 3 个缓存(A、B、C),其中 numOwners(2) 集群在分布式模式下的结果视图可能是: 一个含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 键看到每个节点都包含一组不同的条目。 尽管如此,我的输出显示所有条目基本上都被复制,就像在复制模式下所做的那样。 知道为什么会这样吗?
Tristan Tarrant 在 JBoss 论坛上回答,复制粘贴回复:
那是因为当我们在 7.0 中更改 entrySet/keySet 的行为时,快速入门没有正确更新。以前这些方法只returned 本地节点上的数据,但现在它们return 来自所有节点的数据。要获得旧行为(即仅本地内容),您需要指定 CACHE_MODE_LOCAL 标志,以便不会向其他远程节点查询数据。
因此,将第 133 行的 Node.java 更改为:
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());