2012-02-09 55 views
14

我有一个Debian服务器,有大约16GB的RAM,我使用的是nginx和几个沉重的mysql数据库以及一些自定义的php应用程序。我想在Mysql和PHP之间实现一个内存缓存,但是数据库太大而无法将所有内容存储在RAM中。就我研究而言,我认为LRU缓存可能会更好。这是否排除Redis? Couchbase也是一个考虑因素。Memcached,Redis或Couchbase

回答

15

假设有一个运行nginx + php + mysql实例的独特服务器,其余一些可用的RAM,使用该RAM缓存数据的最简单方法就是增加mysql实例的缓冲区缓存。数据库已经使用类似LRU的机制来处理它们的缓冲区。

现在,如果您需要将部分处理从数据库中移走,那么预缓存可能是一个选项。在讨论memcached/redis之前,如果仅考虑一台服务器(实际上比redis/memcached更有效),则与php等集成的共享内存缓存(如APC)将会更加高效。

memcached和redis都可以被认为是执行远程缓存(即共享各个节点之间的缓存)。我不排除redis:它可以很容易地配置为此目的。两者都将允许定义一个内存限制,并使用类似LRU的行为处理缓存。然而,我不会在这里使用couchbase,这是一个弹性的(即应该在几个节点上使用)NoSQL键/值存储(即不是缓存)。你可能会将一些数据从你的mysql实例移动到一个couchbase集群,但仅仅用于缓存就是过度工程IMO。

+0

我已经使用了APC,但是我们在web应用中使用的php cli脚本无法访问相同的数据。这就是memcached成为下一个逻辑步骤的第一步。我正在研究couchbase,因为我认为它是一个非易失性(如果需要的话)或多或少地用于memcached的替代品。 – Poe 2012-02-10 12:04:16

+19

Couchbase应该被考虑,因为它具有简单的旧memcached操作模式(称为桶),但使管理更容易,管理统计等。完全公开:我为Couchbase工作。 – 2012-03-09 01:54:15

1

我们使用memcached的最初缓存data.In memcahed分区数据不同斗下的不同应用程序是一个真正的issue.Also我们有一个要求,以刷新一个桶alone.Monitoring数据被另一个requirement.We移到CouchBase数据并使用memcahed风格的bucket.i猜测它使用couchbase memcache风格存储区进行缓存而不是使用memcahe更加灵活和高效。

+0

这是缓存/内存缓存用户迁移到Couchbase的常用用例(使用memcache存储区,有时使用Couchbase存储区)。我邀请您查看http://www.couchbase.com/memcached – 2013-01-17 09:27:52

0

正如Matt Ingenthron指出的那样,Hari指出Couchbase支持作为Memcached的直接替代品。 Couchbase以非弹性方式利用memcached,因为参与memcache集群的每个节点都是谨慎的,没有持久性,即只是一个缓存,但couchbase也提供了确保持久性的“Couchbase”存储区类型。 Membase也是代码的一部分,因此Couchbase不仅可以从磁盘提供数据,还可以从RAM提供数据,并在复制到其他节点时将其持久存在,并在应用更改时保存到磁盘。如果您只是希望缓存层与持久层分离,我强烈推荐Couchbase 3.x用于一个脚本中的缓存和持久性,或者多个脚印。

1

您是否曾考虑过使用持久性内存中的NoSQL解决方案之一将数据库完全移到RAM中?它可能需要比原始MySQL数据库更少的存储空间,因为许多NoSQL解决方案通常占用的空间比SQL数据库少。此外,如果服务器端逻辑对您来说非常重要,那么尝试使用Tarantool,因为它具有Lua脚本,并且应该占用很小的内存空间。在我的情况下,Tarantool中的相同数据比MySQL中少了两倍。这是因为它们每行和每个字段的开销很小,并且使用messagepack进行数据存储。

相关问题