我是Ehcache的新手,正在尋找如何做到這一點,但現在很確定這是否是正常用例。我正在研究一個不是傳統Web應用程序的應用程序,它的功能一次只能由少數人使用,用於從非常大的數據集中檢索數據,而不是每次對數據庫進行調用時想要使用緩存來緩存這個大表。但是,有可能將新條目添加到此表中,並且我需要將其反映在緩存中,但我不希望每次重新加載整個緩存都是相當大的。有關如何處理這些/更多資源的任何建議,我們感激不盡。Ehcache,Hibernate,在添加新條目時更新超大型表的緩存?
0
A
回答
1
您應該瞭解Hibernate query cache。簡而言之:它可以在二級緩存(L2
)之上工作並存儲查詢結果。 但是它只存儲查詢應該返回的記錄的id,而不是整個列表。這意味着你需要有L2工作和微調。
在您的方案中,假設您在表T
中有1M個記錄,並且平均返回1K的查詢。當您第一次運行此查詢就會錯失查詢緩存和:
- 運行SQL
- 取1K記錄
- 把所有的人都在L2
- 把1K IDS查詢緩存中
下一次執行查詢時,它會打到查詢緩存並查找L2的所有結果。當你修改表T
時,有趣的部分來了。 Hibernate會發現查詢緩存中的結果可能是陳舊的,它會使整個緩存失效,而不是L2。它基本上會重複1-4點,但只刷新查詢緩存(表格T
中的大多數實體已經在L2中)。
在某些情況下,它工作的很好,在其他情況下,它會在不可預測的時刻引入N + 1問題。這只是冰山一角,你應該非常小心,因爲這種機制非常脆弱,需要很好的理解。
相關問題
- 1. EhCache不更新緩存
- 2. 添加條目後表未更新
- 3. 添加數據庫條目時,緩存的內容是否會更新?
- 4. 更新超過25,000個條目的表
- 5. 在使用Spring/EHCache加載時刷新緩存
- 6. 在運行時Ehcache緩存大小
- 7. Hibernate + Ehcache更新中斷測試套件
- 8. 在Spring Boot初始保存後更新Hibernate存儲庫條目
- 9. Hibernate的二級緩存+的Ehcache問題
- 10. 在大型mysql表中添加新列
- 11. 在添加新條目後刷新dropdownlist
- 12. 在添加新條目時使用jpa/hibernate增加Postgresql中的值彈簧
- 13. Ehcache:從緩存中刪除條目存儲爲列表
- 14. Sharepoint 2010 - 更新大列表,處理非常緩慢和超時
- 15. 如何在添加新項目時更新Expandable列表視圖
- 16. Kohana 3更新/添加相關條目
- 17. 更新數據庫表更新緩存
- 18. 更新大表超時沒有錯誤
- 19. 如果在mysql表中不存在,添加一個新條目
- 20. Hibernate查詢緩存不返回新添加的實體
- 21. Hibernate和EhCache故障緩存集合
- 22. Spring Boot Hibernate Ehcache實體緩存實現
- 23. 在更新hibernate中的表時org.hibernate.hql.internal.ast.QuerySyntaxException
- 24. 將新條目添加到Access表
- 25. 如何使用Ehcache中的SimpleCachingPageFilter更新或無效緩存?
- 26. 向ListView添加新條目
- 27. 如何在數據庫中添加新條目時更新PyQt中的TableView?
- 28. 添加新條目(更改後綴?)時沒有全局超級知識錯誤
- 29. 節點,socket.io - 當新條目添加到新聞源時更新客戶端?
- 30. CakePHP:hasOne相關表在更新時保存多個條目
只是一個額外的評論:「Hibernate會發現查詢緩存中的結果可能是陳舊的,它會使整個緩存失效,但不會L2」。當應用程序遇到查詢使用的表(更新,插入,刪除數據)或不時(無論先發生什麼)時,Hibernate將使查詢緩存失效。因此,如果直接更改數據庫中的數據,Hibernate將不會知道它,並可能在認爲緩存仍然有效(即:缺失數據)的同時返回陳舊結果。 – jpkrohling 2011-03-04 10:13:05