何时使用Ehcache和哈希映射进行缓存数据?

4

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

在这里使用HashMap是否明智?在我的主程序中使用Ehcache或HashMap不是一样的吗?它们都占用JVM中相同的空间。我正在尝试理解何时在Java程序中使用HashMap以及何时使用Ehcache。

2个回答

4
一个 HashMap 不是并发的。所以你不能更新它。ConcurrentHashMap 是。因此,你需要它。
Ehcache(在堆上)是一个带有过期和逐出处理的 ConcurrentHashMap。
它还符合 JSR107 标准,因此可以更轻松地与许多框架进行透明缓存。
但是,如果你知道你的映射中将有多少元素。而且你知道除非你替换它们,否则它们永远不会过期,那么 ConcurrentHashMap 就足够了。
总之,Ehcache 是增强版的 ConcurrentHashMap。

2
使用EhCache,因为它可以像HashMap一样工作,同时具有更改配置的可能性。
当数据集很小时,将其完全加载到内存中(HashMap)可能是可行的,否则您必须决定要为其分配多少内存,并且必须保留一些用于其他事情。
这就是EhCache派上用场的地方:
- 可配置大小(以缓存条目为单位) - 保留其中“最有用”的条目(取决于使用的算法) - 可能将某些条目存储在磁盘上 - 支持TTL(生存时间),TTI(空闲时间),对于磁盘也是如此,基本上如果条目未被使用,则缓存不占用任何空间 - 支持集群 - 适用于较大的应用程序 - 等等
而HashMap:
- 将所有内容保存在内存中 - 可以简单易用 - 对于简单的程序来说还不错
有时缓存包含过时的数据(无论是错误还是DB在应用程序不知情的情况下进行操作)。没有清理机制,HashMap将保留该数据。而EhCache有机会(TTL,TTI)在必要时删除它并加载最新的数据。

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