14

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

4

4 回答 4

17

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

现在,如果您需要将部分处理从数据库中移出,那么预缓存可能是一种选择。在谈 memcached/redis 之前,如果只考虑一台服务器(实际上比 redis/memcached 更高效),与 php 集成的共享内存缓存(例如 APC)将是高效的。

memcached和redis都可以考虑进行远程缓存(即各个节点之间共享缓存)。我不会为此排除 redis:它可以很容易地为此目的进行配置。两者都将允许定义内存限制,并以类似 LRU 的行为处理缓存。

但是,我不会在这里使用 couchbase,它是一种弹性(即应该在多个节点上使用)NoSQL 键/值存储(即不是缓存)。您可能可以将一些数据从 mysql 实例移动到 couchbase 集群,但仅将其用于缓存是过度设计 IMO。

于 2012-02-10T08:20:36.700 回答
2

我们最初使用 memcached 来缓存数据。在 memcached 中,为不同应用程序在不同存储桶下分区数据是一个真正的问题。此外,我们需要仅从一个存储桶中刷新数据。监控数据是另一个要求。我们搬到了 Couchbase 并使用了 memcache 风格的存储桶。我想使用 Couchbase memcache 风格的存储桶进行缓存而不是使用 memcached 会更加灵活和高效。

于 2013-01-15T06:58:21.997 回答
2

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

于 2015-01-07T13:39:50.207 回答
1

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

于 2015-07-08T16:33:24.793 回答