2014-11-08 53 views
1

我正在開發一個Spring應用程序,該應用程序擁有數百個用戶,但每個單獨用戶都有100至100萬條數據作爲響應發送。因此,表現對我們來說是一個大問題。我們利用Java,JSP,jQuery,HTML和CSS。對於我正在處理的這一點,我正在建立一個通知系統。例如,如果用戶的某個項目已經過期,那麼我們會向用戶發送通知。然而,問題是:我應該如何在Spring中實現緩存對象/系統?

  • 我使用jQuery/AJAX輪詢服務器每分鐘
  • 每個查詢是非常昂貴的,因爲我們對成千上萬的數據100S搜索數據庫,每分鐘爲每個用戶。而且,有數百個用戶。
  • 我們沒有檢查上次修改時間,我們正在檢查此到期日期字段是否在當前時間之前。

我現在的想法是使用一個線程連續檢查數據庫是否有新更新的項目,如果有新項目我們更新緩存對象的表示。用戶將從緩存中檢索數據。

我應該如何在Spring中實現這個功能?我應該使用哪些數據結構?我應該使用什麼線程和緩存對象?我應該爲此使用WeakHashMap嗎?

注:我們的應用程序不支持註釋驅動的mvc。

回答

2

Spring在3.x RELEASE中引入了Cache的抽象。你可以在官方的Spring文檔中看到它(由於某種原因,這個網站已經停止了)),或者在這個帖子中。

http://java.dzone.com/articles/spring-cache-abstraction-0

有了這種抽象,所有你需要做的,以使高速緩存是一些註釋添加到您的服務,如

要添加值到緩存

@Cacheable("customers") 
public Customer findCustomer(long customerId) {...} 

要刪除值給高速緩存

@CacheEvict(value="customer", allEntries = true) 
public void removeAllCustomers(long customerId) {...} 

並啓用cachea彈簧配置。春天魔術AOP照顧其餘的。 作爲Spring的一切,您可以使用任何您想要的實現,並且許多實現都是開箱即用的。而你並不需要改變的代碼配發對於這一點,只需添加註釋,根據需要:)

除了春季的原生支持,有番石榴緩存

https://code.google.com/p/guava-libraries/wiki/CachesExplained

你可以選擇你想要什麼,並通過例如指定緩存鍵生命超時來實現您的要求,所以它將在特定時間後從緩存中移除,並在下次調用時重新計算。

+0

是的,基本上這個人說什麼:)你的查詢是否需要總是返回最新的東西?我想不是因爲它最終會被緩存。緩存可能與實時數據有什麼不同? – 2014-11-09 20:28:39

+0

@mavarazy - 對於上面的兩個方法簽名,這些方法的類或接口名稱是什麼?它是一個接口類,它擴展了JPARepository類還是您定義的單獨服務接口?在此先感謝 – emeraldjava 2017-03-10 09:32:46

+0

@emeraldjava它應該在實現和接口上工作,這些註釋是繼承,所以它應該沒問題。 – mavarazy 2017-03-10 09:36:51

相關問題