memcache/php 的最佳实践 - 多 memcache 节点

memcache/php 的最佳实践 - 多 memcache 节点

所以我正在开发一个 Web 应用程序 - 必须为可扩展性而构建。它将频繁的 MySQL 查询存储到缓存中。我几乎已经构建好了一切并准备就绪 - 但我担心处理缓存数据位置的最佳实践。我和几个人谈过,其中一人建议将每个键/值拆分到所有 memcache 节点上。

意思是如果我存储示例:“somekey”,“这是值”

它将被分成 3 个 memcache 服务器。

这是更好的方法吗?或者 memcache 是否更适合建立在 1 对 1 的关系上?例如。

将值存储在服务器 A 上直到出现故障 - 转到服务器 B 并存储在那里。

这是我从之前的研究以及过去使用 memcache 的经验中得出的当前理解。

有人可以给我指出正确的方向并让我知道哪种方法最好或者我是否完全混淆了。

谢谢

答案1

memcached 的几乎所有“分布式”部分都是在客户端处理的。

如果您的配置中定义了多个 memcached 服务器(我在您的帖子中看到了 php 标签,所以我猜您正在使用 pecl/memcache,但我认为 pecl/memcached 的语法类似)

<?php 
$mc = new Memcache() 
$mc->addServer('node1', 11211); 
$mc->addServer('node2', 11211); 
$mc->addServer('node3', 11211); 
?> 

客户端将使用密钥的哈希值来确定将数据放入哪个服务器。addServer 方法有一个选项 (retry_interval = -1),如果 memcached 服务器出现故障,您的 PHP 将不会继续尝试该服务器。

有一些关于如何在 Memcache 中进行“复制”的信息,但根据我的经验,这并不值得付出努力或“浪费”内存(你必须存储全部缓存于全部服务器,如果您只使用内置分发机制,则只需将其存储在一台服务器上。显然,如果您的一台服务器死机,您将获得缓存未命中,直到该数据存储在另一台服务器上,但无论如何,您不应该将 Memcache 用作持久存储)。Memcache 客户端协议非常智能。;)

原文链接至https://blogs.oracle.com/trond/entry/replicate_your_keys_to_multiple已删除,因为它不再存在。

相关内容