簡體   English   中英

當Hibernate已經存在並使用緩存時使用memcached

[英]Use of memcached when Hibernate already present and uses caching

我想知道,由於市場上存在具有緩存功能的休眠ORM,該功能可減少應用程序中的數據庫負載,因此Redis / Memcached等外部緩存系統的可用性可能很高,因為它們還提供了緩存機制。

由於我們的對象已經使用應用程序中的休眠進行了緩存,因此外部緩存系統的可用性是什么。 它們對應用程序性能有何幫助?

當休眠已將類對象保存在內存中時,還是應該將類對象也存儲在memcached / redis中,還是應該將memcached僅用於存儲通常不會更改的列表結果,而不是可用於從休眠緩存中獲取的對象?

Hibernate ORM提供了兩個緩存級別

- 一級緩存 :與每個會話對象相關聯的進程內緩存,限於會話級別,即每個會話都有自己的一級緩存。

-2級緩存 :需要配置的可插拔緩存。 它是會話工廠級緩存,即在多個會話之間共享。

諸如memcached / redis或Tayzgrid之類的緩存解決方案為hibernate提供了第二級緩存提供程序,可以在休眠應用程序中對其進行配置。 使用這種緩存提供程序,您可以將分布式緩存功能合並到休眠應用程序中,例如可以在多個會話之間以及使用同一數據庫的多個應用程序之間共享緩存。

請記住,當使用分布式緩存作為休眠二級緩存時,您所需要做的就是配置緩存提供程序並將要緩存的實體配置為可緩存的,休眠本身將利用該提供程序進行緩存。 例如,您可以將TayzGrid視為Hibernate二級緩存,以將Tayzgrid與Hibernate配置在一起。 同樣,您可以配置任何其他緩存解決方案。

盡管Hibernate Second Level Cache提供程序確實使您很容易將2級緩存集成到Java應用程序中,但是請記住,您將僅獲得緩存解決方案的部分功能。 但是,如果您通過少量編程直接對緩存解決方案進行API調用,則將獲得該解決方案提供的所有功能。 就像在Tayzgrid的情況下一樣,直接API調用將為您提供額外的功能,例如批量操作,組和標簽,sql(例如搜索和后寫)等。

這取決於應用程序的類型。

在現代的Web應用程序中,有很多緩存資源:

  • 優化圖像
  • 從模板系統渲染的HTML片段
  • 來自多個數據庫對象的組合對象
  • 選擇不經常更改的列表(國家,租戶,客戶地址)
  • 完整的搜索結果

如果您擁有“大部分視圖”類型的應用程序或訪問量較高的網站,明智的做法是在hibernate頂部設置一個緩存層。 Hibernate旨在與數據庫保持事務一致性,這會對性能產生重大影響(例如,通過復制對象)。 對於“大部分視圖”,您不需要很強的一致性,並且可以緩存中間結果,例如HTML片段。

使用分布式緩存作為休眠二級緩存,將花費大量資源,甚至可能使您變慢。 您應該對此進行仔細評估。 如果您有大量數據,並且數據庫訪問的成本很高,也許值得。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM