拿起缓存实现,还是自己动手?

时间:2009-07-27 06:19:15

标签: java caching

我正在做一个Java EE应用程序,而且我已经得出结论,我需要为我的对象提供缓存。

我目前的要求并不比某种键值存储复杂得多,可能是可以处理树的东西。编写一个包含一个或多个贴图的简单自定义静态/单例类很有诱惑力。但是,由于有几个实现或多或少都像这样(Memcached浮现在脑海中),我开始想知道使用Memcached必须有一些附加价值,而不仅仅是我自己的实现。

所以,我想问一下这个问题:为什么我可以选择一个现成的缓存,当我可以自己创建静态数据时?反之亦然;当我可以拿起现成的缓存时,为什么要写一个静态类?

3 个答案:

答案 0 :(得分:9)

有许多缓存实现,包括开源和商业。关于编写正确的缓存有许多问题 - 离开对象的时间,驱逐策略,持久性,内存管理等等,所以我不会启动自己的(为什么重新发明轮子?)

查看以下实现之一:

http://java-source.net/open-source/cache-solutions

了解详情

答案 1 :(得分:6)

对于复杂对象图的许多情况,我使用单行

具有足够好的性能
new MapMaker().weakKeys().makeMap();

这会使用Google collections创建一个地图,可以用作复杂对象的缓存。

由于密钥很弱,并且最终超出范围,因此不太可能导致内存问题。

所以我会说简单的情况 - 不要打扰分布式缓存的“认知负载”。序列化问题,延迟等......你不会想要处理这些。

答案 2 :(得分:3)

  

“我为什么要写一个静态类,   什么时候我可以拿起现成的   缓存?“

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