当前位置: 首页 > 知识库问答 >
问题:

Infinispan失效缓存在新密钥上失效

蓬弘
2023-03-14

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

<invalidation-cache name="opencell-tenant-cache">
    <transaction locking="OPTIMISTIC" mode="NONE"/>
</invalidation-cache>

根据infinispan留档,当node1上的缓存值发生变化时,InvalidateCommand从节点1发送到node2,使node2缓存中的键条目无效/删除。

我注意到的是,即使在一个新的键put上,InvalidateCommand也会被发送。

在我们的应用程序中,如果在缓存中找不到密钥,则会从数据库加载一个值并将其放入缓存中。由于两台服务器都处于活动状态,我得到了以下永无止境的场景:

请求节点1

在这种情况下,即使数据从未更改,我也会不断地使缓存无效。我希望在新的key put上不会发送无效命令。

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

谢啦

共有1个答案

阴高刚
2023-03-14

我希望在新密钥放置时不会发送无效命令。什么是新放置?

对节点2的请求

如果您配置ClusterLoader,节点2可以从节点2获取密钥。请参阅无效缓存模式文档。

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

 类似资料:
  • 看下这个段伪代码: local value = get_from_cache(key) if not value then value = query_db(sql) set_to_cache(value, timeout = 100) end return value 看上去没有问题,在单元测试情况下,也不会有异常。 但是,进行压力测试的时候,你会发现,每隔 100 秒,数据库的

  • 问题内容: Redis如何实现密钥过期?从这里我了解到Redis存储了密钥将过期的时间,但是这是如何实现的呢? 问题答案: 简而言之-每个Redis对象都有一个过期时间。除非您将对象设置为过期,否则该时间为“从不”。 现在,到期机制本身是半延迟的。延迟过期意味着您实际上不会在读取对象之前使它们过期。读取对象时,我们检查它的过期时间戳记,如果它是过去的,则不返回任何内容,并在到达该对象时删除该对象。

  • 我正在尝试在Android环境中学习rxjava。比方说,我有一个可观察的对象,它发出网络调用的结果。如果我理解正确的话,处理配置更改的一种常见方法是: > 将可观察对象存储在保留的片段/单例/应用程序对象中 将缓存操作符应用于可观察对象 在正确的生命周期处理程序中订阅/取消订阅 这样做,我们就不会失去可观察到的结果,一旦新配置发生,将重新观察到该结果。 现在,我的问题是: 有没有办法强制可观察对

  • 我正在使用8.5.0运行时服务器运行我的项目,在部署期间,我发现以下错误 这里是配置。引用密钥存储的xml文件。资源目录中的jks文件

  • 我有一个Spring应用程序,它使用MyBatis进行持久化。我使用ehcache是因为速度对于这个应用程序很重要。我已经设置并配置了MyBatis和Ehcache。我使用一个名为“mybatis”的单一缓存,因为否则为每个实体创建单独的缓存将是荒谬的。 这是我的电子缓存。xml。 这是我的mybatis映射器界面的一个示例。 因为我有一个共享缓存,所以我需要一种方法使我的密钥对域对象是唯一的。作

  • 执行密钥库时,以下代码每次都会失败,IOException为“无效密钥库格式”。load()方法。该文件已成功从.jar文件加载。在Windows 10 Pro上使用Java 1.8。Maven用于编译和组装jar文件,然后将war放在一起,并作为war文件部署到JBOSS服务器。我也尝试过使用getDefault()的.getInstance,但出现了相同的错误。 使用以下命令从自签名服务器证书