簡體   English   中英

使用二級緩存時最好的查詢策略和實體配置是什么

[英]What is the best query strategy and entities configuration when using a second level cache

激活二級緩存時,我的實體的最佳查詢策略和最佳配置是什么。

例如,我有兩個具有這些關系的實體用戶和組:

一個用戶對多組:用戶擁有的組。 這里是用戶 class 中的組集合和組 class 中的用戶屬性(所有者)。

具有屬性(狀態、日期等)的多用戶對多組:組的成員。 由於附加的屬性,有一個特定的 class 到 map 中間表稱為 UserGroup。 用戶 class 和組 class 中有一個用戶組的 oneToMany 集合。

相關屬性或 collections 配置為在惰性模式下檢索。 所有實體 class 和 collections 都是可緩存的。

到目前為止,如果我希望與他們的成員一起檢索用戶的組,我正在發出這種類型的請求:

select g from Group g left join fetch UserGroup ug left join fetch ug.user u where g.group.owner = :idOwner

現在有了二級緩存作為key-value存儲,從用戶的id中獲取用戶,然后讓hibernate在Lazy模式下恢復組和成員,最終在二級保存數據不是更簡單有效嗎?一級緩存? 下一個查詢將使用緩存,那么使用連接有什么好處呢? 此外,我不必配置任何要緩存的優化查詢。

謝謝。

我不能真正評論連接的成本(那里的 Hibernate/JPA 專家可能會在這方面有更好的答案),但我可以評論緩存本身。

對緩存重要的是這些實體和 collections 的更新頻率。 如果您有一個跨越多個實體和 collections 的查詢,那么當其中一個實體或 collections 被修改時,即使以最小的方式修改,查詢也會失效。 所以,我強烈推薦緩存實體和 collections 主要被讀取。 順便說一句,這些失效是按類型跟蹤的,因此即使添加新實體(不是查詢結果集的一部分)也會使查詢失效。

即使不使用查詢,如果只是檢索實體和集合引用,當集合中的實體被修改或集合以某種方式被修改(添加/刪除實體)時,集合也會失效。

我傾向於有選擇地啟用緩存,而不是僅僅獲取所有實體和 collections 並立即使它們可緩存。 除了失效,您還需要考慮緩存占用 memory 和資源。

暫無
暫無

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

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