Java Ehcache Vs静态映射缓存实现
我有几个表,其中只有很少的条目,它们永远不会动态变化。所以我想将整个表缓存在内存中,以减少数据库的负载。我可以很容易地通过一个静态映射并在一个静态块中填充映射来实现这一点Java Ehcache Vs静态映射缓存实现,java,hibernate,caching,jpa-2.0,ehcache,Java,Hibernate,Caching,Jpa 2.0,Ehcache,我有几个表,其中只有很少的条目,它们永远不会动态变化。所以我想将整个表缓存在内存中,以减少数据库的负载。我可以很容易地通过一个静态映射并在一个静态块中填充映射来实现这一点 我想知道通过Ehcache+hibernate是否能以更有效的方式实现这一点?Ehcache的功能远远超过地图: 限制内存中元素的最大数量 磁盘溢出(如果超过上述数字) 为元素设置生存时间和空闲时间 允许在群集中进行复制 如果您不需要其中任何一个,您可以安全地使用映射—它将更易于配置。与静态映射相比,真正的二级缓存的优势在
我想知道通过Ehcache+hibernate是否能以更有效的方式实现这一点?Ehcache的功能远远超过地图:
- 限制内存中元素的最大数量
- 磁盘溢出(如果超过上述数字)
- 为元素设置生存时间和空闲时间
- 允许在群集中进行复制
如果您不需要其中任何一个,您可以安全地使用映射—它将更易于配置。与静态映射相比,真正的二级缓存的优势在于,您可以通过使用Hibernate会话(或实体管理器)来保持定义、访问和遍历实体的相同方式,从而获得内存访问的优势 您可以与其他实体保持关系(即使未缓存);您可以使用查询缓存,但仍然可以对这些实体执行查询(这些查询的结果也将被缓存)
简言之,正如Bozho所说,它是透明的,提供了更多的选项,而且使用起来更容易,因为缓存的条目与其他实体的使用方式相同。我同意使用Ehcahe将保持代码的统一性(我们访问其他实体的方式)但是有没有一种方法可以像我在map实现中那样在服务器启动时通过静态块预先填充ecache来初始填充map?执行加载所有实体的HQL查询应该做到这一点:从CachedEntity c中选择c。你能为cache提供简单的map实现吗?只需声明一个公共静态map,添加要缓存在映射中的值,并启动一个线程,该线程将每12小时或每12小时刷新一次此映射。感谢新手,我已经实现了静态映射,但不会每12小时刷新一次。如果需要的话,我会调查的。