共享 nHibernate 和 hibernate 二级缓存
Posted
技术标签:
【中文标题】共享 nHibernate 和 hibernate 二级缓存【英文标题】:Sharing nHibernate and hibernate 2nd level cache 【发布时间】:2010-07-13 16:26:47 【问题描述】:是否可以在休眠和休眠解决方案之间共享二级缓存?我有一个环境,其中有运行 .net 的服务器和运行 java 的服务器都访问同一个数据库。
他们访问的数据有一些重叠,因此共享二级缓存是可取的。有可能吗?
如果这不可能,其他人提出了哪些解决方案?
【问题讨论】:
【参考方案1】:他们访问的数据有一些重叠,因此共享二级缓存是可取的。有可能吗?
这需要(这很可能过于简单化了):
-
能够从 Java 和 .Net 访问缓存。
为 (N)Hibernate 提供缓存提供程序实现。
能够以与两种语言兼容的格式读取/写入数据(或者没有必要互化缓存)。
这听起来可行,但是:
我不知道现有的即用型解决方案可以实现这一点(我的第一个想法是 Memcache,但 AFAIK Memcache 存储数据的序列化版本,因此这不符合最重要的要求 #3 )。 我想知道是否使用语言中性格式来存储数据不会产生太多开销(并且以某种方式破坏了使用缓存的目的)。如果这不可能,其他人提出了哪些解决方案?
我从来没有这样做过,但是如果我们谈论的是读写缓存,并且如果您使用两个单独的缓存,您将不得不从 .Net 端使给定的 Java 缓存区域无效,反之亦然。您必须编写代码来处理它。
【讨论】:
【参考方案2】:正如 Pascal 所说,共享第二个缓存在技术上是不可能的。
但是,您可以从不同的角度考虑这一点。
两个应用程序不太可能读取和写入相同的数据。因此,您可以实现缓存失效服务(使用您选择的通信堆栈),而不是共享缓存。
例子:
应用程序 A 主要读取Customer
数据并写入 Invoice
数据
应用程序 B 主要读取 Invoice
数据并写入 Customer
数据
因此,应用程序 A 缓存 Customer
数据,应用程序 B 缓存 Invoice
数据
例如,当应用程序 A 修改发票时,它会向应用程序 B 发送一条消息,并告诉它从缓存中删除发票。
您还可以逐出整个实体类型、集合和区域。
【讨论】:
以上是关于共享 nHibernate 和 hibernate 二级缓存的主要内容,如果未能解决你的问题,请参考以下文章
NHibernate 是不是与 Hibernate 互操作?如果没有,是不是有适用于 Java 和 .NET 的框架?
相当于NHibernate中Hibernate的@embeddable/EF的ComplexTypeConfiguration?