2

我正在做的一个项目,我们决定在我们的基于 Web 的应用程序中实现 ehcache 用于缓存目的。在大多数情况下,我们会将它用于 Hibernate 缓存(主表)和查询缓存。

但是,我们也在考虑在 DAO 层进行方法缓存。老实说,我对此有点怀疑。这可能意味着,我们在 DAO 层有一个方法,该方法反过来触发一个查询(已经缓存),那么缓存该方法是否有意义?我的感觉是,要么我们应该缓存该方法,要么缓存该方法最终触发的查询。

请让我知道您的意见!

4

1 回答 1

1

根据我的经验,这在很大程度上取决于您的应用程序(以及数据的类型/结构)。我目前正在处理的应用程序有 3 个内置缓存层(全部由 Ehcache 支持):一层作为 Hibernate 二级缓存,一层用于中间层的短期热对象,一层用于长期的胖值对象立面层。调整缓存(缓存查询参数、生命周期、大小等)以很好地相互补充。

所以先验,我不会说它不起作用。您可以跳过整个 ORM 层。如果你有一些配置文件(我喜欢perf4j),你至少可以优化从你的 DAO 中获取昂贵的“热”对象。如果您使用的是 Spring Framework,您可以通过将例如@Cacheable注释应用到您的方法来轻松地做到这一点。如果可能,使用(接近)实时数据和请求进行性能测试。

事实上,我认为使用 Hibernate 二级缓存是一件容易/懒惰的事情(可以说是一个好的第一步),但性能提升是有限的。通过一些更具体的缓存,您可以轻松获得数百或数千倍的速度,以加速应用程序的部分(希望是重要的部分),通常是在减少负载的情况下。

于 2012-08-20T11:56:46.410 回答