2010-07-13 108 views
1

是否有可能在休眠和nhibernate解決方案之間共享二級緩存?我有一個運行.net的服務器和運行java的服務器都可以訪問同一個數據庫的環境。共享nHibernate和休眠二級緩存

他們訪問的數據有一些重疊,所以共享第二級緩存將是可取的。可能嗎?

如果這是不可能的,那麼其他解決方案有哪些呢?

回答

3

他們訪問的數據有一些重疊,所以共享第二級緩存將是可取的。可能嗎?

這將需要(這是很可能簡單化):

  1. 能夠從Java和.NET訪問緩存。
  2. 具有(N)Hibernate的緩存提供者實現。
  3. 能夠以兼容兩種語言的格式讀取/寫入數據(或者沒有使緩存相互關聯)。

這聽起來是可行的,但是:

  • 我不知道實現這個(我的第一個想法是內存緩存,但是據我所知Memcache中存儲數據的序列化版本,因此現有的現成使用的解決方案的這不符合最重要的要求#3)。
  • 我不知道如果使用語言中性格式來存儲數據不會產生太多的開銷(並以某種方式擊敗使用緩存的目的)。

如果這是不可能的,那麼其他解決方案有哪些呢?

我從來沒有這樣做過,但如果我們討論的是讀寫緩存,並且如果您使用兩個單獨的緩存,則必須使.Net端的給定Java緩存區無效,反之亦然。你必須編寫代碼來處理它。

1

正如Pascal所說,共享第二緩存在技術上是不可能的。

但是,您可以從不同的角度思考這個問題。

這兩個應用程序讀取和寫入是不可能的相同的數據。因此,您可以使用緩存失效服務(使用您選擇的通信堆棧)來代替共享緩存。

實施例:

  • 應用程序A大多讀取Customer數據和寫入Invoice數據
  • 應用B大多讀取Invoice數據和寫入Customer數據
  • 因此,應用程序A緩存Customer數據和應用程序B的緩存Invoice數據

Whe例如,應用程序A修改發票,它將消息發送給應用程序B並通知它從高速緩存中清除發票。

您也可以驅逐整個實體類型,集合和區域。