SKIP_REMOTE_LOOKUP 与 AdvancedCache:entrySet 在 DIST_SYNC Infinispan 缓存中

Posted

技术标签:

【中文标题】SKIP_REMOTE_LOOKUP 与 AdvancedCache:entrySet 在 DIST_SYNC Infinispan 缓存中【英文标题】:SKIP_REMOTE_LOOKUP with AdvancedCache:entrySet in a DIST_SYNC Infinispan cache 【发布时间】:2021-11-08 05:57:17 【问题描述】:

只是为了消除我的困惑... infinispan 的tutorial for distributed caches 在 12.x 分支中使用以下代码:

// Display the current cache contents for this node
cache.getAdvancedCache().withFlags(Flag.SKIP_REMOTE_LOOKUP).entrySet()
        .forEach(entry -> System.out.printf("%s = %s\n", entry.getKey(), entry.getValue()));

但是“这个节点”的内容不是错了吗? SKIP_REMOTE_LOOKUP 的文档仅提到它适用于这四种方法:

get put remove containsKey

同样在我的测试中,上面的代码总是打印出整个缓存内容,而不仅仅是本地节点的内容。只有将其从 entrySet 切换到手动 get 才能达到目的。

是我遗漏了什么还是教程中的“错误”?

【问题讨论】:

【参考方案1】:

看起来像教程中的一个错误。正确的标志应该是Flag.CACHE_MODE_LOCAL

【讨论】:

你是对的,这个标志实际上适用于 entrySet - 但也只有当你设置builder.clustering().cacheMode(CacheMode.DIST_SYNC).hash().numOwners(1) 时,否则numOwners 的默认值是2,这导致两个缓存具有相同的内容。 numOwner 设置您想要的数据副本数。如果您有一个 numOwner==2 的 2 节点集群,则两个节点都包含相同的数据。 是的,因为 2 是默认值,这使得该教程对于像我这样的新手来说非常混乱,因为当您运行两个实例时,CACHE_MODE_LOCAL 会起作用,但仍然显示本地和完整之间没有区别缓存 ;-) 而且由于这些应该是简单的教程,我实际上建议让它们更清晰,以实际演示它们应该做什么。

以上是关于SKIP_REMOTE_LOOKUP 与 AdvancedCache:entrySet 在 DIST_SYNC Infinispan 缓存中的主要内容,如果未能解决你的问题,请参考以下文章

AXI协议:AMBA总线介绍,AXI概念与背景介绍,AXI协议特点与功能

AXI协议:AMBA总线介绍,AXI概念与背景介绍,AXI协议特点与功能

AXI协议:AMBA总线介绍,AXI概念与背景介绍,AXI协议特点与功能

php amqp rabbitmq 介绍和使用

安装Windows 7

yii2 安装