猿问

什么时候使用 Ehcache 和 Hash map 缓存数据?

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

建议在这里使用 hashMap 吗?在我的主程序中使用 ehcache 或 hashmap 不是一回事。两者都在我的 JVM 中占据相同的空间。我试图了解何时在 java 程序中使用 hashMap 以及何时使用 Ehcache


偶然的你
浏览 268回答 2
2回答

烙印99

AHashMap不是并发的。所以你不能更新它。AConcurrentHashMap是。所以你想要那个。Ehcache (on-heap) 是一个ConcurrentHashMap带有过期和驱逐处理的。它也符合 JSR107,因此可以更轻松地使用许多框架进行透明缓存。但是如果你知道你的地图中有多少元素。而且您知道,除非您更换它们,否则它们永远不会过期,那么ConcurrentHashMap您将满足您的需求。最重要的是,Ehcache 是一个增强的ConcurrentHashMap.

慕仙森

使用 EhCache,因为它可以像 HashMap 一样工作,同时可以更改其配置。虽然数据集很小,但将其完全加载到内存中(HashMap)可能是可行的,否则您必须决定要为其分配多少内存,并且必须保留一些用于其他用途。这就是 EhCache 派上用场的地方:可配置大小(在缓存条目中)保留“最有用”的条目(取决于使用的算法)可能会在磁盘上存储一些条目支持 TTL (Time To Live), TTI (Idle), 磁盘也一样,基本上如果不使用条目,缓存不占用任何空间支持聚类适用于更大的应用程序等等。虽然 HashMap:将所有内容保留在内存中使用起来很简单对于简单的程序还可以有时缓存包含不是最新的数据(错误或在没有应用程序知识的情况下操作的数据库)。如果没有清理机制 HashMap 将保留该数据。EhCache 有机会(TTL、TTI)删除它并在必要时加载最新数据
随时随地看视频慕课网APP

相关分类

Java
我要回答