Mongodb Memcached vs Memcache vs Jcache

Mongodb Memcached vs Memcache vs Jcache,mongodb,caching,memcached,spymemcached,jcache,Mongodb,Caching,Memcached,Spymemcached,Jcache,请不要把这个问题标为重复问题。我读了前面的问题,但我仍然无法理解 我目前正在从事一个用Java设计的项目,该项目使用MongoDB实现持久性。但是由于它的一些性能问题,我被要求使用Memcached。但我不知道Memcached如何帮助我做到这一点 在冲浪的时候,我更加困惑,因为像Memcache和Memcached这样的缓存服务。有人能解释一下这些不同之处吗?当问到Memcached时,为什么PHP会成为一些问题的答案 我要求所有人回答清楚,并举例说明如何将Memcached应用到我的项目中。

请不要把这个问题标为重复问题。我读了前面的问题,但我仍然无法理解

我目前正在从事一个用Java设计的项目,该项目使用MongoDB实现持久性。但是由于它的一些性能问题,我被要求使用Memcached。但我不知道Memcached如何帮助我做到这一点

在冲浪的时候,我更加困惑,因为像Memcache和Memcached这样的缓存服务。有人能解释一下这些不同之处吗?当问到Memcached时,为什么PHP会成为一些问题的答案

我要求所有人回答清楚,并举例说明如何将Memcached应用到我的项目中。什么是Memcache、Memcached、Jcache和spymecached?


如果可能,请提供一个链接,以在某处完成Memcached示例

Memcache和Memcached是一回事,正确的名称是Memcached()

JCache是一个标准JavaAPI(JSR107-)的名称,它提供了一个与缓存层/解决方案交互的通用API。(从键/值缓存获取/设置/删除数据以简化)

因此,如果要在Java应用程序中使用MongoDB顶部的缓存层,必须:

  • 在基础结构上的某个位置安装Memcached(如果尚未安装,您可以使用telnet快速测试它。默认端口为11211,因此您可以运行telnet localhost 11211以查看它是否正常工作

  • 您必须为Memcached使用JCache实现,例如:这将允许您将数据存储并获取到运行在基础架构中somwhere的Memcached进程中

    由于您正在谈论JCache,您正在使用Java,因此也可以使用基于Java的缓存,直接在您的JVM中工作,而无需第三方缓存/进程(memcached)。您可以找到其中的许多缓存,例如eHCache、JBoss缓存,大多数缓存都使用标准JCache API公开其API

  • 现在,您需要对数据访问层进行编码,以从MongoDB中获取数据,并使用JCache API将其设置到缓存中。在这段代码中,您必须检查数据是否在缓存中,如果不在,则从MongoDB查询数据,并将其设置在缓存中并使用。请注意逐出策略

  • 这篇关于在Google App Engine文档中使用JCache的文档很有趣,可以看到“伪代码”(您的代码会有所不同,但它应该可以帮助您了解您必须在代码中执行的操作)

    之所以经常看到Memcached和PHP在一起,是因为Memcached是PHP应用程序最常见的缓存层,许多API/FWK都在使用它


    然而,这是“整体”方法,但在执行此操作之前,我会检查“为什么”你是说MongoDB很慢,并且解决了这个问题。

    谢谢@Tug的回答。现在我很清楚了。你记录了所有的疑问…太好了。再次感谢。我是说MongoDB很慢,因为在我们的应用程序中,目前我们多次命中DB,即使我们知道数据库中的数据没有改变nge。说Mongo很慢是不正确的。我的实现是错误的。我假设如果我使用缓存机制,它会非常快。所以总的来说,你的意思是Memcached是一个概念,而像SpymeCache这样的JCache实现可以帮助我实现这个概念。我正确吗?嗯,不完全是“缓存”概念是:您可以将RAM中的数据放在靠近应用程序的位置,以避免对持久层的调用。Memcached是缓存的一种实现(由于它也是协议,所以更多)。JCache是缓存的“客户端”API,“任意缓存”.spymemached是基于Memcached协议的Memcached的Java客户端,而spymemached jcache是Memcached协议的jcache的“实现”(实际上是spymemached库的包装器)。从原则上讲,由于JCache是一个标准API,因此您可以在封面下使用任何缓存层。在另一个主题上,如果您知道您的实现是错误的,那么最好先解决这个问题……添加缓存层肯定会使应用程序非常快,但您必须处理一组新的问题:缓存的有效性/无效性缓存中的数据。您可以在缓存中保留多长时间,谁负责从缓存中删除数据,更新日期时会发生什么,等等缓存不是一个解决问题的灵丹妙药,它需要处理自己的问题。感谢@Tug的建议。我一定会研究它。您的回答真的很有帮助。