共享nHibernate和hibernate二级缓存

时间:2010-07-13 16:26:48

标签: java .net nhibernate hibernate orm

是否可以在hibernate和nhibernate解决方案之间共享二级缓存?我有一个环境,其中运行.net的服务器和运行java的服务器都访问同一个数据库。

他们访问的数据存在一些重叠,因此需要共享第二级缓存。有可能吗?

如果无法做到这一点,其他人提出了哪些解决方案?

2 个答案:

答案 0 :(得分:3)

  

他们访问的数据存在一些重叠,因此需要共享二级缓存。有可能吗?

这将需要(这很可能过于简化):

  1. 能够从Java和.Net访问缓存。
  2. 为(N)Hibernate提供缓存提供程序。
  3. 能够以与两种语言兼容的格式读取/写入数据(或者没有必要共享缓存)。
  4. 这听起来可行但是:

    • 我不知道现有的即用型解决方案实现了这个(我的第一个想法是Memcache,但AFAIK Memcache存储了数据的序列化版本,所以这不符合要求#3,这是最重要的)。
    • 我想知道使用语言中性格式来存储数据不会产生太多开销(并以某种方式破坏了使用缓存的目的)。
      

    如果无法做到这一点,其他人提出了哪些解决方案?

    我从来没有这样做过,但如果我们谈论的是读写缓存,并且如果你使用两个独立的缓存,你将不得不从.Net方面反过来使给定的Java缓存区域无效。你必须编写代码来处理它。

答案 1 :(得分:1)

正如Pascal所说,从技术上讲,共享第二个缓存是不可能的。

但是,你可以从不同的角度思考这个问题。

两个应用程序不太可能读取和写入相同的数据。因此,您可以实现的是缓存失效服务(使用您选择的通信堆栈),而不是共享缓存。

示例:

  • 应用程序A主要读取Customer数据并写入Invoice数据
  • 应用B主要读取Invoice数据并写入Customer数据
  • 因此,应用程序A缓存Customer数据和应用程序B缓存Invoice数据

例如,当应用程序A修改发票时,它会向应用程序B发送一条消息,告诉它从缓存中逐出发票。

您还可以逐出整个实体类型,集合和区域。