Hibernate二级缓存的哪种解决方案

Hibernate二级缓存的哪种解决方案,hibernate,caching,jpa,orm,hibernate-mapping,Hibernate,Caching,Jpa,Orm,Hibernate Mapping,我们正在开发的一个项目中使用Hibernate和JPA。目前在Wildfly和future Possibility上运行的是商业版,具体取决于需要 Hibernate中列出了一些二级缓存的替代方案。还有其他解决方案,例如。在众多备选方案中,JBoss似乎正式支持 正如许多项目中的情况一样,我们有一些几乎不会改变的表,如城市列表、项目可能具有的状态等。因此,我们决定对此类情况使用二级缓存 你能在这种情况下分享你的专业知识吗?这是一个好的用例吗?有没有更好的方法来保存这些数据?您如何处理很少或从未

我们正在开发的一个项目中使用Hibernate和JPA。目前在Wildfly和future Possibility上运行的是商业版,具体取决于需要

Hibernate中列出了一些二级缓存的替代方案。还有其他解决方案,例如。在众多备选方案中,JBoss似乎正式支持

正如许多项目中的情况一样,我们有一些几乎不会改变的表,如城市列表、项目可能具有的状态等。因此,我们决定对此类情况使用二级缓存

  • 你能在这种情况下分享你的专业知识吗?这是一个好的用例吗?有没有更好的方法来保存这些数据?您如何处理很少或从未更改的数据
  • 您过去和/或目前使用的是哪一个提供程序作为二级缓存?为什么?您选择的解决方案的优缺点是什么
  • 第二级缓存是关系数据缓存,而不是全面的对象缓存解决方案。所以保存的只是基本的实体属性和外键。对于实体关联,*-To-One可能保存在不同的缓存区域中,而*-To-Many关系也需要启用查询缓存

    我认为,当您的实体实际不时发生变化时,二级缓存更有用。当实体被确定为脏时,二级缓存条目无效

  • 但如果您很少更改数据,那么最好使用实际的对象缓存。对象缓存将存储整个对象关系树,如果您主要对实体进行操作,而不是自由样式连接投影,那么它将是一个更好的选择

    因此,如果工作流围绕具有层次结构的实体,则对象缓存更合适

  • 如果您的应用程序实际上不使用实体,而是使用各种数据连接投影,那么您应该添加DB索引,并确保有足够的RAM供DB服务器从内存中提供数据,而不影响磁盘

  • 解决方案:


    我建议您使用,这是一种高性能内存数据网格。HazelCast允许您将其集成为二级缓存,或者如果需要,可以保存整个对象图。只需遵循他们的文档,了解如何将其集成到当前的应用程序中。

    我使用ehcache存储和缓存地理数据。使用起来很方便。看看他们的网站。

    Hibernate二级缓存最适合于很少或从未更改的数据。但是,由于hibernate提供了由多个缓存解决方案实现的通用缓存提供程序,它限制了缓存解决方案提供的功能的可用性


    作为一种解决方案,我建议您使用hibernate二级缓存,因为除了基本缓存功能和过期时间等,它还提供数据库依赖性,即如果数据库中的相应记录发生更改,缓存中的数据将自动被缓存失效。您可以在此处查看更多详细信息:

    谢谢您的输入。你能详细说明我如何使用一个完整的对象缓存解决方案,而不是Hibernate的二级缓存,以及我将如何集成它吗?另外,如果您对二级缓存的特定内存解决方案有任何建议,我很想听到它。该项目已被放弃,我正在本页上寻找替代方案:)