【发布时间】:2022-01-19 04:02:46
【问题描述】:
我们有两个主动/主动节点 Wildfly 19 集群配置,带有 infinispan (v 9.4.18) 失效缓存。
<invalidation-cache name="opencell-tenant-cache">
<transaction locking="OPTIMISTIC" mode="NONE"/>
</invalidation-cache>
根据 infinispan 文档,当节点 1 上的缓存值更改时,会从节点 1 向节点 2 发送 InvalidateCommand,从而使节点 2 缓存中的键条目无效/删除。
我注意到 InvalidateCommand 甚至在一个新的键上发送。
在我们的应用程序中,如果在缓存中找不到键,则会从数据库中加载一个值并放入缓存中。由于两台服务器都处于活动状态,我得到以下永无止境的场景:
对节点 1 的请求 > 在节点 1 缓存上找不到密钥 > 值从数据库加载并放入节点 1 缓存 > 密钥在节点 2 上失效
对节点 2 的请求 > 在节点 2 缓存上找不到密钥 > 从数据库加载值并放入节点 2 缓存 > 节点 1 上的密钥无效
对节点 1 的请求 > 在节点 1 缓存中找不到密钥 > 从数据库加载值并放入节点 1 缓存 > 节点 2 上的密钥无效
等等。
在这种情况下,我会不断地使缓存失效,即使数据从未更改过。 我希望在新密钥放置时不会发送无效命令。
否则失效缓存有什么实际用途,如果在接收到失效命令后放入相同的key会再次触发失效。
谢谢
【问题讨论】:
标签: infinispan cache-invalidation