何时使用Ehcache和Hash映射来缓存数据?

时间:2018-10-10 21:19:28

标签: java ehcache concurrenthashmap

我有定义主要方法的类。当我运行此类时,它将从帐户表中加载帐户数据,并在主类中填充一个全局变量。现在我的项目中的要求是,可以动态更新帐户表。为了解决这个问题,我订阅了帐户表上的最新时间戳,并使用它来检查哈希表中的数据是否最新。

在这里使用hashMap是否明智?不是在我的主程序中使用ehcache或hashmap相同。两者在我的JVM中占用相同的空间。我试图了解何时在Java程序中使用hashMap以及何时使用Ehcache

2 个答案:

答案 0 :(得分:2)

HashMap不是并发的。因此,您无法更新它。 ConcurrentHashMap是。所以你想要那个。

Ehcache(堆上)是一个ConcurrentHashMap,具有到期和逐出处理。

它还符合JSR107,因此可以轻松地在许多框架中进行透明缓存。

但是,如果您知道地图中将包含多少个元素。而且您知道除非更换它们,否则它们永远不会过期,然后ConcurrentHashMap将满足您的需求。

最重要的是,Ehcache是​​增强的ConcurrentHashMap

答案 1 :(得分:1)

使用EhCache,因为它可以像HashMap一样工作,同时可以更改其配置。

虽然数据集很小,但将其完全加载到内存(HashMap)中可能是可行的,否则,您必须确定要为其分配多少内存,而必须保留一些其他内容。

这是EhCache派上用场的地方:

  • 可配置大小(在缓存条目中)
  • 保留其中的“最有用”条目(取决于所使用的算法)
  • 可能在磁盘上存储一些条目
  • 支持TTL(生存时间),TTI(空闲),与磁盘相同,基本上,如果不使用条目,缓存不会占用任何空间
  • 支持群集
  • 适合大型应用

HashMap:

  • 将所有内容保留在内存中
  • 易于使用
  • 确定简单程序

有时,高速缓存中包含的数据不是最新的(错误或数据库在没有应用程序知识的情况下进行操作)。如果没有清除机制,HashMap将保留该数据。尽管EhCache有机会(TTL,TTI)将其删除,并在必要时加载最新数据。