作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我经常需要为一些不经常更改的引用数据实现 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 或类似的东西来处理它?我是否缺少一个常见的模式?显然有很多方法可以实现这一点,但我从未找到一种简单且可维护的模式。
提前致谢!
最佳答案
最简单、安全的方法是包含 ehcache library在您的项目中并使用它来设置缓存。这些人已经解决了您可能遇到的所有问题,并且他们以尽可能快的速度构建了该库。
关于java - 如何以线程安全的方式在 DAO 中缓存信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1048239/
我是一名优秀的程序员,十分优秀!