gpt4 book ai didi

hibernate - 集群上的Hibernate L2缓存

转载 作者:行者123 更新时间:2023-12-01 08:13:26 24 4
gpt4 key购买 nike

Q1:
我对,只有这些供应商支持群集上的Hibernate L2缓存吗?

  • 休眠的Terracotta(商业)
  • SwarmCache(自2003年以来未发布)
  • JBoss缓存1.x
  • JBoss缓存2

  • Q2:
    Hibernate L2缓存是否有其他选择? (也许一些数据库缓存?)

    最佳答案

    Q1。 EhCache与分布式的Hibernate L2 Cache配合得很好。
    我们正在将其用于我们的项目。

    Q2。可能有几个缓存。

  • 所有数据库已经在内部进行了大量缓存,因此不必担心这部分。

  • 但是,数据库的问题
    缓存是它在物理上
    数据库服务器,因此每个查询
    涉及网络通话(延迟,
    bandwith ..)。这就是重点
    应用程序上的缓存数量
    服务器。


  • Hibernate L2缓存具有一些细节:
  • 非常易于使用(无代码,很少配置)
  • 从概念上讲是实体级别的(很细粒度,我们有时需要缓存更大的粒度,以减少数据库请求),
  • 通过id或collection工作(例如,默认情况下,不激活缓存查询结果,因为在一般情况下不可能使其有用)。


  • 当Hibernate L2不适合使用时,我们使用相同的EhCache库来缓存数据(不完全是实体)。用例示例:
  • 当一个表是大(记录长度和数量)时,内存使用量不允许完全缓存它,但是可以为所有记录仅缓存三个字段。这些字段可能是经常访问的字段,或者是不变的...
  • 当我们对缓存有许多读取访问权时,给定我们拥有的实体,每个访问都会触发计算(在L2缓存上):计算结果可以存储在缓存中。 (典型的例子是计算需要其他表中的详细信息,但是最终结果中未使用这些详细信息,因此缓存不会存储这些详细信息)
  • 当将表中的实体按 类别逻辑分组时,我们希望一次请求和缓存一个类别,而不是一次成为一个实体的常规L2缓存策略。
    在分布式环境中,这通常
    转化为使
    当他们的其中一个
    实体被修改,这在功能上
    对我们来说合乎逻辑(对
    性能,否则我们会
    必须使所有这些无效
    实体;这是因为缓存
    使整个区域无效,或
    具体对象,但在
    之间必须循环这对性能不利)

    还有其他我肯定...

    因此,这种情况与数据库没有密切关系,它通常不存储我们的Hibernate实体。我们将其放在业务层(而不是数据访问或Daos)中,使其直接可用于业务代码。请注意,对我们来说,它不是透明的缓存,而是对执行操作或传递值的显式业务服务(对此高速缓存负责:如果不存在数据则加载它,根据需要使之无效)的调用。

    这个缓存中一个有趣的线程问题:因为我们的数百个Web线程都可以访问该缓存,所以它必须是线程安全的。您可能知道为什么线程安全值在每次调用时都是不变的或克隆的(通常是性能问题)。因此,我们所有的业务缓存都使用不可变的对象,并且性能非常好。

    关于hibernate - 集群上的Hibernate L2缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339684/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com