PHP Conference Japan 2024

Memcached::addServers

(PECL memcached >= 0.1.1)

Memcached::addServers向服务器池添加多个服务器

描述

public Memcached::addServers(数组 $servers): 布尔值

Memcached::addServers()$servers 添加到服务器池。 $servers 中的每个条目都应该是一个数组,包含服务器的主机名、端口和可选的权重。此时不会建立与服务器的连接。

同一服务器可以多次出现在服务器池中,因为没有进行重复检查。这并不建议这样做;相反,可以使用 weight 选项来增加此服务器的选择权重。

参数

数组

要添加到池中的服务器数组。

返回值

成功时返回 true,失败时返回 false

示例

示例 #1 Memcached::addServers() 示例

<?php
$m
= new Memcached();

$servers = array(
array(
'mem1.domain.com', 11211, 33),
array(
'mem2.domain.com', 11211, 67)
);
$m->addServers($servers);
?>

参见

添加注释

用户贡献的注释 2 条注释

5
Aliaser
8 年前
对于正确的故障转移机制

$memcached = new Memcached();
$memcached->setOption(Memcached::OPT_CONNECT_TIMEOUT, 10);
$memcached->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$memcached->setOption(Memcached::OPT_SERVER_FAILURE_LIMIT, 2);
$memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true);
$memcached->setOption(Memcached::OPT_RETRY_TIMEOUT, 1);
$memcached->addServers($servers);

Memcached::OPT_DISTRIBUTION:将其设置为一致性哈希。如果一个 memcached 节点失效,它的键(并且只有它的键)将被均匀地分布到其他节点。这就是魔法发生的地方。这与在您的 ->addServers() 调用中删除一个服务器有很大不同。

Memcached::OPT_SERVER_FAILURE_LIMIT:在服务器被标记为 DEAD 并从服务器列表中删除之前,连接问题的数量(默认值:5)。

Memcached::OPT_REMOVE_FAILED_SERVERS:将其设置为“true”,以启用删除失效服务器。

Memcached::OPT_RETRY_TIMEOUT:在节点被声明为 DEAD 之后,libmemcached 将在这么多秒后再次尝试它。这里我将其设置为 1 秒,但我正在处理的 PHP 脚本大多数情况下运行时间不到 100 毫秒。这仅对 cron/守护进程脚本有用。

Memcached::OPT_CONNECT_TIMEOUT:服务器被认为是 DEAD 后的超时时间。由于我的服务器位于同一个 LAN 上,ping 大约为 0.5 毫秒,因此 10 毫秒足以认为服务器是 DEAD。请注意,您必须等待两倍的时间才能将节点标记为 DEAD,因此如果它是 1000 毫秒,您的脚本将在忽略 DEAD 服务器之前锁定 2 秒。这可能会严重影响您的响应时间,这就是我将其设置得很低的原因。

作者是 Dugwood 的 Yvan
1
Michael Brenden
13 年前
参见 __construct() 的注释

重要的是不要在每次运行时调用 ->addServers()——仅当不存在服务器时才调用它(检查 getServerList());否则,由于 addServers() 不检查重复项,它将允许您一次又一次地添加相同的服务器,导致与 MC 守护程序建立数百甚至数千个连接。
To Top