【发布时间】:2009-06-26 09:38:54
【问题描述】:
我经常需要为一些不经常更改的参考数据实施 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 或类似的处理它? 我缺少一个共同的模式吗? 显然有很多方法可以实现这一点,但我从未找到一种简单且可维护的模式。
提前致谢!
【问题讨论】:
-
感谢大家的精彩回答。每个人都添加了一些东西。
标签: java caching concurrency dao