【问题标题】:memcached-like key/value cache that uses both RAM and disk [closed]使用 RAM 和磁盘的类似 memcached 的键/值缓存 [关闭]
【发布时间】:2011-03-06 01:49:47
【问题描述】:

我有一个 Java Web 应用程序,它在后端使用第三方 Web 服务。调用 Web 服务会产生延迟,尽可能避免这一点很重要。另外,我的应用每天只允许调用一定数量的 Web 服务,所以除非绝对需要,否则最好不要调用 Web 服务。

我目前的解决方案是将 Web 服务结果缓存在 Memcached 中,这很有效。基本上,我们使用 RAM 来缓存 Web 服务结果。

但是,我们希望将此提升到一个新的水平。我们还有一些磁盘空间,我们希望将其用作磁盘缓存来缓存 Web 服务结果。我想要一个系统,首先我们检查 RAM 缓存(可以是 Memcached,但不一定是)。当发生 RAM 缓存未命中时,我们将回退到检查磁盘缓存。当发生磁盘缓存未命中时,我们将回退到调用 Web 服务。每当我们检索新的 Web 服务结果时,我们都会更新 RAM 缓存和磁盘缓存。

一种可能性是使用 SQL 数据库作为使用磁盘进行存储的系统部分。但这似乎不太理想。数据库往往需要大量的保姆。它们通常涉及无限增长的文件(数据库本身或事务日志),因此您需要管理当这些不断增长的文件开始导致文件系统空间不足时会发生什么。

对于系统的基于磁盘的部分,我想要的是我可以告诉它要使用多少磁盘空间,并且它将保证它永远不会使用更多。当空间用完时,它会自动开始丢弃最近最少使用的键值对。我绝对不需要 ACID,所以应该没有事务日志。

所以我正在寻找: 1) 基于磁盘的键值存储系统,当 Memcached 发生缓存未命中时,可以充当“故障转移” 要么 2) 单个系统将取代 Memcached 并提供 RAM 缓存和磁盘缓存。

我想要的其他重要品质: 1) 像 Memcached 一样,我想要一个不需要保姆的缓存系统。 2) 像 Memcached 一样,我希望缓存能够跨多台服务器分片,每个对象恰好位于一台服务器上。 3) 像 Memcached 一样,我想要一些相当容易插入和使用的东西。我不想编写大量代码来使其正常工作。

我已经研究过的其他系统: 1) 我认为 Redis 不适合这里的要求,因为它的磁盘缓存只是 RAM 中的镜像。我希望 RAM 缓存成为磁盘缓存的一小部分。 2) EhCache 有一个“永久磁盘存储,在 VM 重新启动之间存储数据”,但这与我上面描述的不太相似。

Apache JCS(Java 缓存系统)看起来很合适,所以我很想听听那些使用过它的人的意见。

【问题讨论】:

    标签: java caching persistence memcached distributed


    【解决方案1】:

    我使用ehcache 进行基于 RAM/DISK 的缓存,效果很好。确定在内存中保留多少对象以及在磁盘上保留多少对象的确切配置可以在代码之外完成,而无需更改任何代码。没什么好说的,它是一个缓存,它工作得很好。

    我用它来存储晶圆图以避免从远程数据库中获取它们。我调整了磁盘缓存的大小,以便能够在应用服务器附近保持几个月的生产,从而节省大量时间,尤其是在必须进行一些紧急返工时。

    【讨论】:

    • 谢谢。这可能是我正在寻找的解决方案。我现在看到您可以配置 DiskStore 并指定 maxElementsOnDisk 参数。
    【解决方案2】:

    鱿鱼是一种选择吗?它在内存和磁盘中处理网络结果

    【讨论】:

      【解决方案3】:

      还要检查 Membase。它很像 memcached,但支持磁盘持久性。

      http://en.wikipedia.org/wiki/Membase
      http://www.membase.org/

      【讨论】:

        【解决方案4】:

        使用 Redis,它支持所有 memcache 操作,并将数据保存到磁盘,而且速度非常快。 cassandra 的读取速度很慢,所以我不会这样做。

        【讨论】:

          【解决方案5】:

          Cassandra。有十几种 NoSQL 解决方案可以同时存储到内存和磁盘。很少有人能像 Cassandra 这样久经沙场。 facebook、reddit 和 digg 在生产中使用,仅举几例。

          【讨论】:

            【解决方案6】:

            【讨论】:

              【解决方案7】:

              MemcacheDB 可能是您正在寻找的答案。 Reddit 将其用于“永久缓存”。

              【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-03-05
              • 1970-01-01
              • 1970-01-01
              • 2012-07-14
              • 1970-01-01
              • 2011-10-16
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多