代码之家  ›  专栏  ›  技术社区  ›  HarryF

PHP-pecl/memcached扩展在设置一致哈希选项时速度慢

  •  5
  • HarryF  · 技术社区  · 15 年前

    使用更新的PHP-pecl/memcached扩展。对Memcached::setOption()的调用类似于;

    $m = new Memcached();
    $m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
    

    更深入地研究,将Memcached::OPT\u DISTRIBUTION设置为Memcached::DISTRIBUTION\u CONSISTENT,最终在libmemcached中调用update\u continuum(),这似乎相当密集,尽管我们只传递了15个Memcached服务器的列表,所以有点惊讶地看到重建continuum数据结构需要150到500毫秒。

    是否设置此选项只适用于持久连接,在进行初始连接时只调用一次?或者这是一个bug libmemcached?

    使用更新的pecl/memcached扩展1.0.1和libmemcached 0.38

    2 回复  |  直到 15 年前
        1
  •  2
  •   andrei    14 年前

    libmemcached 0.38在这一点上相当旧。pecl/memcached1.0.1也是如此。你能试试github的pecl/memcached2.0.0b1版本吗?

        2
  •  0
  •   Yvan    10 年前

    pecl/memcached2.2.0也有同样的问题(最新的pecl版本)。对我来说,唯一的解决方案是从发行版切换到:

    $memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
    $memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true);
    

    它似乎工作得很好:

    var_dump($memcached->getServerByKey($key)['host']);
    // string '192.168.56.1' (length=12) <== dead host
    
    $memcached->set($key, $result, 3600);
    
    var_dump($memcached->getServerByKey($key)['host']);
    // string '127.0.0.1' (length=9) <== working host
    
    var_dump($memcached->getLastErrorMessage());
    // string 'SUCCESS' (length=7)