2014-02-09 46 views
0

我是相當新的緩存和想問一個簡單的問題智能驅逐:二級緩存 - 對相關實體

可以想象我有下面的類實體:

@Entity 
public class Player { 

    @OneToOne 
    private Secret secret; 

} 

現在,讓我們假設我緩存兩個實體(祕密和玩家)。 現在,可以說我這樣做:

player.getSecret().setValue("no secrets"); // lets say this secret id == 2 
playerRepository.save(player); 

是否二級緩存足夠聰明地趕所謂的「祕密」的高速緩存,其中的條目是ID爲== 2?

第二級緩存是否有我應該知道的某種限制?它可以插入,而無需更改我的Web應用程序什麼或永遠?

+0

是的。你爲什麼不嘗試它? –

+0

我編輯了我的帖子,我試圖以更普遍的方式詢問第二級緩存的缺陷 – Urbanleg

+1

第二級緩存幾乎是透明的。我所知道的唯一缺陷是,如果其他進程更新數據庫,緩存不會意識到它(顯然),並且一些聯接提取並不總是得到尊重(除非該錯誤已被修復) )。 –

回答

0

在這種情況下,它會很好地工作,如果您使用正確的緩存併發策略,它將確定對象何時自動失效。

關於有關陷阱的問題,這些都是一些事情建立緩存時要注意,這可能是令人驚訝你第一次看到他們:

  • 默認只有憑身份證加載實體緩存,如果你想緩存查詢結果,你也需要添加查詢緩存。

  • 如果你希望緩存一對多你需要獨立註釋的關聯,因爲默認情況下關聯的集合都不會緩存

見本博客文章與這兩個緩存細節:Truly Understanding the Second-Level and Query Caches

+0

由查詢加載的實體也被緩存,但只有通過ID找到它們時纔會觸發緩存。 –