Memcached vs Memcache vs Jcache

时间:2014-08-26 12:42:27

标签: mongodb caching memcached spymemcached jcache

请不要将此问题标记为重复。我读过以前的问题,但我仍然无法理解。

我目前正在使用Java设计一个使用MongoDB进行持久化的项目。但是由于它的一些性能问题,我被要求使用Memcached。但我无法弄清楚Memcached如何帮助我做到这一点。

在浏览时,由于Memcache和Memcached等缓存服务,我更加困惑。有人可以解释一下这些是如何不同的,为什么当问到Memcached时,PHP会在一些问题中找到答案。

我请求所有人清楚回答并通过示例告诉我如何将Memcached用于我的项目。什么是Memcache,Memcached,Jcache和SpyMemcached?

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

1 个答案:

答案 0 :(得分:7)

Memcache和Memcached是一回事,"正确的名称"被Memcached(http://memcached.org/)。

JCache是​​标准Java API(JSR 107 - https://jcp.org/en/jsr/detail?id=107)的名称,它提供了与缓存层/解决方案交互的通用API。 (从键/值缓存中获取/设置/删除数据以简化)

所以你真的想在你的Java应用程序中使用MongoDB顶部的缓存层:

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

  2. 您必须为Memcached使用JCache实现,例如:https://github.com/toelen/spymemcached-jcache这将允许您将数据存储并运行到基础架构中运行somwhere的Memcached进程中。

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

  3. 现在,您需要对数据访问层进行编码,以便从MongoDB中获取数据,并使用JCache API将它们设置为Cache。在此代码中,您将必须检查数据是否在缓存中,如果不是从MongoDB查询数据,并将其设置在缓存中并使用它。小心驱逐策略。

  4. 有关在Google App Engine文档中使用JCache的文档很有趣,可以看到"伪代码" https://developers.google.com/appengine/docs/java/memcache/usingjcache(您的代码会有所不同,但它可以帮助您查看代码中必须执行的操作。)

    你经常看到Memcached和PHP的原因只是因为Memcached是PHP应用程序最常用的缓存层,有很多API / FWK正在使用它。在Java中,我们有很多选择,从纯Java层到Memcached或其他......

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