我们有一个带有 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 上的密钥无效
,依此类推。
在这种情况下,我会不断地使缓存失效,即使数据从未更改过。我希望在新的密钥放置上不会发送无效命令。
否则失效缓存的实际用途是什么,如果在接收到失效命令后放置相同的键将再次触发失效。
谢谢