hazelcast_使用HazelCast进行Hibernate缓存:JPA缓存基础知识

hazelcast

hazelcast

HazelCast的最大功能之一就是对Hibernate第二级缓存的支持

JPA具有两个级别的缓存。一级缓存在事务期间缓存对象的状态。 通过查询相同的对象两次,您必须获取第一次获取的对象。但是,在包含您检索并访问数据库的对象的复杂查询的情况下,结果可能会不同步,因为它们不会反映您在事务处理期间应用于内存中对象的更改。 但是,您可以使用flush()解决此问题。启动JPA会话后,其第一级缓存将限制为该会话,它将不会影响其他会话。一级缓存是JPA的一部分

与第一级高速缓存相反,第二级高速缓存与会话工厂关联,因此第二级高速缓存在会话之间共享。 常用数据可以存储在内存中并可以更快地检索。

启用第二级缓存后,Hibernate将在Hibernate区域中缓存检索到的实体。 为此,您必须将实体设置为可缓存。 在幕后,驻留在实体中的信息以 脱水格式缓存。

Hazelcast可以与两种形式的体系结构中的二级缓存一起使用。客户端服务器或仅群集的体系结构。首先,我们将研究仅集群体系结构。Hazelcast为每个Hibernate缓存区域创建一个单独的分布式映射,因此是一个实体。 您可以通过Hazelcast映射配置轻松配置这些区域。该区域的名称具有相应的hazelcast映射。 例如,我们的实体之一称为用户,完整的包路径为“ com.gkatzioura.User”,那么我们的榛树广播将具有名称“ com.gkatzioura.User”。 假设此映射分布在所有hazelcast节点上,则从一个节点检索到实体后,缓存的信息将共享给其他hazelcast节点。 一旦实体在节点中得到更新,则缓存的信息将在其他节点中失效。

Hibernate还为我们提供了查询缓存。 查询缓存是一种缓存查询结果的缓存。 例如,在jpql查询的情况下

SELECT usr.username,usr.firstname FROM User usr

缓存的结果将是一个具有由查询和参数组成的键的映射

以及检索结果的值。 在先前的缓存中,检索到的数据是原始值,它们按原样存储。但是,在某些情况下查询可能会检索实体。例如

SELECT c FROM Customer c

在这种情况下,不是存储所有检索到的信息,而是检索实体并将其缓存在第二级缓存中,而查询缓存具有使用查询及其参数作为键并将实体id作为值的条目。一旦再次发出相同的查询,查询缓存将获取ID,并将在第二级缓存中查找对应的实体。 如果第二级缓存中不存在实体,则发出查询以获取丢失的实体。当涉及二级缓存和查询缓存的配置时,我们需要注意二级缓存和查询缓存的逐出机制。 在将ID高速缓存在查询高速缓存中的情况下,您可能会感到迷惑,但是从第二级高速缓存中逐出了它们对应的实体。 在这种情况下,性能会受到影响,因为Hibernate将为每个丢失的实体发出查询。

Hazelcast支持二级缓存,但是它是节点本地的,并且从未分布在hazelcast群集中。尽管从查询中获取的结果仍保留在特定节点上,但应从用作第二级缓存的分布式映射中检索从缓存的查询指定的实体。

到目前为止,这是我们需要的理论。 在下一个博客中,我们执行一些spring数据jpa代码和一些hazelcast配置。

翻译自: https://www.javacodegeeks.com/2017/02/hibernate-caching-hazelcast-jpa-caching-basics.html

hazelcast

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值