我经常需要为一些不经常更改的参考数据实现 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 或类似的处理它?我缺少一个共同的模式吗?显然有很多方法可以实现这一点,但我从未找到一种简单且可维护的模式。
提前致谢!