1

由于最佳实践是在单个服务器上将经常一起检索的相关键(使用 multiGet)分组以获得最佳性能,因此我对为此构建的客户端函数所采用的隐式机制有几个问题。

我已经看到了两种不同的方法来服务于我认为使用 libmemcache(特别是 php-memcached)的相同目的。第一种也是最明显的方法是使用 getByKey/setByKey 将密钥映射到服务器,第二种是使用选项 OPT_PREFIX_KEY(在 memcached::_construct 下的 php 文档中发布了一个简单的示例),根据文档是“用于为您的项目密钥创建一个'域'”。第二种方法的警告是它只能在每个实例的基础上设置,这可能是也可能不是一件好事。

因此,除非我完全弄错了,而且这两种方法实际上并没有达到相同的目的;与其他方法相比,这有什么明显的好处吗?

当我谈到这个话题时,我的另一个问题是:在一致的散列场景中将密钥映射到服务器有什么影响(如果有的话)?我假设如果一个节点发生故障,自由格式密钥将简单地重新映射到新服务器而没有任何问题..

谢谢!

4

1 回答 1

0

如果这些键实际上几乎总是一起检索,您可能希望将它们一起缓存在单个键/值对中,例如通过排序和连接键并将值序列化为 JSON 或类似格式的字典。

回到你的问题:

  • OPT_PREFIX_KEY 几乎与按键分组值无关,它只是为该特定客户端使用的所有键添加前缀,因此“1”变为“foo1”,并使用此新值通过一致散列分布,没有任何按“foo”分组。
  • getByKey/setByKey 做的事情最接近你想要的,因为它可以将不同的密钥传递给 libketama(用于选择服务器)和 memcached 服务器。如果您指定相同的第一个键和不同的第二个键 - 它们最终会在同一个 memcached 服务器上,但不会相互覆盖。

过早的优化是万恶之源

于 2012-05-18T09:51:43.480 回答