我目前正在使用 Spring MVC4 和 hibernate 4 开发应用程序。我已经实现了 hibernate二级缓存, 以提高性能。如果我使用
Redis ,它是内存中的数据结构存储,用作数据库,缓存等,性能会提高,但是会发生巨大变化吗?
如果您缓存什么是要缓存的东西,并避免缓存根本不应该缓存的数据,则可能会出现巨大的差异。情人眼中的美丽就像表演一样。使用hibernateAS二级缓存提供程序时,应牢记以下几个方面:
无需自定义序列化-占用大量内存
如果您使用二级缓存,则将无法使用快速序列化框架(例如Kryo),并且必须坚持使用糟糕的Java可序列化框架。
在此之上,对于每个实体类型,您将有一个单独的区域,并且在每个区域内,您将为每个实体的每个键都有一个条目。就存储效率而言,这是低效的。
缺乏存储和分发丰富对象的能力
大多数现代缓存还具有计算网格功能,将对象分成许多小块会降低您在保证数据共置的情况下执行分布式任务的能力。这在某种程度上取决于Grid提供程序,但是对于许多提供程序来说是一个限制。
次优性能
取决于您需要多少性能以及使用hibernate二级缓存的类型的应用程序是好是坏。就即插即用而言,这是件好事。。。。。。。。。。。。。。。。。。。。。设计丰富的模型还意味着更多的前期工作和更多的OOP。
高速缓存自身
上 有限的查询功能
取决于高速缓存提供程序,但是某些提供程序确实不能很好地执行带Where子句而不是ID的JOIN。例如,如果您尝试在Hazelcast上建立查询并在内存索引中进行查询,您将明白我的意思。
问题内容: 我正在使用Spring + JPA + Hibernate。我正在尝试启用Hibernate的二级缓存。在我的春天,我有: 运行时出现错误: 所以有人抱怨我没有启用二级缓存。我试图通过添加到我的启用它: 但是仍然没有喜悦。我还尝试将其添加到ehcache.xml中: 但这仍然行不通。将更改为也无济于事: 我的实体类被注释为使用缓存 那么,如何启用二级缓存? 编辑: 这是在bean下:
问题内容: 一级缓存与hibernate中的查询缓存是否不同?我看过有关第一级和查询缓存的文章,所以我很困惑。 问题答案: 默认情况下,第一级缓存处于启用状态,并且基于每个会话。默认情况下,查询缓存未启用,它在多个会话之间共享,应始终与二级缓存一起使用。 要启用查询缓存,应使用以下属性:
问题内容: 我无法理解hibernate何时进入二级缓存以及何时使缓存失效。 这是我目前所了解的: 第二级缓存在会话之间存储实体,作用域为SessionFactory 您必须告诉要缓存的实体,默认情况下不会缓存任何实体 查询缓存将查询结果存储在缓存中。 我不明白的是 hibernate何时会命中此缓存? 假设我已经设置了二级缓存,但没有设置查询缓存。我想缓存我的客户,其中有50000。我可以通过哪
问题内容: 在我的Spring驱动的应用程序中,我使用Hibernate(4.2.15.Final)和EhCache(2.6.9)作为第二级缓存,在标准的持久层中进行了设置。 一切正常。但是,将条目放入第二级缓存有时会花费一些时间。 我已经在一个显式文件中配置了域模型类的缓存(我没有配置默认缓存): 在持久性上下文启动时,我收到以下INFO消息记录: 以及执行期间的以下警告 AFAIK 必须调整放
问题内容: 我有问题,也许有人认为它很愚蠢。Hibernate快吗?我在系统中使用它,对数据库的查询非常多。并且性能变得警觉。和其他问题脱离当前背景。有什么更好的选择- 许多简单查询(使用单个表)还是较少一些查询的查询? 先进的坦克的Artem 问题答案: 首先,您可以做很多事情来加快Hibernate的速度。查阅这些高性能hibernate技巧文章,以全面了解可以采取哪些措施来加快数据访问层的速
问题内容: 我知道一个事实,它是 Hibernate 使用的一级缓存,一旦我们从中检索到一个实体,就会从而不是从DB中获取对具有 相同标识符 的 同一实体 的后续get调用,直到is Open 为止。 话虽如此,我对休眠如何将第一级缓存与数据库同步感到怀疑吗?考虑以下情形 所以我的问题是 由于是从一级缓存中提取的,因此有更新的值吗? 如果在会话打开时有人直接更新DB并修改User对象,那么是否与D