我正在做一个Java EE应用程序,而且我已经得出结论,我需要为我的对象提供缓存。
我目前的要求并不比某种键值存储复杂得多,可能是可以处理树的东西。编写一个包含一个或多个贴图的简单自定义静态/单例类很有诱惑力。但是,由于有几个实现或多或少都像这样(Memcached浮现在脑海中),我开始想知道使用Memcached必须有一些附加价值,而不仅仅是我自己的实现。
所以,我想问一下这个问题:为什么我可以选择一个现成的缓存,当我可以自己创建静态数据时?反之亦然;当我可以拿起现成的缓存时,为什么要写一个静态类?
答案 0 :(得分:9)
有许多缓存实现,包括开源和商业。关于编写正确的缓存有许多问题 - 离开对象的时间,驱逐策略,持久性,内存管理等等,所以我不会启动自己的(为什么重新发明轮子?)
查看以下实现之一:
了解详情答案 1 :(得分:6)
对于复杂对象图的许多情况,我使用单行
具有足够好的性能new MapMaker().weakKeys().makeMap();
这会使用Google collections创建一个地图,可以用作复杂对象的缓存。
由于密钥很弱,并且最终超出范围,因此不太可能导致内存问题。
所以我会说简单的情况 - 不要打扰分布式缓存的“认知负载”。序列化问题,延迟等......你不会想要处理这些。
答案 2 :(得分:3)
“我为什么要写一个静态类, 什么时候我可以拿起现成的 缓存?“
当您不想在项目中包含第三方依赖项时,没有更好的方法来学习如何编写缓存。