代码之家  ›  专栏  ›  技术社区  ›  Henrik Paul

选择一个缓存实现,还是滚自己的?

  •  6
  • Henrik Paul  · 技术社区  · 16 年前

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

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

    所以,我想问一下这个问题:当我可以做我自己的静态数据时,为什么要取一个现成的缓存?反之亦然;当我可以提取一个现成的缓存时,为什么要编写一个静态类呢?

    3 回复  |  直到 13 年前
        1
  •  6
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

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

    new MapMaker().weakKeys().makeMap();
    

    这将使用 Google collections ,可以用作复杂对象的缓存。

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

    所以对于简单的情况,我会说——不要为分布式缓存的“认知负载”而烦恼。串行化问题、延迟等。你不会想处理这些的。

        2
  •  9
  •   David Rabinowitz    16 年前

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

    查看以下实现之一:

    更多见 http://java-source.net/open-source/cache-solutions

        3
  •  3
  •   Boris Pavlović    16 年前

    “为什么我要写一个静态类, 当我能拿起现成的 缓存?”

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