java - 使用 ehcache 进行多层缓存

标签 java hibernate caching dao ehcache

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

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

请务必让我知道您的意见!

最佳答案

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

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

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

关于java - 使用 ehcache 进行多层缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12028702/

相关文章:

c# - Windows Phone 的数据缓存框架?

java - 这是使用软引用的正确方法吗

java - Android升级应用程序版本时资源会发生什么变化

java - 通过引用传递 Error 对象而不是从方法抛出异常是一个好主意吗?

hibernate - 我的 Grails 3.3.8 应用程序中 SpringSecurityService 中的 MissingPropertyException

java - 如何创建基于注释的 Hibernate 映射?

java - 在 Spring Cache 中使用多个缓存实现

java - 向类添加字段导致 "<constructor> does not define an index 2"异常

java - 如何从数组中的 search() 方法返回单个打印语句?

java - 查询必须以 select 或 from : update 开头