2011-05-25 41 views
7

我有很少的表,只有很少的条目,它们不会动态改变。所以我想缓存整个表在内存中减少数据库的负载。我可以通过静态地图轻松实现,并在静态块中填充地图。Ehcache vs静态地图缓存的实现

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

+0

你能提供简单的缓存地图实现吗? – Rachel 2012-01-31 15:56:42

+1

只需声明一个公共静态地图,在地图中添加要缓存的值,然后启动一个线程,该线程将每12小时刷新一次该地图或某些东西。 – dpsdce 2012-02-02 04:31:21

+0

感谢新手,我已经实施了静态地图,但并不是每12小时刷新一次。如果有需要,我会进行调查。 – Rachel 2012-02-02 16:37:20

回答

6

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

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

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

+0

我同意使用Ehcahe将保持代码统一(我们访问其他实体的方式),但有没有一种方法可以在服务器启动时预先填充ecache,就像我可以通过静态块在地图实现中一样初始填充地图? – dpsdce 2011-05-25 08:56:23

+0

执行加载所有实体的HQL查询应该这样做:从CachedEntity中选择c。 – 2011-05-25 09:35:04

6

的Ehcache具有比地图更多的功能:

  • 限制元件的存储器中的最大数
  • 溢出到磁盘(如果超过上述数目)
  • 设定的时间到-live和时间对闲置元素
  • 允许集群内复制

如果你不需要任何这些,你可以发无需使用地图 - 它会更容易配置。