如何将MemCached服务器链接在一起?

时间:2008-12-09 12:01:16

标签: memcached

我正在考虑将MemCached用于我正在开发的Web应用程序,在过去几天研究MemCached之后,我遇到了一个我无法找到答案的问题。

如何将Memcached服务器链接在一起或如何在MemCached服务器之间复制数据?

此外:此功能是由服务器还是客户端控制以及如何实现?

6 个答案:

答案 0 :(得分:7)

当您设置多个服务器时,客户端库使用第一个哈希来选择存储每个密钥/数据对的位置。这意味着没有复制,并且每个客户端都必须使用同一组服务器。

的优点:

  • 几乎零开销,存储和带宽线性增长。
  • 服务器代码简单可靠。

缺点:

  • 服务器集中的任何更改(一个服务器发生故障,或者您添加一个新服务器)突然使(几乎)整个缓存失效。
  • 您必须确保在每个客户端上使用相同的算法。

如果您可以控制客户端的代码,则可以在两台服务器上简单地存储两次密钥/数据对。在从不同的客户端阅读时,一定要搜索相同的地方。

答案 1 :(得分:5)

我已经使用了BeITMemcached,你可以创建一个MemcacheClient实例并设置你想要使用的服务器,就像字符串一样。

此时,客户端自己确定哪些服务器可用于放入不同的项目。你永远不知道项目将在哪个。

检查here to see how the servers handle failover

最简单的方法是拥有重新填充机制。在我的例子中,我在memcache中存储了几百个来自数据库的对象。我可以称之为重新填充并将它们全部放回原处。每当我向数据库添加,更新或删除它们时,我都会对memcache进行相同的调用。

答案 2 :(得分:2)

http://repcached.lab.klab.org/

此外,PHP PECL内存缓存客户端可以将数据复制到多个服务器,请参阅memcache.redundancy。

答案 3 :(得分:1)

听起来你希望有能够应对机器重启的缓存等等......

在很多情况下(假设你没有写Facebook),RDMS足够快,可用于缓存。只需创建一个包含键和blob列的表。如果RDBS服务器有足够的RAM,则所有数据都将存储在RAM中,并保存到磁盘以便进行恢复。

请记住,这可能是与主数据库服务器不同的服务器。

如果您希望获得更多花哨并且正在使用高端RDMS,您可以在用于构建“缓存数据”的查询上设置更改通知,以删除过时的行缓存。

有人可以设置触发器来清除缓存中的无效行,但这可能非常复杂。

答案 4 :(得分:0)

Memcached不提供复制属性。为此,您需要将服务器添加到memcached客户端服务器列表,然后点击DB以将数据存储在该特定服务器中。

答案 5 :(得分:0)

你应该认真考虑CouchBase。它使用memcached协议,提供几乎相同的速度,并提供您正在寻找的自动复制。它也会持久存储到磁盘,因此您的缓存永远不会冷。