gpt4 book ai didi

java - 如何在 Liferay 7.1 上启用缓存复制。 DXP 1.0 正式版?

转载 作者:行者123 更新时间:2023-11-30 12:03:57 31 4
gpt4 key购买 nike

我有下一个环境:

  1. 具有集群许可证的 Liferay 7.1 DXP(与 wildfly 16.0 捆绑在一起)
  2. 这个包在本地主机上的同一台机器(2 个节点)上运行,但端口不同
  3. 每个节点都有相同的数据库(postgresql)
  4. 在机器上单独运行elasticsearch
  5. 文档和媒体的共享文件夹
  6. 在 portal-setup-wizard.properties 中,我添加了“cluster.link.enabled=true”和“ehcache.replicator.properties.com.liferay.portal.kernel.webserver.WebServerServletToken=replicatePuts=true”以便复制缓存7.部署示例 portlet 以测试缓存复制

我尝试了接下来的步骤来测试缓存复制:

  1. 运行第一个节点。
  2. 之后运行第二个节点。
  3. 转到第一个节点的本地主机
  4. 转到第二个节点的本地主机
  5. 查看日志中的下一条消息:

[Incoming-2,liferay-channel-control,WS-5459-64327][JGroupsReceiver:91] Accepted view MergeView::[WS-5459-18884|3] (2) [WS-5459-18884, WS-5459-64327], 2 subgroups: [WS-5459-64327|1] (2) [WS-5459-64327, WS-5459-18884], [WS-5459-18884|2] (1) [WS-5459-18884]

  1. 在第一个节点上的测试 portlet 中,通过 Debug模式,我通过 MultiVMPoolUtil 添加了缓存:

MultiVMPoolUtil.getPortalCache("com.liferay.portal.kernel.webserver.WebServerServletToken").put("1","1")

  1. 在第二个节点中,我尝试从这个缓存中获取值:

MultiVMPoolUtil.getPortalCache("com.liferay.portal.kernel.webserver.WebServerServletToken").getKeys()

但是在第二个节点上的这个缓存中没有键“1”,但是如果我尝试使用相同的 API .remove("1") 删除,那么在第一个节点上这个值将被删除。

问题是如何为put操作配置缓存复制?

最佳答案

ClusterLink 不是这样工作的,它是“使”缓存“无效”,而不是“复制”它们:

如果您修改节点 1 上的对象“1”,节点 2 将收到“1”已更改的通知,并且 - 如果它缓存了此对象 - 将简单地将其从自己的缓存中删除。只有在随后需要“1”的情况下,才会检测到高速缓存未命中并从数据库(或其他持久性存储)中检索对象。

如果 node2 上没有人请求该对象,则不会在 node2 上检索任何内容。

此外,如果 node1 上的缓存溢出(缓存不是无限的,事实上,它可能被配置为大小为 0)你甚至不能假设你将能够永远从 node1 上的缓存中检索这个对象.

因此,您的观察是正确的:一个节点中的更改或删除将从所有缓存中删除具有给定键的对象。这就是它的实现方式,而且非常有用:无需缓存您可能永远不会在给定计算机上访问的内容。

我相信我很久以前就听说过实际的缓存复制,例如它可能是可配置的。但我从未尝试过,因为这不是必需的,而且失效不会造成巨大的负担。

关于java - 如何在 Liferay 7.1 上启用缓存复制。 DXP 1.0 正式版?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57359028/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com