Java 哪种mem缓存实现将花费最少的精力构建

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缓存与上面列出的解决方案不具有可比

我正在开发一个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中提供的缓存。