0

我们有一个带有 infinispan (v 9.4.18) 失效缓存的两个主动/主动节点 Wildfly 19 集群配置。

<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 上的密钥无效
,依此类推。

在这种情况下,我会不断地使缓存失效,即使数据从未更改过。我希望在新的密钥放置上不会发送无效命令。

否则失效缓存的实际用途是什么,如果在接收到失效命令后放置相同的键将再次触发失效。

谢谢

4

1 回答 1

0

I would expect that no invalidation command is send on new key put. 什么是新看跌期权?

Request to Node 2 > Key not found on Node2 cache<- 在您的示例中,节点 2 在本地没有密钥;所以这是一个新的看跌期权。

如果您配置一个ClusterLoader. 请参阅无效缓存模式文档

如果失效不适合您的数据访问,请查看其他缓存模式(如复制/分布式)。

于 2022-01-19T10:00:33.927 回答