簡體   English   中英

如果我們有多個會話對象,一級緩存如何工作?

[英]how first level cache works, if we have multiple session objects?

我對一級緩存和二級緩存有疑問。

2級緩存

它與sessionFactory關聯。 假設我們有兩個會話session1session2,並且有一個table student 我們從session1調用get() ,然后它將命中數據庫並將對象存儲在session1和sessionFactory中。 如果我們從session2調用get() ,則sessionFacory對象將復制到session2。 如果將來我們調用get() ,它將不會訪問數據庫。 它將從會話對象(一級緩存)中獲取。

到目前為止,我很清楚。

之后,另一個名為session3的會話要更新同一條記錄,那么如果我們在session1session2上調用get() 會發生什么?

一級緩存

它與會話關聯。 如果我們有兩個會話session1session2 我們從session1調用get() ,它將命中數據庫並將對象存儲在session1中。 如果我們使用session2更新,如果下次從session1調用get()會發生什么?

我聽說二級緩存有一些缺點。 如果這是真的,那是什么?

您一次要問三個問題。

1.問題

我不確定你是什么意思

session3要更新相同的記錄

會議沒有自由意志。 如果他們只是想要些什么,就什么也不會發生。 但是,如果您使用的是第三次會議,以更新會話1已經被緩存的實體和工作階段他們將繼續存在緩存(現在已經過時)的版本。 如果使用session1session2更新同一實體,則更新將失敗,並出現樂觀鎖定異常。

不過,第二級緩存將使用session3存儲的新版本進行更新。

2.問題

這與第一種情況相同: session1現在有一個陳舊的對象,它將繼續使用。

3.問題(第二級緩存的缺點)

各種緩存具有相同的挑戰:

  1. 如果將內容放入緩存,但又不再需要它,那么您將浪費CPU時間將其放置在緩存中,而浪費了內存以將其保留在緩存中。

  2. 如果您查找高速緩存,但是找不到所需的內容,那是在浪費CPU時間來查找高速緩存。

  3. 如果在更改后將內容保留在緩存中,則將處理陳舊的數據。

暫無
暫無

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

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