为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2021-11-11 13:32:50
我有一个定义了 main 方法的类。当我运行这个类时,它从帐户表中加载帐户数据并在我的主类中填充一个全局变量。现在我的项目中的要求是,可以动态更新帐户表。为了解决这个问题,我订阅了帐户表上的最后更新时间戳,并使用它来检查哈希表中的数据是否是最新的。建议在这里使用 hashMap 吗?在我的主程序中使用 ehcache 或 hashmap 不是一回事。两者都在我的 JVM 中占据相同的空间。我试图了解何时在 java 程序中使用 hashMap 以及何时使用 Ehcache
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

AHashMap不是并发的。所以你不能更新它。AConcurrentHashMap是。所以你想要那个。

Ehcache (on-heap) 是一个ConcurrentHashMap带有过期和驱逐处理的。

它也符合 JSR107,因此可以更轻松地使用许多框架进行透明缓存。

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

最重要的是,Ehcache 是一个增强的ConcurrentHashMap.


查看完整回答
反对 回复 2021-11-11
?
慕仙森

TA贡献1827条经验 获得超7个赞

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

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

这就是 EhCache 派上用场的地方:

  • 可配置大小(在缓存条目中)

  • 保留“最有用”的条目(取决于使用的算法)

  • 可能会在磁盘上存储一些条目

  • 支持 TTL (Time To Live), TTI (Idle), 磁盘也一样,基本上如果不使用条目,缓存不占用任何空间

  • 支持聚类

  • 适用于更大的应用程序

  • 等等。

虽然 HashMap:

  • 将所有内容保留在内存中

  • 使用起来很简单

  • 对于简单的程序还可以

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


查看完整回答
反对 回复 2021-11-11
  • 2 回答
  • 0 关注
  • 267 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信