使用ehcache进行多层缓存

时间:2012-08-19 18:00:43

标签: java hibernate caching dao ehcache

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

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

请让我知道你的意见!

1 个答案:

答案 0 :(得分:1)

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

所以先验,我不会说它不起作用。有可能你可以跳过整个ORM层。如果你有一些分析(我喜欢perf4j)你至少可以优化从你的DAO获得昂贵的“热”对象。如果您使用的是Spring Framework,则可以通过应用例如您的方法的@Cacheable注释。如果可能,请使用(近)实时数据和请求进行性能测试。

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