繁体   English   中英

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

[英]When to use Ehcache and Hash map for caching data?

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

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

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

Ehcache(on-heap)是一个ConcurrentHashMap具有到期和驱逐处理功能。

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

但是如果你知道你的地图中会有多少元素。 而且你知道它们永远不会过期,除非你替换它们,然后ConcurrentHashMap会做你需要的。

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

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

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

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

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

而HashMap:

  • 将所有内容保存在内存中
  • 可以简单易用
  • 好的简单程序

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM