分布式 Infinispan 缓存作为 Hibernate L2 缓存问题
Posted
技术标签:
【中文标题】分布式 Infinispan 缓存作为 Hibernate L2 缓存问题【英文标题】:Distributed Infinispan Cache as Hibernate L2 Cache Issue 【发布时间】:2021-10-03 19:12:50 【问题描述】:我想创建一个应用程序,我将在其中使用 Hibernate L2 缓存来减少总是向数据库请求数据的不必要性。
在我的应用程序中,超过 80% 的时间是 READ 操作,不到 20% 的时间是创建/更新/删除操作。因此,我认为使用 Hibernate L2 Cache 将是有益的。但是,由于我们要横向扩展应用程序,我们希望使用 Infinispan 作为 Hibernate 的 L2 Cache。
但是有几个问题我们不确定。
-
如果我理解正确,Hibernate L2 Cache 应该通过更新缓存来工作,只要有新的创建/更新/删除操作,或者查询之前尚未查询。因此,在连接到同一个数据库的多台服务器设置上,由于存在网络 IO 问题,那么多个更新操作如何在这样的环境中工作?由于2个应用服务器可能同时更新数据库,每个都更新同一个实体到不同的数据,但是由于网络IO问题,Hibernate怎么知道这些数据应该被缓存和同步,而这些数据不应该呢?
【问题讨论】:
对于每个问题,答案是:这取决于您的意愿。如果您可以改进问题,说出您的期望,我可以尝试帮助您进行 Infinispan 配置。 【参考方案1】:这取决于您使用的是哪种缓存。我建议您在此处使用的失效缓存只会使过时的缓存条目失效。复制缓存会将更改复制到集群中的每个节点。 Hibernate 只是向缓存实现询问缓存条目,如果缓存返回,它将使用它并避免访问数据库。缓存条目是否过时或缓存查找涉及多少阻塞取决于缓存的事务配置。
【讨论】:
以上是关于分布式 Infinispan 缓存作为 Hibernate L2 缓存问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Wildfly 8.2 上重新部署后从 Infinispan 缓存读取时发生 ClassCastException
在 Keycloak 集群的 Infinispan 缓存中存储用户会话的确切用途是啥?
J2EE之wildfly 实践9 -- 使用infinispan 过期缓存