![](/img/trans.png)
[英]How to remove entity with first level cache and JPA in one open session?
[英]how first level cache works, if we have multiple session objects?
我對一級緩存和二級緩存有疑問。
2級緩存
它與sessionFactory關聯。 假設我們有兩個會話session1和session2,並且有一個table student
。 我們從session1調用get()
,然后它將命中數據庫並將對象存儲在session1和sessionFactory中。 如果我們從session2調用get()
,則sessionFacory對象將復制到session2。 如果將來我們調用get()
,它將不會訪問數據庫。 它將從會話對象(一級緩存)中獲取。
到目前為止,我很清楚。
之后,另一個名為session3的會話要更新同一條記錄,那么如果我們在session1和session2上調用get()
。 會發生什么?
一級緩存
它與會話關聯。 如果我們有兩個會話session1和session2 。 我們從session1調用get()
,它將命中數據庫並將對象存儲在session1中。 如果我們使用session2更新,如果下次從session1調用get()
會發生什么?
我聽說二級緩存有一些缺點。 如果這是真的,那是什么?
您一次要問三個問題。
1.問題
我不確定你是什么意思
session3要更新相同的記錄
會議沒有自由意志。 如果他們只是想要些什么,就什么也不會發生。 但是,如果您使用的是第三次會議,以更新會話1已經被緩存的實體和工作階段他們將繼續存在緩存(現在已經過時)的版本。 如果使用session1或session2更新同一實體,則更新將失敗,並出現樂觀鎖定異常。
不過,第二級緩存將使用session3存儲的新版本進行更新。
2.問題
這與第一種情況相同: session1現在有一個陳舊的對象,它將繼續使用。
3.問題(第二級緩存的缺點)
各種緩存具有相同的挑戰:
如果將內容放入緩存,但又不再需要它,那么您將浪費CPU時間將其放置在緩存中,而浪費了內存以將其保留在緩存中。
如果您查找高速緩存,但是找不到所需的內容,那是在浪費CPU時間來查找高速緩存。
如果在更改后將內容保留在緩存中,則將處理陳舊的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.