2012-12-13 58 views
0

我維護一個利用JCS在JVM中保存緩存的應用程序(JVM1)。當JVM啓動/重新啓動時,這些數據將首次從數據庫加載。JCS - 從數據庫動態更新緩存

但是,數據庫將從不同的JVM訪問(JVM2),並有助於將數據添加到數據庫。

爲了確保將這些額外的/新添加的記錄加載到緩存中,我們需要爲數據庫中的每個添加重新啓動JVM1

是否有一種方法可以在JVM1中刷新/加載緩存(僅用於新添加的記錄)定期(而不是頻繁的db輪詢)?

感謝, 再也克里希納

回答

0

你能不能簡單地擁有JVM1首先檢查在內存中緩存,然後,如果該項目不存在於內存中緩存,檢查數據庫緩存?

但是,如果您需要列出存在的某些特定類型的所有項目並且不想訪問數據庫。然後,爲了讓JVM1知道數據庫中有一個新項目,我想JVM2必須向JVM1發送一條網絡消息,告訴它數據庫中有新條目。或者2)可能有數據庫觸發器在插入新數據時觸發,並向JVM1發送網絡消息。 (但是讓數據庫的數據庫嚮應用服務器發送網絡消息感覺我覺得很奇怪。) - 我認爲這些方法看起來相當複雜。

您是否考慮過某種新項目ids表,記錄最近插入數據庫的項目的ID?它可以通過數據庫觸發器更新,或者在寫入數據庫時​​由JVM1和2更新。然後JVM1只需要每秒輪詢一次這個表就可以得到一個新的ID列表,然後它可以從數據庫中加載新的項目。

最後,你考慮過分佈式緩存嗎?因此,JVM1和2共享相同的緩存,並且JVM1和2在將項插入到數據庫時將項目寫入此緩存。 (這種方法有點類似於在JVM1和2之間發送網絡消息,但分佈式緩存系統會自己發送消息,所以你不需要編寫任何新代碼)

+0

感謝您的回答。實際上,我查看了觸發器部分,我們所要做的就是不應該進行任何數據庫交互,因爲它不會控制從JVM2到數據庫的命中數,因爲它與UI事務數(db更新)在JVM1上。但是,我們通過創建Java存儲過程和觸發器來嘗試一些不同的方式,以便此Java存儲過程將控制(添加/刪除條目)JVM2上的緩存。 –