Java 哪种mem缓存实现将花费最少的精力构建
我正在开发一个web应用程序,它需要对可能非常大且不断变化的数据集进行一些内存缓存。我的合作伙伴和我正在开始讨论几种解决方案,但我想了解我们对几种不同解决方案的期望。我们的应用程序是用Java编写的,将在glassfish 3.1下运行Java 哪种mem缓存实现将花费最少的精力构建,java,caching,lucene,redis,hazelcast,Java,Caching,Lucene,Redis,Hazelcast,我正在开发一个web应用程序,它需要对可能非常大且不断变化的数据集进行一些内存缓存。我的合作伙伴和我正在开始讨论几种解决方案,但我想了解我们对几种不同解决方案的期望。我们的应用程序是用Java编写的,将在glassfish 3.1下运行 redis与webdis 黑兹卡斯特 ApacheJCS 用java创建我们自己的 我们也在考虑apache solr或可能的lucene(如果我们使用hazelcast)。我们应该将solr计算为内存缓存解决方案,还是solr缓存与上面列出的解决方案不具有可比
提前感谢您的建议很明显,选项4绝对不是最简单的 我在Hazelcast取得了很好的成绩。它提供了一个很好的回报,从最小的努力。配置很简单/直接,库作为一个整体“正常工作” 我不熟悉redis或webdis
你没有把它包含在你的列表中,但是如果你真的需要一个缓存,考虑使用。
如果你想要简单,你就不会比使用LinkedHashMap作为缓存更简单。< /P>
public static <K,V> Map<K,V> lruCache(final int maxSize) {
return new LinkedHashMap<K,V>(maxSize*4/3, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return size() > maxSize;
}
};
}
publicstaticmap-lruCache(最终int-maxSize){
返回新LinkedHashMap(maxSize*4/3,0.75f,真){
@凌驾
受保护的布尔重构(Map.Entry最早){
返回大小()>maxSize;
}
};
}
主要缺点是它非常简单
如果您希望它是线程安全的,请使用Collections.synchronizedMap()好吧,我们不是在讨论推出我们自己的hazelcast版本,我的意思是创建我们自己的简单对象存储。我想说的是,在学习了一个框架之后,它可能已经很接近了,但这就是为什么我要问这个问题。我还想让JCS参与讨论。忘了列出那个。我也不熟悉JCS。我确实发现Hazelcast和Ehcache都很容易入门,没有多少学习曲线。如果您能提供更具体/详细的要求,这将有所帮助。(顺便说一句,这些库实际上比框架多。)谢谢。我们正在寻找一个分布式缓存,所以使用一个映射或列表对于我们的需求来说有点太简单了。为什么你想要一个分布式系统,而你似乎只有少数开发人员?您可以在单个实例中存储许多GB的数据。使用HashMap可以防止内存被垃圾收集。你可以选择WeakHashMap,但这并不是一个好主意。如果您打算建议使用Java实现,请使用Guava中提供的缓存。