Ehcache与静态映射缓存实现对比

7

我有几个表格,其中很少有条目,并且它们永远不会动态更改。因此,我想将整个表格缓存在内存中,以减少对数据库的负载。我可以通过静态映射和在静态块中填充映射来轻松实现。

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


你能提供一些简单的缓存映射实现吗? - Rachel
1
只需声明一个公共静态映射,将您想要缓存的值添加到映射中,并启动一个线程,该线程将每12小时刷新此映射或类似操作。 - dpsdce
谢谢,新手。我已经实现了静态地图,但是没有每12小时刷新一次。如果需要的话,我会进一步研究它。 - Rachel
2个回答

7

Ehcache比Map拥有更多的功能:

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

如果您不需要这些功能,可以安全地使用Map - 它会更容易配置。


6
真正的二级缓存相比于静态映射的优点在于,您可以通过仍然使用Hibernate会话(或实体管理器)来定义、访问和遍历实体,获得内存访问的优势。
您可以保留与其他实体的关系(即使不缓存);您可以使用查询缓存并仍然对这些实体执行查询(这些查询的结果也将被缓存)。
简而言之,它是透明的,提供了更多选项,因为缓存的实体与其他实体使用方式相同,所以更容易使用。

我同意使用Ehcache可以保持代码的一致性(我们访问其他实体的方式),但是是否有一种方法可以在服务器启动时预填充ecache,就像我可以通过静态块来初始化映射实现一样? - dpsdce
执行一个加载所有实体的 HQL 查询应该能解决问题:select c from CachedEntity c。 - JB Nizet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接