簡體   English   中英

如何維護Java / J2EE Web應用程序的緩存?

[英]How to maintain cache for Java/J2EE web application?

每次我需要連接到服務時,我正在開發一個應用程序。 我想將每個搜索保存在緩存中以供進一步使用。 有沒有選擇呢?

我聽說過Memcached。 但我沒有找到任何正確的網站供參考。 我們可以在Hibernate中使用Ehcache嗎?

Java中有各種緩存解決方案。 其中包括Infinispan,EhCache和OSCache。

所有這些都可以單獨使用,例如,它們都不是專門用作Hibernate緩存提供程序。

緩存之間的功能略有不同。 例如,Infinispan為事務提供了一流的支持(意味着如果插入項目的事務是回滾,則不會將項目插入到緩存中)。 EhCache非常支持真正的大型進程內但是用於緩存的堆外存儲。

OSCache帶有非常方便的標簽來緩存JSP頁面上的內容(但這不適用於例如JSF)。

他們中的大多數能夠執行典型的溢出到磁盤的事情,並有一些機制來使陳舊的條目無效。 例如,Infinispan具有逐出策略,並且那些真正從緩存中刪除陳舊條目(節省內存)。 OSCache從來沒有真正從緩存中刪除條目,但將其標記為陳舊。 訪問該條目時,將提醒調用者刷新該條目(以前是一個例外,但現在可能不同)。

這些東西通常是將“緩存”與簡單的並發hashmap區分開來的。 如果您的要求適中,請不要忽視這個簡單的解決方案。 緩存可能有點難以配置,應用程序范圍內的並發映射也可能就足夠了。

您可以非常輕松地使用OSCache的jsp標記基於每個用戶(即會話)緩存數據。 例如,想象一個Web應用程序,其中特定用戶“工作列表”沒有更改,然后始終提供緩存(即已生成的)jsp,直到列表發生更改(通過應用程序中的其他位置的刷新緩存調用)

在jsp層上包裝代碼,緩存標記如下:

<cache:cache key="foobar" scope="session">
  <%= myBean.getData() %>
</cache:cache>

表示每個會話只調用一次java代碼myBean.getData()(除非另外刷新)

暫無
暫無

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

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