2013-03-09 32 views
0

這是我的previous question的後續行動。如何更新主要讀取的持久數據?

假設我有一個服務器應用程序,它使用了一些只讀文件。有時(例如一個小時)我們更新這個文件,應用程序開始使用更新後的數據。

如何實現它?我相信應用程序應定期檢查更新,並在更新可用時更新文件。一旦文件被更新,應用程序應該執行所有必要的初始化(例如,使內部緩存失效等),同時仍處理「舊」數據。初始化完成後,它將丟棄「舊」數據,並僅與「新」數據一起工作。

是否有意義?這個問題看起來很通用。是否有任何現成的Java基礎結構解決了這個問題?

回答

3

聽起來像緩存。兩個靈活的線程安全緩存實現是Guava's cache,EhCacheHazelcast。三者都將以線程安全方式過期並重新加載。 Hazelcast和EhCache可以通過網絡進行分發。番石榴不分佈,但更簡單。

如果您決定不想使用緩存,像單身人士那樣在內存對象中保存的其他常見用例是double checked locking。它的0123va使番石榴更加優雅。

我建議你使用帶緩存的不可變對象或@MarkoTopolnik建議volatile

1

你應該有一個代表所有的數據和服務從它衍生出來,從文件中讀取一個對象。保持對該對象的引用volatile,這將確保線程安全的發佈。