Java 选择缓存实现,还是自己启动?

Java 选择缓存实现,还是自己启动?,java,caching,Java,Caching,我正在做一个JavaEE应用程序,我已经得出结论,我的对象需要一个缓存 我目前的需求并不比某种键值存储复杂多少,可能是某种可以处理树的存储。编写一个包含一个或多个映射的简单自定义静态/单例类很有诱惑力。但是,由于有几个实现或多或少都是这样做的(我想到了Memcached),我开始怀疑使用Memcached肯定会有一些附加值,而不仅仅是我自己的实现 所以,我想问一下这个问题:既然我可以自己处理静态数据,为什么我要选择一个现成的缓存?反之亦然;既然我可以获取一个现成的缓存,为什么还要编写一个静态类呢

我正在做一个JavaEE应用程序,我已经得出结论,我的对象需要一个缓存

我目前的需求并不比某种键值存储复杂多少,可能是某种可以处理树的存储。编写一个包含一个或多个映射的简单自定义静态/单例类很有诱惑力。但是,由于有几个实现或多或少都是这样做的(我想到了Memcached),我开始怀疑使用Memcached肯定会有一些附加值,而不仅仅是我自己的实现


所以,我想问一下这个问题:既然我可以自己处理静态数据,为什么我要选择一个现成的缓存?反之亦然;既然我可以获取一个现成的缓存,为什么还要编写一个静态类呢?

对于许多复杂对象图的情况,我使用一行程序就有足够好的性能

new MapMaker().weakKeys().makeMap();
这将创建一个使用的贴图,可以将其用作复杂对象的缓存

由于键很弱,最终超出范围,因此不太可能导致内存问题


因此,对于简单的情况,我要说的是,不要担心分布式缓存的“认知负载”。序列化问题、延迟等。。您不想处理这些问题。

有许多缓存实现,包括开源和商用。写一个正确的缓存有很多问题,比如对象的离开时间、逐出策略、持久性、内存管理等等,所以我不会自己动手(为什么要重新发明轮子?)

请看一下以下实现之一:

更多信息请访问

“我为什么要写一个静态类, 我什么时候能买到现成的 缓存?”


当您不想在项目中包含第三方依赖项,并且没有更好的方法来学习如何编写缓存时。

因此,假设我有一个一次可以在缓存中容纳我想要的所有数据的单VM应用程序,您会说就绪的实现有额外的好处吗?当然,一旦有更多的虚拟机,或者我不能同时将所有数据放入缓存,就有很好的理由不重新发明轮子。与许多事情一样,听起来现有缓存库的实现者刚刚考虑了您将遇到的许多问题。你可能至少应该阅读每一个的描述,这样当你的缓存编码出现问题时,你就可以很容易地识别它们和至少一个潜在的解决方案。这个地图制作者对我来说是新事物。我必须看一看。谢谢你的提示!