我經常需要爲一些不經常更改的參考數據實現DAO。我有時在DAO的集合字段中緩存這個 - 所以它只加載一次,並在需要時明確更新。如何以線程安全的方式緩存DAO中的信息
但是,這帶來了許多併發問題 - 如果另一個線程在加載或更新時嘗試訪問數據會怎麼樣。
很明顯,這可以通過使數據的getter和setter同步來處理 - 但對於大型Web應用程序來說,這是相當的開銷。
我已經包含了一個我需要作爲稻草人所需的一個微不足道的例子。請建議替代方法來實現這一點。
public class LocationDAOImpl implements LocationDAO {
private List<Location> locations = null;
public List<Location> getAllLocations() {
if(locations == null) {
loadAllLocations();
}
return locations;
}
有關進一步的信息,我使用Hibernate和Spring,但這個要求將適用於許多技術。
一些進一步的想法:
如果不是這種代碼在所有處理 - 而不是讓ehcache的或類似的處理呢? 有沒有這種我失蹤的常見模式? 顯然有很多方法可以實現,但我從來沒有找到簡單和可維護的模式。
在此先感謝!
感謝所有的偉大的答案。每個添加的東西。 – Pablojim 2009-06-28 11:40:44