6

鉴于常见问题解答报价,我正在寻找有关处理打开 memcached 连接的有效解决方案的建议:

请记住,没有什么能阻止您意外连接多次。如果您将 memcached 客户端对象实例化为您尝试存储的对象的一部分,当一个请求中的 1,000 个对象创建 1,000 个并行连接时,请不要感到惊讶。在加入列表之前,请仔细查找此类错误。

另请参阅:初始化 Memcached 客户端管理连接对象

我考虑在我们的缓存程序集中使用单例来提供 memcached 客户端,但我确信必须有更好的方法,因为锁会引入(不需要的?)开销。

我很清楚客户端的使用模式,我不清楚的是如何在可扩展性和性能方面有效地使用客户端。其他人如何处理使用 memcached 客户端?

里面有50个赏金给你。

4

1 回答 1

3

我们有一个与 redis 客户端类似的场景,最初我们的解决方案是拥有一个我们同步访问的通用单个实例 via lock。这很好,但是为了避免延迟和阻塞,我们最终编写了一个线程安全的流水线客户端,它允许并发使用而没有任何阻塞。我对男性疼痛协议知之甚少,但我想知道类似的东西是否适用于此。如果您可以稍等片刻,我实际上很想尝试调查是否可以将其添加到 BookSleeve(我们的自定义 OSS redis 客户端)。

但是我们通常能够仅仅使用一个同步的共享实例来跟上进度(与单例几乎相同,这取决于您的纯粹性)。


看了FAQ,pipeline确实是有可能的;而且我完全愿意在bookleeve中编写一个异步/流水线 memcached 客户端。大多数原始 IO / 多路复用在 redis 中很常见。您可以考虑的其他技巧是在可能的情况下使用 get_multi 等而不是单独获取 - 不过,我不知道您当前的客户端是否支持这一点(IK 还没有查看)。

但是:我不知道它如何将 memcached 与 redis 进行对比,但在我们的例子中,切换到流水线/多路复用 API 意味着我们不需要使用太多池(许多连接)——单个连接(正确流水线)是有能力的从单个节点支持大量并发使用。

于 2011-04-28T16:59:27.817 回答