我正在做一个Java EE应用程序,而且我已经得出结论,我需要为我的对象提供缓存.
我目前的要求并不比某种键值存储复杂得多,可能是可以处理树的东西.编写一个包含一个或多个贴图的简单自定义静态/单例类很有诱惑力.但是,由于有几个实现或多或少都像这样(Memcached浮现在脑海中),我开始想知道使用Memcached必须有一些附加值,而不仅仅是我自己的实现.
所以,我想问一下这个问题:当我可以自己制作静态数据时,为什么要拿起现成的缓存呢?反之亦然; 当我可以拿起现成的缓存时,为什么要写一个静态类呢?
有许多缓存实现,包括开源和商业.关于编写正确的缓存有很多问题 - 离开对象的时间,驱逐策略,持久性,内存管理等等,所以我不会启动自己的一个(为什么重新发明轮子?)
看看以下实现之一:
的EHCache
OSCache的
JCS
JBossCache的
的JCache
有关更多信息,请访问http://java-source.net/open-source/cache-solutions
对于复杂对象图的许多情况,我使用单线程具有足够好的性能
new MapMaker().weakKeys().makeMap();
这会使用Google集合创建一个地图,可以用作复杂对象的缓存.
由于密钥很弱,并且最终超出范围,因此不太可能导致内存问题.
所以我会说简单的情况 - 不要打扰分布式缓存的"认知负载".序列化问题,延迟等.你不会想要处理那些.