• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • Memcached::getServerByKey()

    (PECL memcached >= 0.1.0)

    获取一个key所映射的服务器信息

    说明

    publicMemcached::getServerByKey(string $server_key): array

    Memcached::getServerByKey()返回$server_key所映射的服务器,Memcached::*ByKey()系列方法的中的$server_key参数,实际上就是用来获取操作的服务器的.(译注:可以这样理解,*ByKey系列函数首先调用Memcached::getServerByKey()获取服务器,然后在此服务器上进行操作.)

    参数

    $server_key

    本键名用于识别储存和读取值的服务器。没有将实际的键名散列到具体的项目,而是在决定与哪一个 memcached 服务器通信时将其散列为服务器键名。这使得关联的项目在单一的服务上被组合起来以提高多重操作的效率。

    返回值

    成功时返回TRUE,或者在失败时返回FALSE。如需要则使用Memcached::getResultCode()。

    范例

    Example #1 Memcached::getServerByKey()示例

    <?php
    $m = new Memcached();
    $m->addServers(array(
        array('mem1.domain.com', 11211, 40),
        array('mem2.domain.com', 11211, 40),
        array('mem3.domain.com', 11211, 20),
    ));
    $m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
    var_dump($m->getServerByKey('user'));
    var_dump($m->getServerByKey('log'));
    var_dump($m->getServerByKey('ip'));
    ?>
    

    以上例程的输出类似于:

    array(3) {
      ["host"]=>
      string(15) "mem3.domain.com"
      ["port"]=>
      int(11211)
      ["weight"]=>
      int(20)
    }
    array(3) {
      ["host"]=>
      string(15) "mem2.domain.com"
      ["port"]=>
      int(11211)
      ["weight"]=>
      int(40)
    }
    array(3) {
      ["host"]=>
      string(15) "mem2.domain.com"
      ["port"]=>
      int(11211)
      ["weight"]=>
      int(40)
    }
    
    The parameter server_key is very confusing, it's not a server key for MemCached Server, but it's key,in key-value pair which you stored in server.
    <?php
    $m = new Memcached;
    $m->addServers(array(
      array('127.0.0.1',11212),
      array('127.0.0.1',11211)
    ));
    for($i=0;$i<10;$i++){
      $key = 'key_'.$i;
      $m->add($key, 1);
    }
    for($i=0;$i<10;$i++) {
      $key = 'key_'.$i;
      $arr = $m->getServerByKey($key);
      echo ($key.":\t".$arr['port']."\n");
    }
    ?>
    key_0: 11212
    key_1: 11211
    key_2: 11212
    key_3: 11212
    key_4: 11212
    key_5: 11211
    key_6: 11211
    key_7: 11212
    key_8: 11212
    key_9: 11211
    Just to clarify (as documentation of memcached, even for C lib, frankly is quite lacking), $server_key is hashed using same method as regular keys for values (I checked C source, as again docs......). So you should be able to see where set($key, $value) goes by using getServerByKey($key) with same key. This can be useful if one does not wish to bother with using/has no need to use *ByKey functions, but still want to know which servers are/should be used with regular keys, for implementing fallback or failure reporting.