hazelcast 使用_使用HazelCast进行Hibernate缓存:JPA缓存基础知识
hazelcast 使用
HazelCast的最大功能之一就是對Hibernate第二級緩存的支持 。
JPA具有兩個級別的緩存。
一級緩存在事務期間緩存對象的狀態。 通過兩次查詢相同的對象,您必須獲得第一次獲取的對象。
但是,在包含您檢索并訪問數據庫的復雜查詢的情況下,結果可能會不同步,因為它們不會反映您在事務處理期間應用于內存中對象的更改。 但是,您可以使用flush()解決此問題。 啟動JPA會話后,其第一級緩存將限制為該會話,它將不會影響其他會話。 一級緩存是JPA的一部分
與第一級緩存相反,第二級緩存與會話工廠關聯,因此第二級緩存在會話之間共享。 常用數據可以存儲在內存中并可以更快地檢索。
啟用二級緩存后,Hibernate將緩存在Hibernate區域中檢索到的實體。 為此,您必須將實體設置為可緩存。 在幕后,駐留在實體中的信息以脫水格式緩存。
Hazelcast可以與兩種形式的體系結構中的二級緩存一起使用。
客戶端服務器或僅群集的體系結構。
首先,我們將研究僅集群體系結構。 Hazelcast為每個Hibernate緩存區域創建一個單獨的分布式映射,因此是一個實體。 您可以通過Hazelcast映射配置輕松配置這些區域。該區域的名稱具有相應的hazelcast映射。 例如,我們的實體之一稱為用戶,完整的包路徑為“ com.gkatzioura.User”,那么我們的榛樹廣播將具有名稱“ com.gkatzioura.User”。 假設此地圖分布在所有hazelcast節點上,則從一個節點檢索到實體后,緩存的信息將與其他hazelcast節點共享。 一旦實體在節點中得到更新,則緩存的信息將在其他節點中失效。
Hibernate還為我們提供了查詢緩存。 查詢緩存是緩存查詢結果的緩存。 例如,在jpql查詢的情況下
SELECT usr.username,usr.firstname FROM User usr緩存的結果將是一個具有由查詢和參數組成的鍵的映射
以及檢索結果的值。 在先前的緩存中,檢索到的數據是原始值,它們按原樣存儲。
但是,在某些情況下查詢可能會檢索實體。
例如
在這種情況下,不是存儲所有檢索到的信息,而是檢索實體并將其緩存在第二級緩存中,而查詢緩存具有使用查詢及其參數作為鍵并將實體id作為值的條目。
一旦再次發出相同的查詢,查詢緩存將獲取ID,并將在第二級緩存中查找對應的實體。 如果第二級高速緩存中不存在實體,則發出查詢以獲取丟失的實體。
當涉及二級緩存和查詢緩存的配置時,我們需要注意二級緩存和查詢緩存的逐出機制。 在將ID高速緩存在查詢高速緩存中的情況下,您可能會感到迷惑,但是從第二級高速緩存中逐出了它們對應的實體。 在這種情況下,性能會受到影響,因為Hibernate將為每個丟失的實體發出查詢。
Hazelcast支持二級緩存,但是它對節點而言是本地的,并且從未在Hazelcast群集中分布。
盡管從查詢中獲取的結果仍保留在特定節點上,但應從用作第二級緩存的分布式映射中檢索從緩存的查詢指定的實體。
到目前為止,這是我們需要的理論。 在下一個博客中,我們執行一些spring數據jpa代碼和一些hazelcast配置。
翻譯自: https://www.javacodegeeks.com/2017/02/hibernate-caching-hazelcast-jpa-caching-basics.html
hazelcast 使用
總結
以上是生活随笔為你收集整理的hazelcast 使用_使用HazelCast进行Hibernate缓存:JPA缓存基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三国电脑版英雄联盟(三国英雄联盟下载)
- 下一篇: 电脑计算器快捷键是什么意思(电脑上的计算