首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制memcached写入池中的所有服务器

强制memcached写入池中的所有服务器
EN

Stack Overflow用户
提问于 2010-05-24 05:31:33
回答 3查看 3K关注 0票数 4

我曾考虑过如何确保将特定的键分发到池中的所有memcached服务器。

我目前未经测试的解决方案是创建另一个memcached实例,类似于:

代码语言:javascript
复制
$cluster[] = array('host' => '192.168.1.1', 'port' => '11211', 'weight' => 50);

$this->tempMemcached = new Memcached;
$this->tempMemcached->addServers($cluster);

foreach ($this->cluster() as $cluster) {    

    $this->tempMemcached->setByKey($cluster, $key, $value, $this->compress, $expireTime);

}

$this->tempMemcache->close();

在这种情况下,当某些密钥需要存储在所有服务器上以保证可靠性时,常识是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-26 21:23:55

我认为您没有按照设计的方式使用memcached。看一下FAQ:您应该只存储项目的single copy,根据使用的散列算法,它会将您的项目放在某个节点上。

现在,如果您想让一个项目在所有节点的中都可用,唯一的方法就是迭代,就像您现在正在做的那样。

我希望你的代码能够处理在缓存中找不到这个项目的情况。

票数 6
EN

Stack Overflow用户

发布于 2010-05-24 07:53:38

我认为你错过了Memcached的要点。它不是用于可靠的数据存储。它用于非常快速地访问缓存数据。如果你想要冗余,试试像MongoDB这样的NOSQL数据库...

此外,创建多个连接将不利于性能和冗余(它需要建立的连接越多,出错的可能性就越大,并且需要为每个请求做更多的事情)。

简化,不要复杂化..。

票数 4
EN

Stack Overflow用户

发布于 2010-06-03 12:46:48

我们不得不将频繁命中的键的负载“分散”到memcache服务器上。我们只需添加一个随机数0-N就可以做到这一点,其中N是已配置实例数量的倍数。如果未命中,则转到源文件(数据库,无论什么)。我说的是一个倍数,因为memcache对你的key进行了哈希运算,所以你可能会在不知道的情况下发生冲突。

这可能会导致从源读取更多的前期成本(与N的倍数成正比),但会将一个键的负载分散到所有实例中,使这些框保持满意。

但是,是的,这不是为了冗余,它是为了负载平衡。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2893544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档