【问题标题】:Ehcache Vs Static map cache implementationEhcache Vs 静态地图缓存实现
【发布时间】:2011-09-01 12:40:45
【问题描述】:

我有几个表,其中的条目很少,它们永远不会动态变化。所以我想将整个表缓存在内存中以减少数据库的负载。我可以通过静态地图轻松实现这一点,并将地图填充到静态块中。

我想知道 Ehcache + hibernate 是否可以以更有效的方式实现相同的功能?

【问题讨论】:

  • 能否提供简单的地图缓存实现?
  • 只需声明一个公共静态地图,添加您想要在地图中缓存的值,然后启动一个线程,该线程将每 12 小时刷新一次此地图。
  • 感谢新手,我已经实现了静态地图,但不是每 12 小时刷新一次。有需要我会研究的。

标签: java hibernate caching jpa-2.0 ehcache


【解决方案1】:

Ehcache 比 Map 有更多的功能:

  • 限制内存中元素的最大数量
  • 溢出到磁盘(如果超过上述数量)
  • 为元素设置生存时间和空闲时间
  • 允许在集群内复制

如果您不需要其中任何一个,您可以安全地使用地图 - 它会更容易配置。

【讨论】:

    【解决方案2】:

    与静态映射相比,真正的二级缓存的优势在于,您可以通过仍然保持定义、访问和遍历实体的相同方式来获得内存访问的优势:通过使用 Hibernate 会话(或实体经理)。

    您可以与其他实体保持关系(甚至不缓存);您可以使用查询缓存并仍然对这些实体执行查询(这些查询的结果也将被缓存)。

    简而言之,它是透明的,如 Bozho 所说,提供了更多选项,并且更易于使用,因为缓存实体的使用方式与其他实体相同。

    【讨论】:

    • 我同意使用 Ehcahe 将保持代码统一(我们访问其他实体的方式),但是有没有办法在服务器启动时预填充 ecache,就像我可以通过静态块在地图实现中做的那样最初填充地图?
    • 执行加载所有实体的 HQL 查询应该可以解决问题:从 CachedEntity c 中选择 c。
    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多