簡體   English   中英

Java Web應用程序的二級緩存及其替代品

[英]Second level cache for java web app and its alternatives

在Web應用程序的轉換之間,我使用Session對象保存對象。我聽說有一個名為memcached的程序,但網站上沒有該程序的編譯版本,此外,有人認為它有真正的缺點。 現在我想問你。 不同方法的替代方案,利弊是什么? 是否為系統管理員安裝了memcached painpul? 從系統管理員的角度來看,將其嵌入到現有的基礎架構中很難嗎?

使用數據庫保存Web應用轉換之間的臨時數據該怎么辦? 這是正常的做法嗎?

使用數據庫保存Web應用轉換之間的臨時數據該怎么辦? 這是正常的做法嗎?

數據庫確實已經有一個緩存。 設計良好的應用程序應嘗試利用它來減少磁盤IO

數據庫緩存在數據級別工作。 這就是為什么其他緩存機制可用於解決不同級別的原因。 在Java級別,您可以使用hibernate的第二級緩存 ,它可以緩存實體和查詢結果。 這可以顯着減少應用之間的網絡IO 服務器和數據庫。

然后,您可能需要解決水平可伸縮性 ,即添加服務器來管理負載。 在這種情況下,需要在節點之間分配 2級緩存。 它存在(請參閱JBoss緩存),但是管理起來可能會有些復雜。

如果分布式緩存具有基於鍵/值的更簡單方案,則它們傾向於更好地工作。 這就是memcached ,但還有其他類似的解決方案。 分布式緩存的最大問題是過時條目的失效 -這本身可能會成為性能瓶頸。

不要認為您可以按原樣使用分布式緩存來消除性能問題。 設計可擴展的分布式體系結構需要經驗,並且總是要在優化與不優化之間進行權衡。

回到您的問題:對於常規應用程序 ,恕我直言,不需要分布式緩存。 體面的磁盤IO和網絡IO通常會導致體面的性能。

編輯

對於非持久性對象,您有幾種選擇:

  • HttpSession 對象需要實現Serializable 會話的確切管理方式取決於容器。 在群集中,會話通常被復制兩次,因此,如果一個節點崩潰,您仍然擁有一個副本。 然后存在會話親緣關系,以將請求路由到內存中具有該會話的服務器。
  • 分布式緩存。 memcached這樣的系統可能確實有意義,但是我不知道細節。
  • 數據庫。 您當然可以在BLOB轉儲數據庫中的任何Serializable對象。 如果Web服務器不如數據庫服務器可靠,則可以選擇。

再次,對於常規應用程序 ,我將嘗試使用HttpSession

Ehcache怎么樣? 這是一種易於使用的純Java解決方案,可以立即插入Hibernate。 據我記得,它受容器支持。

根據我的經驗,這是很輕松的。

暫無
暫無

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

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